Pub/Sub を Google SecOps と統合する

このドキュメントでは、Pub/Sub を Google Security Operations と統合する方法について説明します。

ユースケース

Pub/Sub 統合は、次のユースケースをサポートしています。

  • アラートの自動取り込み: Pub/Sub トピックに公開されたセキュリティ ログ、アラート、 テレメトリーを継続的に取得し、 Google SecOps にケースとして取り込みます。

  • セキュリティ オーケストレーションの一元化: クラウド システムとサードパーティ システムから Pub/Sub を経由するセキュリティ イベントのルーティングを統合して、自動対応ハンドブックをトリガーします。

始める前に

Google SecOps で Pub/Sub 統合を構成する前に、次の前提条件の手順を完了します。

  1. サービス アカウントを作成します。

  2. サービス アカウントに必要な Identity and Access Management ロールを付与します 。

  3. 次のいずれかの認証方法を選択して構成します。

    • オプション 1: Workload Identity(推奨): この 方法では、サービス アカウントの権限借用を使用して有効期間の短いトークンを使用します。

    • オプション 2: サービス アカウントの JSON キー: この方法は、 静的な有効期間の長いシークレット キーファイルに依存します。

サービス アカウントを作成する

  1. コンソール Google Cloud で、 [IAM と管理] >[サービス アカウント]に移動します。

    [サービス アカウント] に移動

  2. [addサービス アカウントを作成] をクリックします。

  3. 名前と説明を入力して、[完了] をクリックします。サービス アカウントのメールアドレス をメモします。

IAM ロールを付与する

権限を付与すると、統合でサブスクリプションからメッセージを表示して pull できるようになります。標準ロールを割り当てるには、次の手順を行います。

  1. コンソール Google Cloud で [**IAM**] に移動します。

    IAM に移動

  2. サービス アカウントを見つけて、[**プリンシパルの編集**] (edit)をクリックします。

  3. [別のロールを追加] をクリックして、[Pub/Sub 閲覧者](roles/pubsub.viewer)を選択します。

  4. [保存] をクリックします。

Workload Identity 認証情報を構成する

Workload Identity は、サービス アカウントの権限借用を使用して有効期間の短いアクセス トークンを使用するため、推奨される方法です。

一意のインスタンス ID を特定する

接続を確立するには、Google SecOps インスタンスにサービス アカウントの権限を借用する権限を付与する必要があります。

  1. Google SecOps で、 [コンテンツ ハブ] > [レスポンス統合] に移動します。

  2. [Pub/Sub] 統合を選択し、[Workload Identity メール] にサービス アカウントのメールアドレスを入力します。

  3. [Save > Test] をクリックします。テストは失敗するはずです。

  4. close_small をクリックし、 [**テスト**] ボタンの横にある ID メールを見つけます。このメールは gke-init-python@... または soar-python@... で始まります。

  5. この一意のメールアドレスをコピーします。

でインスタンス ID を承認する Google Cloud

  1. コンソールで Google Cloud 、 [IAM と管理] >[サービス アカウント]に移動します。

    [サービス アカウント] に移動

  2. ターゲット サービス アカウントを選択し、 [権限 > アクセス権を付与] に移動します。

  3. 一意のメールアドレスを [新しいプリンシパル] に貼り付け、サービス アカウント トークン作成者 ロール(roles/iam.serviceAccountTokenCreator)を割り当てます。

割り当てプロジェクトへのアクセス権を付与する

Workload Identity で認証するには、API の使用量と請求額を追跡するための Quota Project ID が必要です。

  1. Google Cloud コンソールで、割り当てプロジェクトとして使用するプロジェクトの [IAM] に移動します。

    IAM に移動

  2. サービス アカウントを見つけて、[**プリンシパルの編集**] (edit) をクリックします。

  3. [別のロールを追加] をクリックし、[Service Usage コンシューマー](roles/serviceusage.serviceUsageConsumer)を選択します。

  4. [保存] をクリックします。

JSON キーを構成する

静的な有効期間の長いシークレット キーファイルは、手動でローテーションする必要があります。この方法は、Workload Identity 認証を使用できない場合にのみ使用してください。

  1. コンソールで、 Google Cloud [IAM と管理] >[サービス アカウント] に移動し、サービス アカウントを選択します。

    [サービス アカウント] に移動

  2. [キー] タブに移動し、[キーを追加 > 新しいキーを作成] をクリックします。

  3. [JSON] を選択して [作成] をクリックします。ブラウザによって JSON ファイルがパソコンにダウンロードされます。

