Pub/Sub を Google SecOps と統合する

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

統合バージョン: 1.0

始める前に

Pub/Sub 統合を使用するには、次のものが必要です。

  • Google Cloud サービス アカウント - 既存のサービス アカウントを使用するか、新しいサービス アカウントを作成できます。

    サービス アカウントの作成については、サービス アカウントを作成するをご覧ください。

    サービス アカウントを使用して Google Cloudに対する認証を行う場合は、JSON でサービス アカウント キーを作成し、統合パラメータを構成するときに、ダウンロードした JSON ファイルのコンテンツを指定できます。

    注: セキュリティ上の理由から、サービス アカウント キーではなく、ワークロード ID のメールアドレスを使用することをおすすめします。ワークロード ID の詳細については、ワークロードの ID をご覧ください。

  • プリンシパルの IAM ロールを構成します。

    Pub/Sub は、アクセス制御に Identity and Access Management(IAM)を使用します。プリンシパルに Pub/Sub Viewer ロールを付与する必要があります。

統合のパラメータ

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

パラメータ 説明
Workload Identity Email Optional

Workload Identity 連携のクライアント メールアドレス。

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

Workload Identity 連携を使用してサービス アカウントの権限を借用するには、サービス アカウントに Service Account Token Creator ロールを付与します。ワークロード ID とその操作方法の詳細については、ワークロードの ID をご覧ください。

Service Account JSON File Content Optional

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

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

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

認証方法としてサービス アカウントを使用する方法については、サービス アカウントの概要をご覧ください。

Quota Project ID Optional

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

統合は、このパラメータ値をすべての API リクエストに付加します。

このパラメータの値を設定しない場合、統合は Google Cloud サービス アカウントから割り当てプロジェクト ID を取得します。

Project ID Optional

統合で使用するプロジェクト ID。

このパラメータの値を設定しない場合、統合は Google Cloud サービス アカウントからプロジェクト ID を取得します。

Verify SSL 必須

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

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

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

必要に応じて、後の段階で変更できます。統合インスタンスを構成すると、ハンドブックで使用できるようになります。複数のインスタンスの構成とサポートの詳細については、複数のインスタンスのサポートをご覧ください。

操作

アクションの詳細については、Your Workdesk から保留中のアクションに対応する手動アクションを実行するをご覧ください。

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 パラメータの重大度の値を取得するために使用するフィールドを指定する必要があります。コネクタ レスポンスには、integerfloatstring などの値の型を含めることができます。

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

整数値 マッピングされた重大度
100 Critical
80100 High
6080 Medium
4060 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 の場合、最終的な環境の結果はデフォルト環境になります。

Script Timeout (Seconds) 必須

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

デフォルト値は 300 seconds です。

Service Account JSON File Content Optional

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

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

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

Pub/Sub - メッセージ コネクタの場合、サービス アカウント キーの 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

メッセージが一意であることを確認するフィールドの名前。

値を設定しない場合、コネクタは SHA-256 ハッシュを生成し、メッセージの識別子として使用します。

Max Messages To Fetch Optional

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

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