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. サービス アカウントを見つけて、[プリンシパルを編集](編集)をクリックします。

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

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

Workload Identity 認証情報を構成する

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

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

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

  1. Google SecOps で、[Content Hub] > [Response Integrations] に移動します。

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

  3. [保存] > [テスト] をクリックします。テストは失敗することが想定されます。

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

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

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

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

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

  2. 対象のサービス アカウントを選択し、[権限] > [アクセスを許可] に移動します。

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

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

Workload Identity を使用して認証するには、API の使用状況と課金を追跡するために Quota Project ID が必要です。

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

    IAM に移動

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

  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 – Messages コネクタ

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

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

JSON の重大度マッピング

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

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

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

レスポンスに string 値が含まれている場合、Pub/Sub – Messages Connector に追加の構成が必要です。

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

{
    "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 – Messages Connector は最初の 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 Optional

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

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

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

Pub/Sub – Messages Connector の場合、サービス アカウント キーの JSON ファイルを使用した認証は、Workload Identity 連携よりも優先されます。

Workload Identity Email Optional

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

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

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

Project ID Optional

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

Quota Project ID Optional

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

このパラメータ値は、すべての API リクエストに添付されます。

Subscription ID 必須

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

Case Name Template Optional

カスタムケース名。

このパラメータを構成すると、コネクタは 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 Optional

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

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

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

Severity Mapping JSON 必須

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

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

    {
      "Default": "60"
    }
    

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

Unique ID Field Optional

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

Max Messages To Fetch 必須

コネクタの反復処理ごとに処理するメッセージの最大数。

デフォルト値は 100 です。

Disable Overflow Optional

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

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

Verify SSL 必須

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

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

Proxy Server Address Optional

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

Proxy Username Optional

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

Proxy Password Optional

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

コネクタルール

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 のプロフェッショナルから回答を得ることができます。