統合のパラメータ

Pub/Sub 統合には、次のパラメータが必要です。

パラメータ 説明
Workload Identity Email

省略可。

サービス アカウントのクライアント メールアドレス。

このパラメータは、Workload Identity を使用して認証する場合にのみ構成します。構成する場合は、 Quota Project ID も指定する必要があります。Service Account JSON File Content は無視されます。

Service Account JSON File Content

省略可。

サービス アカウント キーの JSON ファイルの内容全体。

サービス アカウント キー認証用にこのパラメータを構成します。

Quota Project ID

省略可。

API の使用量と請求額に使用するプロジェクト ID。

このパラメータは、Workload Identity 認証を使用する場合に必要です。

値が指定されていない場合、統合はサービス アカウントの認証情報から ID を取得します。

Project ID

省略可。

Pub/Sub でターゲットとするプロジェクト ID。

値が指定されていない場合、統合はサービス アカウントの認証情報から ID を取得します。

Verify SSL

必須。

サーバーへの接続用の SSL 証明書を検証します。デフォルトで有効になっています。

Google SecOps で統合を構成する手順については、統合を構成する をご覧ください。

必要に応じて、後で変更を加えることができます。統合インスタンスを構成したら、ハンドブックで使用できます。複数のインスタンスの構成とサポートの詳細については、複数のインスタンスのサポートをご覧ください。

操作

操作の詳細については、 デスクから保留中のアクションに対応するおよび手動による対策を実行するをご覧ください。

Ping

Ping アクションを使用して、Pub/Sub への接続をテストします。

このアクションは、Google SecOps エンティティでは実行されません。

アクションへの入力

なし

アクションの出力

Ping アクションでは、次の出力が提供されます。

アクションの出力タイプ 対象
ケースウォールのアタッチメント 利用不可
ケースウォールのリンク 利用不可
ケースウォール テーブル 利用不可
拡充テーブル 利用不可
JSON の結果 利用不可
出力メッセージ 利用可能
スクリプトの結果 利用可能
出力メッセージ

Ping アクションは、次の出力メッセージを返すことができます。

出力メッセージ メッセージの説明
Successfully connected to the Pub/Sub server with the provided connection parameters! アクションが成功しました。
Failed to connect to the Pub/Sub server! Error is ERROR_REASON

アクションが失敗しました。

サーバーへの接続、 入力パラメータ、または認証情報を確認してください。

スクリプトの結果

次の表に、Ping アクションを使用した場合のスクリプト結果出力の値を示します。

スクリプトの結果名 値
is_success True または False

コネクタ

Google SecOps でコネクタを構成する方法の詳細については、データを取り込む (コネクタ)をご覧ください。

Pub/Sub - メッセージ コネクタ

Google SecOps プラットフォームでは、Pub/Sub - メッセージ コネクタ は PubSub - メッセージ コネクタと呼ばれます。

Pub/Sub - メッセージ コネクタ を使用して、Pub/Sub からメッセージを取得します。

JSON の重大度マッピング

アラートの重大度をマッピングするには、Pub/Sub - メッセージ コネクタ が Severity Mapping JSON パラメータの重大度の値を取得するために使用するフィールドを指定する必要があります。コネクタのレスポンスには、integer、float、string などの値の型を含めることができます。

Pub/Sub - メッセージ コネクタ は、integer 値と float 値を読み取り、Google SecOps の設定に従ってマッピングします。次の表に、Google SecOps での integer 値から重大度へのマッピングを示します。

整数値 マッピングされた重大度
100 Critical
80~100 High
60~80 Medium
40~60 Low
40 未満 Informational

レスポンスに string 値が含まれている場合、Pub/Sub - メッセージ コネクタ には追加の構成が必要です。

最初は、デフォルト値は次のように表示されます。

{
    "Default": 60
}

マッピングに必要な値が event_severity JSON キーにある場合、値は次のようになります。

  • "Malicious"
  • "Benign"
  • "Unknown"

event_severity JSON キー値を解析し、JSON オブジェクトの形式が正しいことを確認するには、Severity Mapping JSON パラメータを次のように構成します。

