將 Pub/Sub 與 Google SecOps 整合
本文提供指南,說明如何將 Pub/Sub 與 Google Security Operations (Google SecOps) 整合。
整合版本:1.0
事前準備
如要使用 Pub/Sub 整合服務,您需要:
服務帳戶:您可以使用現有的服務帳戶,也可以建立新的服務帳戶。 Google Cloud
如需建立服務帳戶的指引,請參閱「建立服務帳戶」。
如果您使用服務帳戶向 Google Cloud進行驗證,可以建立 JSON 格式的服務帳戶金鑰,並在設定整合參數時提供下載的 JSON 檔案內容。
注意:基於安全性考量,建議您使用工作負載身分電子郵件地址,而非服務帳戶金鑰。如要進一步瞭解工作負載身分,請參閱「工作負載的身分」。
為主體設定 IAM 角色。
Pub/Sub 使用 Identity and Access Management (IAM) 控管存取權,並要求您授予主體
Pub/Sub Viewer角色。
整合參數
Pub/Sub 整合服務需要下列參數:
| 參數 | 說明 | 
|---|---|
Workload Identity Email | 
    選用 Workload Identity Federation 的用戶端電子郵件地址。 您可以設定這個參數或  如要使用 Workload Identity Federation 模擬服務帳戶,請將   | 
  
Service Account JSON File Content | 
    選用 服務帳戶金鑰 JSON 檔案的內容。 您可以設定這個參數或  如要設定這個參數,請提供您建立服務帳戶時下載的服務帳戶金鑰 JSON 檔案完整內容。 如要進一步瞭解如何使用服務帳戶做為驗證方法,請參閱服務帳戶總覽。  | 
  
Quota Project ID | 
    選用 您用於 Google Cloud API 和帳單的專案 ID。 Google Cloud 如要使用這個參數,您必須將  整合功能會將這個參數值附加至所有 API 要求。 如未設定這個參數的值,整合服務會從 Google Cloud 服務帳戶擷取配額專案 ID。  | 
  
Project ID | 
    選用 要在整合中使用的專案 ID。 如未設定這個參數的值,整合服務會從 Google Cloud 服務帳戶擷取專案 ID。  | 
  
Verify SSL | 
    必要 如果選取這個選項,整合服務會驗證連線至 Pub/Sub 的 SSL 憑證是否有效。 (此為預設選項)。  | 
  
如需在 Google SecOps 中設定整合功能的操作說明,請參閱「設定整合功能」。
如有需要,您之後可以變更。設定整合執行個體後,您就可以在劇本中使用該執行個體。如要進一步瞭解如何設定及支援多個執行個體,請參閱「支援多個執行個體」。
動作
如要進一步瞭解動作,請參閱「回覆『你的工作台』中的待處理動作」和「執行手動動作」。
乒乓
使用 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 - Messages Connector」(Pub/Sub - 訊息連接器) 稱為「PubSub - Messages Connector」(PubSub - 訊息連接器)。
使用 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 - Messages Connector 會優先處理第一個 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 | 
    選填
     要在  使用預設值  如果規則運算式模式為空值或空白,或環境值為空值,最終環境結果就是預設環境。  | 
  
Script Timeout (Seconds) | 
    必要 Python 處理程序執行目前指令碼的逾時限制 (以秒為單位)。 預設值為   | 
  
Service Account JSON File Content | 
    選用 服務帳戶金鑰 JSON 檔案的內容。 您可以設定這個參數或  如要設定這個參數,請提供您建立服務帳戶時下載的服務帳戶金鑰 JSON 檔案完整內容。 對於 Pub/Sub - Messages 連接器,使用服務帳戶金鑰 JSON 檔案進行驗證的優先順序,高於工作負載身分聯盟。  | 
  
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 | 
    選用 用於確認訊息是否不重複的欄位名稱。 如果未設定值,連接器會產生 SHA-256 雜湊,並將其做為訊息的 ID。  | 
  
Max Messages To Fetch | 
    選用 每次連接器疊代要處理的訊息數量上限。 最多 100 個。  | 
  
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 專業人員尋求答案。