今月にCloud IDSというフルマネージドなIDSがGCPで利用できるようになりました。
試しに導入してみたので、その手順をメモしておきます。
Cloud IDSとは
Cloud IDSとはGCPが提供しているフルマネージドなIDS(侵入検知システム)です。
VPCネットワーク内の通信を監視し、セキュリティリスクを発見してくれます。
通信の監視のためにVPCのPacket Mirroring機能を使用しています。
この機能はSDNのレイヤーで機能するため、VPC内で動いている個々のVMやコンテナに対する設定は不要です。
また、IDSそのものはPalo Altoのものが使われており、検知可能なシグネチャはPalo Altoのページで確認できます。
設定してみた
Private service accessの設定
最初にPrivate service accessを設定します。
Cloud IDSはIDSとして動作するVMがGoogle管理のVPCに立ち上がり、そのVPCとVPC Peeringすることによって動作します。
そのため、その設定を最初に行います。
Google管理のVPCのCIDR範囲を指定します。
Cloud SQLなどでも初回構築時に同様のことをしている場合があります。
その場合はこのコマンドは不要です。
gcloud compute addresses create <CIDRレンジ予約名> \
--global \
--purpose=VPC_PEERING \
--addresses=<Googleに払い出すCIDRのネットワークアドレス> \
--prefix-length=<Googleに払い出すCIDRのサブネットマスク> \
--network=<VPCネットワークID>
次にVPC Peeringを設定します。
gcloud services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=<CIDRレンジ予約名> \
--network=<VPCネットワークID> \
--project=<プロジェクトID>
Cloud IDSのエンドポイントの作成
gcloud ids endpoints create <エンドポイント名> /
--network=<VPCネットワーク名> /
--zone=<IDSを配置するゾーン> /
--severity=<INFORMATIONAL|LOW|MEDIUM|HIGH|CRITICAL>
IDSを配置するゾーンは監視したいVMが配置されているゾーンと同一ゾーンに設定します。
VPCのルーティングモードがグローバルならば、別ゾーンにも配置できそうな気もしますが、未検証です。
また、現状ではエンドポイントを作成後にseverityオプションを変更することができないので、注意が必要です。
エンドポイントの作成は数分〜数十分で完了します。
完了後に以下のコマンドを実行し、endpointForwardingRuleに表示されているURLをメモしておきます。
gcloud ids endpoints describe --zone=<IDSを配置したゾーン> <エンドポイント名>
Packet Mirroringの設定
最後にPacket Mirroringを設定してVPC内に流れるパケットをCloud IDSにも流すようにします。
gcloud compute packet-mirrorings create <ポリシー名> \
--region=<リージョン> --collector-ilb=<さっきメモしたendpointForwardingRule> \
--network=<VPCネットワーク名> --mirrored-subnets=<監視したいVMが配置されているサブネット>
Packet Mirringには他にも多くのオプションがあるので、それによって柔軟に監視対象を設定することもできます。
例えば、mirrored-tagsオプションを使うことで、特定のタグがついているVMのみを監視対象にすることもできます。
設定の確認
Cloud IDSの設定が完了したので、正常に通信を監視できているかどうかを確認してみます。
今回は監視対象のVMの中で以下のコマンドを実行してみました。
curl http://example.com/cgi-bin/../../../..//bin/cat%%20/etc/passwd
その結果、Cloud IDSの画面でこのように表示され、脅威検知ができていることが分かりました。