{
    "event_severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

"Default" 値は必須です。

同じ JSON オブジェクトに複数の一致がある場合、Pub/Sub - メッセージ コネクタ は最初の JSON オブジェクト キーを優先します。

integer 値または float 値を含むフィールドを操作するには、Severity Mapping JSON パラメータでキーと空の文字列を構成します。

{
  "Default":"60",
  "integer_field": "",
  "float_field": ""
}

コネクタの入力

Pub/Sub - メッセージ コネクタ には、次のパラメータが必要です。

パラメータ 説明
Product Field Name 必須

プロダクト名が 保存されるフィールドの名前。

デフォルト値は Product Name です。

Event Field Name 必須

イベント名 (サブタイプ)を特定するために使用されるフィールド名。

デフォルト値は event_type です。

Environment Field Name 省略可

環境名が保存されるフィールドの名前。

環境フィールドが見つからない場合、環境はデフォルトの環境に設定されます。

デフォルト値は "" です。

Environment Regex Pattern 省略可

Environment Field Name フィールドで見つかった値に対して実行する正規表現パターン。このパラメータを使用すると、 正規表現ロジックを使用して環境フィールドを操作できます。

必要な元の Environment Field Name値を取得するには、デフォルト値.*を使用します。

正規表現パターンが null か空の場合、または環境 値が null の場合、最終的な環境の結果はデフォルト環境になります。

PythonProcessTimeout 必須

現在のスクリプトを実行している Python プロセス のタイムアウト上限(秒単位)。

デフォルト値は 60 です。

Service Account JSON File Content 省略可

サービス アカウント キーの JSON ファイルの内容。

このパラメータまたは Workload Identity Email パラメータを構成できます。

このパラメータを構成するには、サービス アカウントの作成時にダウンロードしたサービス アカウント キーの JSON ファイルの内容全体を指定します。

Pub/Sub - メッセージ コネクタ の場合、サービス アカウント キーの JSON ファイルを使用した認証は、Workload Identity 連携よりも 優先されます。

Workload Identity Email 省略可

サービス アカウントのクライアント メールアドレス。

このパラメータまたは Service Account JSON File Content パラメータを構成できます。

Workload Identity 連携でサービス アカウントの権限を借用するには、サービス アカウントに Service Account Token Creator ロールを付与します。

Project ID 省略可

コネクタで使用するプロジェクト ID。

Quota Project ID 省略可

API と請求に使用する Google Cloud プロジェクト ID Google Cloud 。このパラメータを使用するには、サービス アカウントに Service Usage Consumer ロールを付与する必要があります。IAM ロールの詳細については、IAM を使用したアクセス制御をご覧ください。

統合により、このパラメータ値がすべての API リクエストに付加されます。

Subscription ID 必須

Pub/Sub サブスクリプション ID。

Case Name Template 省略可

カスタム ケース名。

このパラメータを構成すると、コネクタは custom_case_name という新しいキーを Google SecOps イベントに追加します。

プレースホルダは次の形式で指定できます: [name of the field].

例: Phishing - [event_mailbox]

プレースホルダの場合、コネクタは最初の Google SecOps イベントを使用します。コネクタは、 文字列値を含むキーのみを処理します。このパラメータを構成するには、接頭辞なしでイベント フィールドを指定します。

Alert Name Template 必須

カスタム アラート名。

プレースホルダは次の形式で指定できます: [name of the field].

例: Phishing - [event_mailbox]。

プレースホルダの場合、コネクタは最初の Google SecOps イベントを使用します。コネクタは、 文字列値を含むキーのみを処理します。値を指定しない場合、または無効なテンプレートを使用した場合、コネクタは以下の形式でフォールバック値を使用します: CONNECTOR_NAME - Alert. このパラメータを構成するには、接頭辞なしでイベント フィールドを指定します。

Rule Generator Template 必須

カスタム ルール ジェネレータ。

プレースホルダは次の形式で指定できます: [name of the field].

例: Phishing - [event_mailbox]。

プレースホルダの場合、コネクタは最初の Google SecOps イベントを使用します。コネクタは、 文字列値を含むキーのみを処理します。値を指定しない場合、または無効なテンプレートを使用した場合、コネクタは次の形式でフォールバック値を使用します: CONNECTOR_NAME - Rule Generator。このパラメータを構成するには、接頭辞なしでイベント フィールドを指定します。

Timestamp Field 必須

Google SecOps アラートのタイムスタンプを定義するフィールドの名前。

タイムスタンプが Unix エポック時刻形式を使用していない場合は、Timestamp Format パラメータでタイムスタンプ形式を定義します。

デフォルト値は message_publishTime です。

Timestamp Format 省略可

メッセージのタイムスタンプ形式。

コネクタ は、メッセージを正しく処理するためにタイムスタンプを必要とします。タイムスタンプ が Unix エポック時刻形式を使用しておらず、タイムスタンプ 形式を構成していない場合、コネクタは失敗します。

デフォルト値は %Y-%m-%dT%H:%M:%S.%fZ です。

Severity Mapping JSON 必須

コネクタがメッセージから重大度レベルを抽出する方法を定義する JSON オブジェクト。

デフォルト値は 次のとおりです。

    {
      "Default": "60"
    }
    

重大度マッピングの詳細については、 JSON の重大度マッピングをご覧ください。

Unique ID Field 省略可

メッセージが一意であることを確認するフィールドの名前。 予約語 pubsub_message_id を 使用して、ネイティブの Pub/Sub メッセージ ID を抽出できます。値を設定しない場合、またはフィールド が見つからない場合、コネクタは SHA-256 ハッシュを生成し、メッセージの識別子として使用します。

Max Messages To Fetch 必須

コネクタのイテレーションごとに処理するメッセージの最大数。

デフォルト値は 100 です。

Disable Overflow 省略可

選択すると、コネクタはアラートの作成時に Google SecOps のオーバーフロー メカニズムを無視します。

デフォルトで選択されます。

Verify SSL 必須

選択すると、統合によって Pub/Sub への接続用の SSL 証明書が有効かどうかが検証されます。

デフォルトで選択されます 。

Proxy Server Address 省略可

使用するプロキシ サーバーのアドレス。

Proxy Username 省略可

認証に使用するプロキシのユーザー名。

Proxy Password 省略可

認証に使用するプロキシ パスワード。

コネクタルール

Pub/Sub - メッセージ コネクタ はプロキシをサポートしています。

コネクタ イベント

次の例は、Pub/Sub - メッセージ コネクタ が生成する Google SecOps イベントの JSON 出力を示しています。

{
   "notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
   "finding": {
       "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
       "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
       "resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
       "state": "ACTIVE",
       "category": "OPEN_NETBIOS_PORT",
       "externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
       "sourceProperties": {
           "Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
           "ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
           "Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
           "ScannerName": "FIREWALL_SCANNER",
           "ResourcePath": [
               "projects/PROJECT_ID/",
               "folders/FOLDER_ID/",
               "folders/FOLDER_ID/",
               "organizations/ORGANIZATION_ID/"
           ],
           "ExposedService": "NetBIOS",
           "OpenPorts": {
               "TCP": [
                   137.0,
                   138.0,
                   139.0
               ],
               "UDP": [
                   137.0,
                   138.0,
                   139.0
               ]
           },
           "compliance_standards": {
               "iso": [
                   {
                       "ids": [
                           "A.13.1.1"
                       ]
                   }
               ],
               "pci": [
                   {
                       "ids": [
                           "1.2.1"
                       ]
                   }
               ],
               "nist": [
                   {
                       "ids": [
                           "SC-7"
                       ]
                   }
               ]
           },
           "ReactivationCount": 4.0
       },
       "securityMarks": {
           "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
           "marks": {
               "peter": "e2e1"
           }
       },
       "eventTime": "2024-08-30T14:44:37.973090Z",
       "createTime": "2024-06-24T07:08:54.777Z",
       "propertyDataTypes": {
           "ResourcePath": {
               "listValues": {
                   "propertyDataTypes": [
                       {
                           "primitiveDataType": "STRING"
                       }
                   ]
               }
           },
           "ReactivationCount": {
               "primitiveDataType": "NUMBER"
           },
           "Explanation": {
               "primitiveDataType": "STRING"
           },
           "ExposedService": {
               "primitiveDataType": "STRING"
           },
           "ScannerName": {
               "primitiveDataType": "STRING"
           }
       }
   }
}

さらにサポートが必要な場合コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。