收集 Cisco Identity Intelligence 記錄
本文說明如何設定 Cisco Identity Intelligence,使用 Webhook 將記錄推送至 Google Security Operations。
Cisco Identity Intelligence (前身為 Oort Security) 是一種身分威脅偵測與回應平台,可持續監控身分提供者之間的使用者行為、驗證模式、裝置使用情況和存取權。這項功能會分析使用者活動、失敗的安全檢查、信任分數和高風險行為,偵測身分相關威脅、設定錯誤和違規行為。
事前準備
請確認您符合下列必要條件:
- Google SecOps 執行個體
- Cisco Identity Intelligence 租戶的特殊存取權
- 管理 Cisco Identity Intelligence 整合項目的管理權限
- 存取 Google Cloud 控制台 (用於建立 API 金鑰)
在 Google SecOps 中建立 Webhook 動態饋給
建立動態饋給
- 依序前往 「SIEM 設定」 > 「動態饋給」。
- 按一下「新增動態饋給」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如
Cisco Identity Intelligence Events)。 - 選取「Webhook」做為「來源類型」。
- 選取「Cisco Identity Intelligence」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- 分割分隔符號 (選用):輸入
\n即可分割多行事件。 - 資產命名空間:資產命名空間
- 擷取標籤:要套用至這個動態饋給事件的標籤
- 分割分隔符號 (選用):輸入
- 點選「下一步」。
- 在「Finalize」(完成) 畫面中檢查新的新聞動態消息設定,然後按一下「Submit」(提交)。
產生並儲存密鑰
建立動態饋給後,您必須產生用於驗證的密鑰:
- 在動態饋給詳細資料頁面中,按一下「產生密鑰」。
- 對話方塊會顯示密鑰。
- 複製並妥善儲存密鑰。
取得動態饋給端點網址
- 前往動態消息的「詳細資料」分頁。
- 在「Endpoint Information」部分,複製「Feed endpoint URL」。
網址格式如下:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import其中
{region}是 Google SecOps 執行個體的區域 (例如us、europe或asia-southeast1),{parent}是資源路徑,格式為projects/<PROJECT_ID>/locations/<LOCATION>/instances/<INSTANCE_ID>/logTypes/<LOG_TYPE>。請儲存這個網址,以利進行後續步驟。
按一下「完成」。
建立 Google Cloud API 金鑰
Chronicle 需要 API 金鑰才能進行驗證。在 Google Cloud 控制台中建立受限制的 API 金鑰。
建立 API 金鑰
- 前往 Google Cloud 控制台憑證頁面。
- 選取專案 (與 Chronicle 執行個體相關聯的專案)。
- 依序點選「建立憑證」 > 「API 金鑰」。
- 系統會建立 API 金鑰,並在對話方塊中顯示。
- 按一下「編輯 API 金鑰」即可限制金鑰。
限制 API 金鑰
- 在「API 金鑰」設定頁面中:
- 名稱:輸入描述性名稱 (例如
Chronicle Webhook API Key)
- 名稱:輸入描述性名稱 (例如
- 在「API 限制」下方:
- 選取「Restrict key」(限制金鑰)。
- 在「選取 API」下拉式選單中,搜尋並選取「Google SecOps API」 (或「Chronicle API」)。
- 按一下 [儲存]。
- 從頁面頂端的「API 金鑰」欄位複製 API 金鑰值。
- 安全儲存 API 金鑰。
設定 Cisco Identity Intelligence Webhook
建構 Webhook 網址
合併 Chronicle 端點網址和 API 金鑰:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>範例:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...
更改下列內容:
<ENDPOINT_URL>:先前複製的 Chronicle 動態饋給端點網址<API_KEY>:先前建立的 Google Cloud API 金鑰<SECRET_KEY>:先前產生的 Chronicle Webhook 密鑰
在 Cisco Identity Intelligence 中建立 Webhook 通知目標
- 登入 Cisco Identity Intelligence。
- 前往「Integrations」。
- 按一下「Add Integration」。
- 向下捲動至「Webhook」部分。
- 按一下「Add Webhook Target」(新增 Webhook 目標)。
- 提供下列設定詳細資料:
- 名稱:輸入描述性名稱 (例如
Chronicle SIEM Integration)。 - Webhook 網址:貼上完整的端點網址,並附上上述 API 金鑰和密鑰。
- Authorization Type:選取「API 金鑰」。
- API 金鑰名稱:輸入金鑰名稱 (例如
x-goog-chronicle-auth)。 - API Key Value:輸入 Google Cloud API 金鑰。
- 名稱:輸入描述性名稱 (例如
- 展開「Invocation HTTP Parameters」(叫用 HTTP 參數) 專區。
- 新增下列參數,類型為「Header」:
- 鍵:
Content-Type,值:application/json - 鍵:
Accept,值:application/json
- 鍵:
- 在「Use this target for」(將這個目標用於) 區段中,選取「Failed Check」(檢查失敗),即可在身分檢查偵測到失敗結果時收到通知。
按一下 [儲存]。
測試 Webhook 連線
- 在「Integrations」(整合) 頁面中,找到您建立的 Webhook 通知目標。
- 按一下資料列右側的三點圖示選單。
- 選取「測試連線能力」。
- 確認測試訊息已成功傳送。
啟用身分檢查的 Webhook
建立 Webhook 通知目標後,您必須為要監控的特定身分檢查啟用該目標。
- 在 Cisco Identity Intelligence 中,前往所需檢查的詳細資料頁面。
- 展開頁面右上角的下拉式選單。
- 選取您建立的 Webhook 通知目標核取方塊。
針對要傳送至 Google SecOps 的每項檢查,重複執行上述步驟。
詳情請參閱 Cisco Identity Intelligence Webhook 說明文件。
驗證方式參考資料
Chronicle Webhook 動態饋給支援多種驗證方式。選擇供應商支援的方法。
方法 1:自訂標頭 (建議)
如果供應商支援自訂 HTTP 標頭,請使用這個方法,以提升安全性。
要求格式:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
優點:
- 網址中不會顯示 API 金鑰和密鑰
- 更安全 (標頭不會記錄在網路伺服器存取記錄中)
- 如果供應商支援此方式,則為首選方式
方法 2:查詢參數
如果廠商不支援自訂標頭,請將憑證附加至網址。
網址格式:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>範例:
https://{region}-chronicle.googleapis.com/v1/{parent}/logs:import?key=AIzaSyD...&secret=abcd1234...要求格式:
POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1 Content-Type: application/json { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
缺點:
- 網址中顯示憑證
- 可能會記錄在網路伺服器存取記錄中
- 安全性不如標頭
方法 3:混合 (網址 + 標頭)
部分設定會在網址中使用 API 金鑰,並在標頭中使用 Secret 金鑰。
要求格式:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
驗證標頭名稱
Chronicle 接受下列驗證標頭名稱:
API 金鑰:
x-goog-chronicle-auth(建議)X-Goog-Chronicle-Auth(不區分大小寫)
密鑰:
x-chronicle-auth(建議)X-Chronicle-Auth(不區分大小寫)
Webhook 限制和最佳做法
要求限制
| 限制 | 值 |
|---|---|
| 要求大小上限 | 4 MB |
| QPS (每秒查詢次數) 上限 | 15,000 |
| 要求逾時 | 30 秒 |
| 重試行為 | 自動,採用指數輪詢 |
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| 帳戶 | account_label.value | 直接複製值 |
| 帳戶 | account_label.key | 設為「account」 |
| account_label | security_result.detection_fields | 已合併至 detection_fields |
| additional_detaildescription.key | additional_detaildescription.key | 設為「詳細說明」 |
| detaildescription | additional_detaildescription.value.list_value.values | 從詳細說明合併 |
| additional_detaildescription | event.idm.read_only_udm.additional.fields | 已併入 additional.fields |
| additional_recommendedaction.key | additional_recommendedaction.key | 設為「建議動作」 |
| recommendedAction | additional_recommendedaction.value.list_value.values | 從 recommendedAction 合併 |
| additional_recommendedaction | event.idm.read_only_udm.additional.fields | 已合併至 additional.fields |
| data1 | usersFailing_label | 直接複製值 |
| data.login | login_label | 直接複製值 |
| 詳細資料類型 | security_result.summary | 直接複製值 |
| detail.id | security_result.rule_id | 直接複製值 |
| detail.title | security_result.rule_name | 直接複製值 |
| detail.severity | security_result.severity | 如果 detail.severity 的值為 [CRITICAL,ERROR,HIGH,INFORMATIONAL,LOW,MEDIUM],則為該值;如果為中等,則為 MEDIUM |
| detaildescription | value_array.string_value | 直接複製值 |
| detailsdata.key | add_label.value、add_label.key | 如果不是 failedSigninDetails 或 ips,則值來自 detailsdata.value,索引鍵為「loginDetails %{index} details %{detailindex} %{detailsdata.key}」 |
| detailsdata.value | add_label.value、add_label.key | |
| detailsdata.key | security_result.detection_fields | 如果符合條件,則合併 add_label |
| detailsdata.value | security_result.detection_fields | |
| field_.value | security_result.detection_fields | 合併 json_array 中各種巢狀欄位 (msg、ipInfo、asn、coordinates、first_event、second_event、locations),並使用「%{index} %{detailindex} %{index1} %{key}」等鍵,但不包括 ipAddress、ip 等。 |
| field_.key | security_result.detection_fields | |
| id | metadata.product_log_id | 直接複製值 |
| login_label | principal.user.email_addresses | 如果與電子郵件規則運算式相符,則會合併 |
| msg.ipAddress | principal.ip | 非空白時合併 |
| msg.first_event.ip_address | principal.ip | 非空白時合併 |
| msg.second_event.ip_address | principal.ip | 如果不是空白,則合併 |
| msg_travels_first_event_ip_address | principal.ip | 非空白時合併 |
| msg_travels_second_event_ip_address | principal.ip | |
| recommendedAction | value_array.string_value | 直接複製值 |
| security_result | event.idm.read_only_udm.security_result | 已合併至 security_result |
| 來源 | source_label.value | 直接複製值 |
| 來源 | source_label.key | 設為「來源」 |
| source_label | event.idm.read_only_udm.src.labels | 已併入 src.labels |
| 時間 | @timestamp | 使用日期篩選器剖析,格式為 ISO8601、RFC 3339、yyyy-MM-ddTHH:mm:ss.SSSSSSZ |
| usersFailing_label | principal.user.email_addresses | 與電子郵件規則運算式相符時合併 |
| 版本 | metadata.product_version | 直接複製值 |
| has_principal | event.idm.read_only_udm.metadata.event_type | 如果 has_principal 為 true,則設為「STATUS_UPDATE」;如果 has_user 為 true,則設為「USER_UNCATEGORIZED」;否則設為「GENERIC_EVENT」 |
| has_user | event.idm.read_only_udm.metadata.event_type | |
| metadata.product_name | metadata.product_name | 設為「OORT」 |
| metadata.vendor_name | metadata.vendor_name | 設為「OORT」 |
detail.published |
event.idm.read_only_udm.metadata.collected_timestamp |
從變更記錄對應 |
detail.login |
event.idm.read_only_udm.principal.user.userid |
從變更記錄對應 |
detail.userTrustLevel |
event.idm.read_only_udm.principal.user.attribute.labels |
從變更記錄對應 |
detail.login |
event.idm.read_only_udm.principal.user.user_display_name |
從變更記錄對應 |
detail.checkTopics |
event.idm.read_only_udm.security_result.category_details |
從變更記錄對應 |
region |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
detail.checkId |
event.idm.read_only_udm.security_result.detection_fields |
從變更記錄對應 |
detail.checkScope |
event.idm.read_only_udm.security_result.detection_fields |
從變更記錄對應 |
detail.frameworks |
event.idm.read_only_udm.security_result.detection_fields |
從變更記錄對應 |
detail.explainabilityEventIds |
event.idm.read_only_udm.security_result.detection_fields |
從變更記錄對應 |
data.value |
event.idm.read_only_udm.security_result.detection_fields |
從變更記錄對應 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。