次の手順でアプリケーションの Cloud IDS を構成します。Cloud IDS のコンセプトについては、Cloud IDS の概要をご覧ください。
始める前に
Cloud IDS を構成する前に、次の要件を満たす必要があります。
Cloud IDS の IAM 権限を設定する
Cloud IDS には、Identity and Access Management(IAM)ロールがいくつかあります。このコマンドの例を参考に、必要な IAM 権限をプリンシパルに付与してください。
Cloud IDS 管理者のロール(
roles/ids.admin
)。 このロールを持つプロジェクト プリンシパルは、IDS エンドポイントを作成できます。プロジェクト オーナーにはすでにこの権限が付与されているため、IDS エンドポイントを作成するために明示的にids.admin
ロールを付与する必要はありません。gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/ids.admin \ --member=user:USER_NAME ;
このロールにより次の操作が可能になります。
- エンドポイントの作成
- エンドポイントの削除
- エンドポイントの取得
- エンドポイントの一覧表示
Cloud IDS 閲覧者のロール(
roles/ids.viewer
)。プロジェクト閲覧者と、このロールを持つプリンシパルは、IDS エンドポイントに対する読み取り専用権限を持ちます。プロジェクトのオーナー、編集者、閲覧者にはすでにこの権限が付与されています。gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/ids.viewer \ --member=user:USER_NAME ;
コンピューティング パケット ミラーリング ユーザーのロール(
roles/compute.packetMirroringUser
)。パケット ミラーリング ポリシーを IDS エンドポイントに接続するために必要なロールです。ロールcompute.securityAdmin
またはロールcontainer.serviceAgent
を割り当てられている場合は、すでにこの権限が付与されています。このロールについて詳しくは、IAM の基本ロールと事前定義ロールのリファレンスをご覧ください。gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/compute.packetMirroringUser \ --member=user:USER_NAME ;
ログ閲覧者のロール(
roles/logging.viewer
)。Cloud IDS の重要なコア機能である、最近の脅威の表示に必要な追加のロールです。このロールについて詳しくは、アクセス制御ガイドをご覧ください。gcloud projects add-iam-policy-binding PROJECT_ID \ --role=roles/logging.viewer \ --member=user:USER_NAME ;
また、次の権限も追加で必要になります。
compute.regions.list
compute.zones.list
プライベート サービス アクセスを設定する
IDS エンドポイントを作成するには、Service Networking API を有効にして、Virtual Private Cloud(VPC)ネットワークのネットワーク ピアリングを設定する必要があります。この設定は、Google Cloud コンソールまたは Google Cloud CLI を使用して、お客様のプロジェクトごとに 1 回だけ行います。IP アドレス範囲を割り当てる際は、RFC 1918 に準拠したプライベート IP アドレス範囲(10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
)を使用する必要があります。そうでない場合、エンドポイントの作成に失敗します。
プライベート サービス アクセスを設定するには、次の手順で操作します。
次のコマンドを使用して、Service Networking API を有効にします。
PROJECT_ID
は実際のプロジェクト ID に置き換えてください。gcloud services enable servicenetworking.googleapis.com \ --project=PROJECT_ID
ネットワークで IP アドレス範囲をまだ割り当てていない場合は、VPC ネットワークで Google サービスに IP 範囲を割り当てる必要があります。次のコマンドでは、
addresses
フィールドを省略できます。VPC ネットワークで使用されていないアドレス範囲がGoogle Cloud により選択されます。gcloud compute addresses create RESERVED_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --addresses=192.168.0.0 \ --prefix-length=16 \ --description="DESCRIPTION" \ --network=VPC_NETWORK
次のように置き換えます。
RESERVED_RANGE_NAME
: 割り振り範囲の名前(my-allocated-range
など)。DESCRIPTION
: 範囲の説明(allocated for my-service
など)。VPC_NETWORK
: VPC ネットワークの名前(my-vpc-network
など)
サービス プロデューサーへのプライベート接続を作成します。プライベート接続により、VPC ネットワークとサービス プロデューサーのネットワークの間に VPC ネットワーク ピアリング接続が確立されます。
既存のプライベート接続がある場合は、
gcloud services vpc-peerings update
コマンドを使用して更新します。gcloud services vpc-peerings update \ --service=servicenetworking.googleapis.com \ --ranges=RESERVED_RANGE_NAME \ --network=VPC_NETWORK \ --project=PROJECT_ID
プライベート接続がまだない場合は、
gcloud services vpc-peerings connect
コマンドを使用します。このコマンドにより、オペレーション名を返す長時間実行オペレーションが開始されます。gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=RESERVED_RANGE_NAME \ --network=VPC_NETWORK \ --project=PROJECT_ID
次のように置き換えます。
RESERVED_RANGE_NAME
: 1 つ以上の割り当て範囲の名前VPC_NETWORK
: VPC ネットワークの名前PROJECT_ID
: VPC ネットワークが使用されるプロジェクトの ID
オペレーションが成功したかどうかを確認するには、
gcloud services vpc-peerings operations describe
コマンドを使用します。gcloud services vpc-peerings operations describe \ --name=OPERATION_NAME
OPERATION_NAME
は、前の手順で返されたオペレーション名に置き換えます。
モニタリングする VPC ネットワークごとに手順 2~3 を繰り返します。
省略可: VPC Service Controls を有効にする
プライベート サービス アクセスを有効にすると、必要に応じて Cloud IDS で VPC Service Controls を有効にできます。有効になっている場合は、services vpc-peerings enable-vpc-service-controls
コマンドを実行して、すべてのピアリング接続で VPC Service Controls を有効にします。
gcloud services vpc-peerings enable-vpc-service-controls \ --service=servicenetworking.googleapis.com \ --network=VPC_NETWORK \ --project=PROJECT_ID
次のように置き換えます。
VPC_NETWORK
: VPC ネットワークの名前PROJECT_ID
: VPC ネットワークが使用されるプロジェクトの ID
Cloud IDS エンドポイントを作成する
ワークロードをデプロイしたすべてのリージョンに IDS エンドポイントを作成することをおすすめします。リージョンごとに複数の IDS エンドポイントを作成することもできます。次の手順で IDS エンドポイントを作成し、IDS サービス プロファイルを割り当てます。
コンソール
Google Cloud コンソールで、[IDS エンドポイント] に移動します。
エンドポイントを構成します。
- [エンドポイントの作成] をクリックします。
- [名前] フィールドに名前を入力します。
- 省略可: [説明] フィールドに説明を入力します。
- [ネットワーク] プルダウン リストをクリックし、Cloud IDS で検査するネットワークを選択します。
- ネットワークまたはサブネットのリージョンとゾーンを、[リージョン] プルダウン リストと [ゾーン] プルダウン リストから選択します。
- [続行] をクリックします。
Cloud IDS サービス プロファイルを選択します。
- [IDS サービス プロファイルの選択] をクリックします。
- [Minimum threat severity level] で、適切なアラートレベルを選択します。
- [作成] をクリックします。作成には 10~15 分ほどかかることがあります。
IDS エンドポイントを作成したら、その IDS エンドポイントにパケット ミラーリング ポリシーを接続します。
- [エンドポイント] タブを選択します。
- IDS エンドポイントの横にある [接続] をクリックします。
- [ポリシー名] フィールドに、パケット ミラーリング ポリシーの名前を入力します。
- [次へ] をクリックします。
- ミラーリングするサブネットまたはインスタンスを選択します。複数のサブネットとインスタンスを選択できます。
- [次へ] をクリックします。
- すべてのトラフィックをミラーリングするか、トラフィックをフィルタリングするかを決めます。
- すべてのトラフィックをミラーリングするには、[すべてのトラフィックをミラーリングする] が選択されていることを確認します。
- プロトコル、IP アドレス範囲、上り(内向き)トラフィックまたは下り(外向き)トラフィックに基づいてトラフィックをフィルタする場合は、[フィルタ済みトラフィックをミラーリングする] を選択します。
- [すべてのプロトコルを許可] または [特定のプロトコルを許可する] を選択します。
- [Allow all IP ranges] または [Allow specific IP ranges] を選択します。
- [送信] をクリックします。エンドポイントが作成されます。
これで、脅威ログが生成されているかどうかを確認できるようになりました。次の手順は省略できます。
- [IDS の脅威] タブをクリックします。
- 脅威名をクリックすると、その脅威の [脅威の詳細] のページが表示されます。
- [脅威] タブに戻ります。
- IDS エンドポイントの右側にある メニューをクリックし、[脅威ログを表示する] を選択します。
gcloud
オプション フラグ
このセクションのコマンドでは、次のオプション フラグの一部またはすべてを使用できます。
--no-async
--filter=EXPRESSION
--flatten
、--sort-by
、--filter
、--limit
の順序で適用される他のフラグと連携します。--limit=LIMIT
--flatten
、--sort-by
、--filter
、--limit
の順序で適用される他のフラグと連携します。--page-size=PAGE_SIZE
--filter
と --limit
の前または後に適用できます。--sort-by=[FIELD,…]
--flatten
、--sort-by
、--filter
、--limit
の順序で適用される他のフラグと連携します。--uri
--threat-exceptions
手順
新しい IDS エンドポイントを作成するには、次の手順で操作します。
gcloud ids endpoints create
コマンドを使用します。ENDPOINT_NAME
、VPC_NETWORK
、ZONE
、SEVERITY
は、使用しているアプリケーションの情報に置き換えます。gcloud ids endpoints create ENDPOINT_NAME \ --network=VPC_NETWORK \ --zone=ZONE \ --severity=SEVERITY \ [--no-async] \ [GCLOUD_WIDE_FLAG...]
重大度のフラグは必須です。次のいずれかの値を指定します。
- 情報
- 低
- MEDIUM
- 高
- 重大
エンドポイントを作成したら、その IDS エンドポイントにパケット ミラーリング ポリシーを接続します。まず、次のコマンドを使用して
endpoint_forwarding_rule
フィールドから URL を取得します。gcloud ids endpoints describe ENDPOINT_NAME
次のコマンドを使用して、パケット ミラーリング ポリシーを作成します。
gcloud compute packet-mirrorings create POLICY_NAME \ --region=REGION --collector-ilb=ENDPOINT_FORWARDING_RULE \ --network=VPC_NETWORK --mirrored-subnets=SUBNET
Packet Mirroring には、プロトコル、IP アドレス範囲、上り(内向き)トラフィックまたは下り(外向き)トラフィックに基づいてトラフィックをフィルタできるフラグなど、オプション フラグがいくつかあります。これらのオプション フラグについて詳しくは、パケット ミラーリングのリファレンスをご覧ください。
IDS エンドポイントを削除するには、gcloud ids endpoints
delete
コマンドを使用します。ENDPOINT_NAME
、PROJECT_ID
、ZONE
は、使用するアプリケーションの情報に置き換えます。
gcloud ids endpoints delete ENDPOINT_NAME \ [--project=PROJECT_ID] \ [--zone=ZONE] \ [--no-async] \ [GCLOUD_WIDE_FLAG...]
IDS エンドポイントの説明をするには、gcloud ids endpoints
describe
コマンドを使用します。ENDPOINT_NAME
、PROJECT_ID
、ZONE
は、使用するアプリケーションの情報に置き換えます。
gcloud ids endpoints describe ENDPOINT_NAME \ [--project=PROJECT_ID] \ [--zone=ZONE] \ [GCLOUD_WIDE_FLAG...]
IDS エンドポイントを一覧表示するには、gcloud ids endpoints list
コマンドを使用します。
gcloud ids endpoints list / [--filter=EXPRESSION] \ [--limit=LIMIT] \ [--page-size=PAGE_SIZE] \ [--sort-by=[FIELD,...]] \ [--uri] \ [GCLOUD_WIDE_FLAG...]
API
Cloud IDS エンドポイント リソースには、次のフィールドがあります。
フィールド | 型 | フィールドの説明 |
---|---|---|
createTime | 文字列 | [出力のみ] 作成タイムスタンプ(RFC 3339 テキスト形式)。 |
updateTime | 文字列 | [出力のみ] 最終更新タイムスタンプ(RFC 3339 テキスト形式)。 |
名前 | 文字列 | [出力のみ] エンドポイントの名前(projects/{project_id}/locations/{locationId}/endpoints/{endpointId} 形式)。 |
network | 文字列 | IDS エンドポイントに接続されている VPC ネットワークの名前。VPC ネットワーク名自体("src-net" など)またはネットワークへの完全な URL("projects/{project_id}/global/networks/src-net" など)のいずれかを含めることができます。このフィールドは、エンドポイントの作成時に必須です。 |
severity | 文字列 | エンドポイントから報告されるアラートの最小重要度レベル。次の値を指定できます。
このフィールドは、エンドポイントの作成時に必須です。 |
description | 文字列 | エンドポイントの説明(省略可)。 |
endpoint_forwarding_rule | 文字列 | [出力のみ] Packet Mirroring がトラフィックを送信する宛先となるエンドポイントのネットワーク アドレスの URL。 |
endpoint | 文字列 | [出力のみ] エンドポイントのネットワーク エントリー ポイントの内部 IP アドレス。 |
Cloud IDS エンドポイントを作成するには、次のような HTTP POST リクエストを使用し、必要に応じて変数を置き換えます。ENDPOINT_NAME
は 1~63 文字で指定します。使用できるのは小文字、数字、ハイフンのみです。先頭は英小文字にする必要があり、末尾をハイフンにすることはできません。
POST https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME { "network": "NETWORK_NAME", "severity": "SEVERITY_LEVEL", }
Cloud IDS エンドポイントを削除するには、次のような HTTP DELETE
リクエストを使用し、必要に応じて変数を置き換えます。
DELETE https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME
Cloud IDS エンドポイントを取得するには、次のような HTTP GET
リクエストを使用し、必要に応じて変数を置き換えます。
GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints?endpointId=ENDPOINT_NAME
ゾーン内のすべての Cloud IDS エンドポイントを一覧表示するには、次のような HTTP GET
リクエストを使用し、必要に応じて変数を置き換えます。
GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/ZONE/endpoints
すべてのゾーンのすべての Cloud IDS エンドポイントを一覧表示するには、ZONE
を次のようにハイフンに置き換えます。
GET https://ids.googleapis.com/v1/projects/PROJECT_NAME/locations/-/endpoints
省略可: 脅威の例外を構成する
Cloud IDS エンドポイントの作成または更新時に、--threat-exceptions
フラグを使用してノイズの多いまたは不要な脅威 ID を無効にできます。次の例では、既存の Cloud IDS エンドポイント ENDPOINT_NAME を更新して、脅威 ID THREAT_ID1 と THREAT_ID2 を除外します。
gcloud ids endpoints update ENDPOINT_NAME
--threat-exceptions=THREAT_ID1,THREAT_ID2