將 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 & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
按一下「add」(新增)「Create service account」(建立服務帳戶)。
提供名稱和說明,然後按一下「完成」。記下服務帳戶的電子郵件地址。
授予 IAM 角色
授予權限後,整合服務就能查看及提取訂閱項目中的訊息。如要指派標準角色,請完成下列步驟:
前往 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」close_small,找出開頭為
gke-init-python@...或soar-python@...的身分識別電子郵件。複製這個專屬電子郵件地址。
在 Google Cloud中授權執行個體身分
在 Google Cloud 控制台中,依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
選取目標服務帳戶,然後依序前往「權限」> 授予存取權。
將專屬電子郵件地址貼到「新增主體」,然後指派「服務帳戶憑證建立者」角色 (
roles/iam.serviceAccountTokenCreator)。
授予配額專案存取權
如要使用 Workload Identity 進行驗證,必須提供 Quota Project ID,才能追蹤 API 使用量和帳單。
在 Google Cloud 控制台中,前往做為配額專案的專案的「IAM」。
找出服務帳戶,然後按一下「編輯主體」(「編輯」)。
按一下「Add another role」(新增其他角色),然後選取「Service Usage Consumer」(服務使用情形用戶) (
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 - Messages Connector」稱為「PubSub - Messages Connector」。
使用 Pub/Sub - 訊息連接器從 Pub/Sub 擷取訊息。
JSON 嚴重程度對應
如要對應快訊嚴重程度,您需要指定 Pub/Sub - Messages Connector 用來取得 Severity Mapping JSON 參數嚴重程度值的欄位。連結器回應可以包含值類型,例如 integer、float 和 string。
Pub/Sub - Messages Connector 會讀取 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 - 訊息連接器會優先處理第一個 JSON 物件金鑰。
如要處理含有 integer 或 float 值的欄位,請在 Severity Mapping JSON 參數中設定鍵和空字串:
{
"Default":"60",
"integer_field": "",
"float_field": ""
}
連接器輸入內容
Pub/Sub - Messages 連接器需要下列參數:
| 參數 | 說明 |
|---|---|
Product Field Name |
必要 儲存產品名稱的欄位名稱。 預設值為 |
Event Field Name |
必要 用於判斷事件名稱 (子類型) 的欄位名稱。 預設值為 |
Environment Field Name |
選填
儲存環境名稱的欄位名稱。 如果找不到環境欄位,系統會將環境設為預設環境。 預設值為 |
Environment Regex Pattern |
選填
要在 使用預設值 如果規則運算式模式為空值或空白,或環境值為空值,最終環境結果就是預設環境。 |
PythonProcessTimeout |
必要 執行目前指令碼的 Python 程序逾時限制 (以秒為單位)。 預設值為 |
Service Account JSON File Content |
選用 服務帳戶金鑰 JSON 檔案的內容。 您可以設定這個參數或 如要設定這個參數,請提供您在建立服務帳戶時下載的服務帳戶金鑰 JSON 檔案完整內容。 對於 Pub/Sub - Messages 連接器,使用服務帳戶金鑰 JSON 檔案進行驗證的優先順序,高於 Workload Identity Federation。 |
Workload Identity Email |
選用 服務帳戶的用戶端電子郵件地址。 您可以設定這個參數或 如要使用 Workload Identity Federation 模擬服務帳戶,請將 |
Project ID |
選用 要在連接器中使用的專案 ID。 |
Quota Project ID |
選用 您用於 Google Cloud API 和帳單的專案 ID。 Google Cloud 如要使用這個參數,您必須授予服務帳戶 整合功能會將這個參數值附加至所有 API 要求。 |
Subscription ID |
必要 Pub/Sub 訂閱項目 ID。 |
Case Name Template |
選用 自訂案件名稱。 設定這個參數時,連接器會在 Google SecOps 事件中新增名為 您可以提供下列格式的預留位置:
範例: 如果是預留位置,連接器會使用第一個 Google SecOps 事件。連接器只會處理含有字串值的鍵。如要設定這項參數,請指定不含前置字元的事件欄位。 |
Alert Name Template |
必要 自訂快訊名稱。 您可以提供下列格式的預留位置:
範例: 如果是預留位置,連接器會使用第一個 Google SecOps 事件。連接器只會處理含有字串值的鍵。如果未提供任何值或使用無效範本,連接器會使用下列格式的回退值: |
Rule Generator Template |
必要 自訂規則產生器。 您可以提供下列格式的預留位置:
範例: 如果是預留位置,連接器會使用第一個 Google SecOps 事件。連接器只會處理含有字串值的鍵。如果未提供任何值或使用無效範本,連接器會使用下列格式的回退值: |
Timestamp Field |
必要 用於定義 Google SecOps 快訊時間戳記的欄位名稱。 如果時間戳記未使用 Unix Epoch 時間格式,請在 預設值為 |
Timestamp Format |
選用 訊息時間戳記格式。 連接器需要時間戳記才能正確處理訊息。如果時間戳記未使用 Unix Epoch 時間格式,且您未設定時間戳記格式,連接器就會失敗。 預設值為 |
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 伺服器位址。 |
Proxy Username |
選用 用於驗證的 Proxy 使用者名稱。 |
Proxy Password |
選用 用於驗證的 Proxy 密碼。 |
連接器規則
Pub/Sub - Messages 連接器支援 Proxy。
連接器事件
以下範例顯示 Pub/Sub - Messages Connector 產生的 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 專業人員尋求解答。