次の手順に沿って、アプリケーションの 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)ネットワークのネットワーク ピアリングを設定する必要があります。これは、お客様のプロジェクトごとに 1 回だけ行う必要があります。これには、Google Cloud コンソールまたは Google Cloud CLI を使用できます。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
フィールドを省略できます。Google Cloud は、VPC ネットワークで使用されていないアドレス範囲を選択します。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 サービス プロファイルを割り当てます。
Console
Google Cloud コンソールで、[IDS エンドポイント] に移動します。
エンドポイントを構成します。
- [エンドポイントの作成] をクリックします。
- [エンドポイント名] フィールドに名前を入力します。
- 省略可: [説明] フィールドに説明を入力します。
- [ネットワーク] プルダウン リストをクリックし、Cloud IDS で検査するネットワークを選択します。
- ネットワークまたはサブネットのリージョンとゾーンを、[リージョン] プルダウン リストと [ゾーン] プルダウン リストから選択します。
- [続行] をクリックします。
Cloud IDS サービス プロファイルを選択します。
- [IDS サービス プロファイルの選択] をクリックします。
- [脅威の最小重大度レベル] で、適切なアラートレベルを選択します。
- [作成] をクリックします。作成には 10~15 分ほどかかることがあります。
IDS エンドポイントを作成したら、その IDS エンドポイントに Packet Mirroring ポリシーを接続します。
- [エンドポイント] タブを選択します。
- IDS エンドポイントの横にある [接続] をクリックします。
- [ポリシー名] フィールドに、Packet Mirroring ポリシーの名前を入力します。
- [次へ] をクリックします。
- ミラーリングするサブネットまたはインスタンスを選択します。複数のサブネットとインスタンスを選択できます。
- [次へ] をクリックします。
- すべてのトラフィックをミラーリングするか、トラフィックをフィルタするかを決定します。
- すべてのトラフィックをミラーリングするには、[すべてのトラフィックをミラーリングする] が選択されていることを確認します。
- プロトコル、IP アドレス範囲、上り(内向き)トラフィックまたは下り(外向き)トラフィックに基づいてトラフィックをフィルタする場合は、[フィルタ済みトラフィックをミラーリングする] を選択します。
- [すべてのプロトコルを許可] または [特定のプロトコルを許可] を選択します。
- [すべての IP 範囲を許可する] または [特定の IP 範囲を許可する] を選択します。
- [送信] をクリックします。エンドポイントが作成されます。
これで、脅威ログが生成されているかどうかを確認できます。次の手順は省略可能です。
- [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...]
重大度フラグは必須で、次のいずれかの値を指定します。
- INFORMATIONAL
- 低
- 中
- 高
- 重大
エンドポイントを作成したら、そのエンドポイントに Packet Mirroring ポリシーを接続します。まず、次のコマンドを使用して、
endpoint_forwarding_rule
フィールドから URL を取得します。gcloud ids endpoints describe ENDPOINT_NAME
次のコマンドを使用して、Packet Mirroring ポリシーを作成します。
gcloud compute packet-mirrorings create POLICY_NAME \ --region=REGION --collector-ilb=ENDPOINT_FORWARDING_RULE \ --network=VPC_NETWORK --mirrored-subnets=SUBNET
Packet Mirroring には、プロトコル、IP アドレス範囲、上り(内向き)トラフィックまたは下り(外向き)トラフィックに基づいてトラフィックをフィルタできるフラグなど、オプションのフラグがいくつかあります。これらのオプションのフラグについて詳しくは、Packet Mirroring リファレンスをご覧ください。
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 テキスト形式)。 |
name | 文字列 | [出力のみ] エンドポイントの名前(projects/{project_id}/locations/{locationId}/endpoints/{endpointId} 形式)。 |
ネットワーク | 文字列 | IDS エンドポイントに接続されている VPC ネットワークの名前。VPC ネットワーク名自体("src-net" など)またはネットワークへの完全な URL("projects/{project_id}/global/networks/src-net" など)のいずれかを含めることができます。このフィールドは、エンドポイントの作成時に必要です。 |
重要度 | 文字列 | エンドポイントから報告されるアラートの最小重要度レベル。指定できる値は次のとおりです。
このフィールドは、エンドポイントの作成時に必須です。 |
説明 | 文字列 | エンドポイントの説明(省略可)。 |
endpoint_forwarding_rule | 文字列 | [出力のみ] Packet Mirroring がトラフィックを送信する宛先となるエンドポイントのネットワーク アドレスの URL。 |
エンドポイント | 文字列 | [出力のみ] エンドポイントのネットワーク エントリ ポイントの内部 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
省略可: 脅威の例外を構成する
ノイズの多いまたは不要な脅威 ID を無効にするには、Cloud IDS エンドポイントを作成または更新するときに --threat-exceptions
フラグを使用します。次の例では、既存の Cloud IDS エンドポイント ENDPOINT_NAME を更新して、脅威 ID THREAT_ID1 と THREAT_ID2 を除外します。
gcloud ids endpoints update ENDPOINT_NAME
--threat-exceptions=THREAT_ID1,THREAT_ID2