Pub/Sub を Google SecOps と統合する
このドキュメントでは、Pub/Sub を Google Security Operations と統合する方法について説明します。
ユースケース
Pub/Sub 統合は、次のユースケースをサポートしています。
アラートの自動取り込み: Pub/Sub トピックに公開されたセキュリティ ログ、アラート、 テレメトリーを継続的に取得し、 Google SecOps にケースとして取り込みます。
セキュリティ オーケストレーションの一元化: クラウド システムとサードパーティ システムから Pub/Sub を経由するセキュリティ イベントのルーティングを統合して、自動対応ハンドブックをトリガーします。
始める前に
Google SecOps で Pub/Sub 統合を構成する前に、次の前提条件の手順を完了します。
次のいずれかの認証方法を選択して構成します。
オプション 1: Workload Identity(推奨): この 方法では、サービス アカウントの権限借用を使用して有効期間の短いトークンを使用します。
オプション 2: サービス アカウントの JSON キー: この方法は、 静的な有効期間の長いシークレット キーファイルに依存します。
サービス アカウントを作成する
コンソール Google Cloud で、 [IAM と管理] >[サービス アカウント]に移動します。
[addサービス アカウントを作成] をクリックします。
名前と説明を入力して、[完了] をクリックします。サービス アカウントのメールアドレス をメモします。
IAM ロールを付与する
権限を付与すると、統合でサブスクリプションからメッセージを表示して pull できるようになります。標準ロールを割り当てるには、次の手順を行います。
コンソール Google Cloud で [**IAM**] に移動します。
サービス アカウントを見つけて、[**プリンシパルの編集**] (edit)をクリックします。
[別のロールを追加] をクリックして、[Pub/Sub 閲覧者](
roles/pubsub.viewer)を選択します。[保存] をクリックします。
Workload Identity 認証情報を構成する
Workload Identity は、サービス アカウントの権限借用を使用して有効期間の短いアクセス トークンを使用するため、推奨される方法です。
一意のインスタンス ID を特定する
接続を確立するには、Google SecOps インスタンスにサービス アカウントの権限を借用する権限を付与する必要があります。
Google SecOps で、 [コンテンツ ハブ] > [レスポンス統合] に移動します。
[Pub/Sub] 統合を選択し、[Workload Identity メール] にサービス アカウントのメールアドレスを入力します。
[Save > Test] をクリックします。テストは失敗するはずです。
close_small をクリックし、 [**テスト**] ボタンの横にある ID メールを見つけます。このメールは
gke-init-python@...またはsoar-python@...で始まります。この一意のメールアドレスをコピーします。
でインスタンス ID を承認する Google Cloud
コンソールで Google Cloud 、 [IAM と管理] >[サービス アカウント]に移動します。
ターゲット サービス アカウントを選択し、 [権限 > アクセス権を付与] に移動します。
一意のメールアドレスを [新しいプリンシパル] に貼り付け、サービス アカウント トークン作成者 ロール(
roles/iam.serviceAccountTokenCreator)を割り当てます。
割り当てプロジェクトへのアクセス権を付与する
Workload Identity で認証するには、API の使用量と請求額を追跡するための Quota Project ID が必要です。
Google Cloud コンソールで、割り当てプロジェクトとして使用するプロジェクトの [IAM] に移動します。
サービス アカウントを見つけて、[**プリンシパルの編集**] (edit) をクリックします。
[別のロールを追加] をクリックし、[Service Usage コンシューマー](
roles/serviceusage.serviceUsageConsumer)を選択します。[保存] をクリックします。
JSON キーを構成する
静的な有効期間の長いシークレット キーファイルは、手動でローテーションする必要があります。この方法は、Workload Identity 認証を使用できない場合にのみ使用してください。
コンソールで、 Google Cloud [IAM と管理] >[サービス アカウント] に移動し、サービス アカウントを選択します。
[キー] タブに移動し、[キーを追加 > 新しいキーを作成] をクリックします。
[JSON] を選択して [作成] をクリックします。ブラウザによって JSON ファイルがパソコンにダウンロードされます。
統合のパラメータ
Pub/Sub 統合には、次のパラメータが必要です。
| パラメータ | 説明 |
|---|---|
Workload Identity Email |
省略可。 サービス アカウントのクライアント メールアドレス。 このパラメータは、Workload
Identity を使用して認証する場合にのみ構成します。構成する場合は、
|
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 |
必須 プロダクト名が 保存されるフィールドの名前。 デフォルト値は |
Event Field Name |
必須 イベント名 (サブタイプ)を特定するために使用されるフィールド名。 デフォルト値は |
Environment Field Name |
省略可
環境名が保存されるフィールドの名前。 環境フィールドが見つからない場合、環境はデフォルトの環境に設定されます。 デフォルト値は |
Environment Regex Pattern |
省略可
必要な元の
正規表現パターンが null か空の場合、または環境 値が null の場合、最終的な環境の結果はデフォルト環境になります。 |
PythonProcessTimeout |
必須 現在のスクリプトを実行している Python プロセス のタイムアウト上限(秒単位)。 デフォルト値は |
Service Account JSON File Content |
省略可 サービス アカウント キーの JSON ファイルの内容。 このパラメータまたは このパラメータを構成するには、サービス アカウントの作成時にダウンロードしたサービス アカウント キーの JSON ファイルの内容全体を指定します。 Pub/Sub - メッセージ コネクタ の場合、サービス アカウント キーの JSON ファイルを使用した認証は、Workload Identity 連携よりも 優先されます。 |
Workload Identity Email |
省略可 サービス アカウントのクライアント メールアドレス。 このパラメータまたは Workload Identity 連携でサービス アカウントの権限を借用するには、サービス アカウントに |
Project ID |
省略可 コネクタで使用するプロジェクト ID。 |
Quota Project ID |
省略可 API と請求に使用する Google Cloud プロジェクト ID
Google Cloud 。このパラメータを使用するには、サービス アカウントに 統合により、このパラメータ値がすべての API リクエストに付加されます。 |
Subscription ID |
必須 Pub/Sub サブスクリプション ID。 |
Case Name Template |
省略可 カスタム ケース名。 このパラメータを構成すると、コネクタは プレースホルダは次の形式で指定できます:
例: プレースホルダの場合、コネクタは最初の Google SecOps イベントを使用します。コネクタは、 文字列値を含むキーのみを処理します。このパラメータを構成するには、接頭辞なしでイベント フィールドを指定します。 |
Alert Name Template |
必須 カスタム アラート名。 プレースホルダは次の形式で指定できます:
例: プレースホルダの場合、コネクタは最初の Google SecOps イベントを使用します。コネクタは、
文字列値を含むキーのみを処理します。値を指定しない場合、または無効なテンプレートを使用した場合、コネクタは以下の形式でフォールバック値を使用します: |
Rule Generator Template |
必須 カスタム ルール ジェネレータ。 プレースホルダは次の形式で指定できます:
例: プレースホルダの場合、コネクタは最初の Google SecOps イベントを使用します。コネクタは、
文字列値を含むキーのみを処理します。値を指定しない場合、または無効なテンプレートを使用した場合、コネクタは次の形式でフォールバック値を使用します: |
Timestamp Field |
必須 Google SecOps アラートのタイムスタンプを定義するフィールドの名前。 タイムスタンプが Unix エポック時刻形式を使用していない場合は、 デフォルト値は
|
Timestamp Format |
省略可 メッセージのタイムスタンプ形式。 コネクタ は、メッセージを正しく処理するためにタイムスタンプを必要とします。タイムスタンプ が Unix エポック時刻形式を使用しておらず、タイムスタンプ 形式を構成していない場合、コネクタは失敗します。 デフォルト値は
|
Severity Mapping JSON |
必須 コネクタがメッセージから重大度レベルを抽出する方法を定義する JSON オブジェクト。 デフォルト値は 次のとおりです。 { "Default": "60" } 重大度マッピングの詳細については、 JSON の重大度マッピングをご覧ください。 |
Unique ID Field |
省略可 メッセージが一意であることを確認するフィールドの名前。
予約語 |
Max Messages To Fetch |
必須 コネクタのイテレーションごとに処理するメッセージの最大数。 デフォルト値は |
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 のプロフェッショナルから回答を得ることができます。