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