Cloud IDS を構成する

アプリケーションの 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/8172.16.0.0/12192.168.0.0/16)にする必要があります。そうしないと、エンドポイントの作成が失敗します。

プライベート サービス アクセスを設定する手順は次のとおりです。

  1. 次のコマンドを使用して Service Networking API を有効にします。ここで、PROJECT_ID は実際のプロジェクト ID に置き換えます。

    gcloud services enable servicenetworking.googleapis.com \
     --project=PROJECT_ID
    
  2. ネットワークでまだ 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 など)。

  3. サービス プロデューサーへのプライベート接続を作成します。プライベート接続は、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 サービス プロファイルを割り当てます。

コンソール

  1. Google Cloud コンソールで、[IDS エンドポイント] に移動します。

    IDS エンドポイントに移動

エンドポイントを構成します。

  1. [エンドポイントの作成] をクリックします。
  2. [エンドポイント名] フィールドに名前を入力します。
  3. 省略可: [説明] フィールドに説明を入力します。
  4. [ネットワーク] プルダウン リストをクリックして、Cloud IDS で検査するネットワークを選択します。
  5. ネットワークまたはサブネットのリージョンとゾーンを、[リージョン] プルダウン リストと [ゾーン] プルダウン リストから選択します。
  6. [続行] をクリックします。

Cloud IDS サービス プロファイルを選択します。

  1. [IDS サービス プロファイルの選択] をクリックします。
  2. [最小脅威の重大度レベル] で、正しいアラートレベルを選択します。
  3. [作成] をクリックします。作成には 10~15 分ほどかかることがあります。

IDS エンドポイントを作成したら、その IDS エンドポイントに Packet Mirroring ポリシーを接続します。

  1. [エンドポイント] タブを選択します。
  2. IDS エンドポイントの横にある [接続] をクリックします。
  3. [ポリシー名] フィールドに、Packet Mirroring ポリシーの名前を入力します。
  4. [Next] をクリックします。
  5. ミラーリングするサブネットまたはインスタンスを選択します。複数のサブネットとインスタンスを選択できます。
  6. [Next] をクリックします。
  7. すべてのトラフィックをミラーリングするか、トラフィックをフィルタするかを決定します。
    1. すべてのトラフィックをミラーリングするには、[すべてのトラフィックをミラーリングする] が選択されていることを確認します。
    2. プロトコル、IP アドレス範囲、または上り(内向き)トラフィックまたは下り(外向き)トラフィックに基づいてトラフィックをフィルタする場合は、[フィルタ済みトラフィックをミラーリングする] を選択します。
      1. [すべてのプロトコルを許可する] または [特定のプロトコルを許可する] をオンにします。
      2. [すべての IP 範囲を許可する] または [特定の IP 範囲を許可する] を選択します。
  8. [送信] をクリックします。エンドポイントが作成されます。

これで、脅威ログが生成されているかどうかを確認できます。次の手順は省略可能です。

  1. [IDS 脅威] タブをクリックします。
  2. 脅威名をクリックすると、その脅威の [脅威の詳細] ページが表示されます。
  3. [脅威] タブに戻ります。
  4. IDS エンドポイントの右側にある [メニュー] をクリックし、[脅威ログを表示] を選択します。

gcloud

オプション フラグ

このセクションのコマンドには、次のオプション フラグの一部またはすべてが含まれている場合があります。

--no-async
オペレーションをすぐに完了するのではなく、完了するまで待機します。
--filter=EXPRESSION
表示される各リソース アイテムにブール値フィルタ EXPRESSION を適用します。式が True と評価された場合、そのアイテムがリストされます。フィルタ式の詳細と例を表示するには、$ gcloud topic filters を実行します。このフラグは、--flatten--sort-by--filter--limit の順序で適用される他のフラグと連携します。
--limit=LIMIT
一覧表示するリソースの最大数。デフォルトは無制限です。 このフラグは、--flatten--sort-by--filter--limit の順序で適用される他のフラグと連携します。
--page-size=PAGE_SIZE
Cloud IDS によって、リソースリストがグループ化されてページに出力されます。このフラグは、ページあたりのリソースの最大数を指定します。デフォルトは、ページングをサポートしているサービスによって決まります。それ以外の場合は無制限です(ページングはありません)。ページングは、サービスに応じて、--filter--limit の前または後に適用できます。
--sort-by=[FIELD,…]
並べ替えるリソース フィールド キー名のカンマ区切りのリスト。デフォルトの順序は昇順です。フィールドを降順で並べ替えるには、フィールドの先頭に「~」を付けます。このフラグは、--flatten--sort-by--filter--limit の順序で適用される他のフラグと連携します。
--uri
デフォルトの出力ではなく、リソース URI のリストを出力します。
--threat-exceptions
このエンドポイントのアラートから除外する脅威 ID のカンマ区切りのリスト。エンドポイントあたり 99 個の例外に制限されています。

指示

新しい IDS エンドポイントを作成するには、次の手順を行います。

  1. gcloud ids endpoints create コマンドを使用します。ENDPOINT_NAMEVPC_NETWORKZONESEVERITY を、アプリケーションに一致する情報に置き換えます。

    gcloud ids endpoints create ENDPOINT_NAME \
      --network=VPC_NETWORK \
      --zone=ZONE \
      --severity=SEVERITY \
     [--no-async] \
     [GCLOUD_WIDE_FLAG...]
    
  2. 重大度フラグは必須で、次のいずれかの値を取ります。

    • INFORMATIONAL
    • MEDIUM
    • 重大
  3. エンドポイントを作成したら、そのエンドポイントに Packet Mirroring ポリシーを接続します。まず、次のコマンドを使用して、endpoint_forwarding_rule フィールドから URL を取得します。

    gcloud ids endpoints describe ENDPOINT_NAME
    
  4. 次のコマンドを使用して Packet Mirroring ポリシーを作成します。

    gcloud compute packet-mirrorings create POLICY_NAME \
    --region=REGION --collector-ilb=ENDPOINT_FORWARDING_RULE \
    --network=VPC_NETWORK --mirrored-subnets=SUBNET
    
  5. Packet Mirroring には、プロトコル、IP アドレス範囲、上り(内向き)トラフィックまたは下り(外向き)トラフィックに基づいてトラフィックをフィルタできるフラグなど、オプションのフラグがいくつかあります。これらのオプションのフラグについて詳しくは、Packet Mirroring リファレンスをご覧ください。

IDS エンドポイントを削除するには、gcloud ids endpoints delete コマンドを使用します。ENDPOINT_NAMEPROJECT_IDZONE は、アプリケーションに一致する情報に置き換えます。

gcloud ids endpoints delete ENDPOINT_NAME \
   [--project=PROJECT_ID] \
   [--zone=ZONE] \
   [--no-async] \
   [GCLOUD_WIDE_FLAG...]

IDS エンドポイントを記述するには、gcloud ids endpoints describe コマンドを使用します。ENDPOINT_NAMEPROJECT_IDZONE は、アプリケーションに一致する情報に置き換えます。

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" など)のいずれかを含めることができます。このフィールドは、エンドポイントの作成時に必要です。
重要度 文字列

エンドポイントから報告されるアラートの最小重要度レベル。指定できる値は次のとおりです。

  • INFORMATIONAL
  • MEDIUM
  • 重大

エンドポイントを作成する場合、このフィールドは必須です。

説明 文字列 エンドポイントの説明(省略可)。
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_ID1THREAT_ID2 を除外します。

   gcloud ids endpoints update ENDPOINT_NAME 
--threat-exceptions=THREAT_ID1,THREAT_ID2

次のステップ