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)ネットワークのネットワーク ピアリングを設定する必要があります。この設定は、Google Cloud コンソールまたは Google Cloud CLI を使用して、お客様のプロジェクトごとに 1 回だけ行います。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. [Minimum threat severity level] で、適切なアラートレベルを選択します。
  3. [作成] をクリックします。作成には 10~15 分ほどかかることがあります。

IDS エンドポイントを作成したら、その IDS エンドポイントにパケット ミラーリング ポリシーを接続します。

  1. [エンドポイント] タブを選択します。
  2. IDS エンドポイントの横にある [接続] をクリックします。
  3. [ポリシー名] フィールドに、パケット ミラーリング ポリシーの名前を入力します。
  4. [次へ] をクリックします。
  5. ミラーリングするサブネットまたはインスタンスを選択します。複数のサブネットとインスタンスを選択できます。
  6. [次へ] をクリックします。
  7. すべてのトラフィックをミラーリングするか、トラフィックをフィルタリングするかを決めます。
    1. すべてのトラフィックをミラーリングするには、[すべてのトラフィックをミラーリングする] が選択されていることを確認します。
    2. プロトコル、IP アドレス範囲、上り(内向き)トラフィックまたは下り(外向き)トラフィックに基づいてトラフィックをフィルタする場合は、[フィルタ済みトラフィックをミラーリングする] を選択します。
      1. [すべてのプロトコルを許可] または [特定のプロトコルを許可する] を選択します。
      2. [Allow all IP ranges] または [Allow specific IP ranges] を選択します。
  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 によってグループ化されてページに出力されます。このフラグを使用すれば、1 ページあたりの最大リソース数を指定できます。デフォルトは、ページングをサポートしているサービスによって決まりますが、それ以外の場合は無制限です(ページングはありません)。ページングは、サービスに応じて、--filter--limit の前または後に適用できます。
--sort-by=[FIELD,…]
は、並べ替えるリソース フィールド キー名のカンマ区切りのリストで置き換えます。デフォルトの順序は昇順です。フィールドを降順で並べ替えるには、フィールドの先頭に「~」を付けます。このフラグは、--flatten--sort-by--filter--limit の順序で適用される他のフラグと連携します。
--uri
デフォルトの出力ではなく、リソース URI のリストを出力します。
--threat-exceptions
エンドポイントのアラートから除外する脅威 ID のカンマ区切りのリストです。例外は IDS エンドポイントあたり 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. 重大度のフラグは必須です。次のいずれかの値を指定します。

    • 情報
    • MEDIUM
    • 重大
  3. エンドポイントを作成したら、その IDS エンドポイントにパケット ミラーリング ポリシーを接続します。まず、次のコマンドを使用して endpoint_forwarding_rule フィールドから URL を取得します。

    gcloud ids endpoints describe ENDPOINT_NAME
    
  4. 次のコマンドを使用して、パケット ミラーリング ポリシーを作成します。

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

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 テキスト形式)。
名前 文字列 [出力のみ] エンドポイントの名前(projects/{project_id}/locations/{locationId}/endpoints/{endpointId} 形式)。
network 文字列 IDS エンドポイントに接続されている VPC ネットワークの名前。VPC ネットワーク名自体("src-net" など)またはネットワークへの完全な URL("projects/{project_id}/global/networks/src-net" など)のいずれかを含めることができます。このフィールドは、エンドポイントの作成時に必須です。
severity 文字列

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

  • 情報
  • MEDIUM
  • 重大

このフィールドは、エンドポイントの作成時に必須です。

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_ID1THREAT_ID2 を除外します。

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

次のステップ