將 Logging 與 Google SecOps 整合
本文說明如何將 Cloud Logging 與 Google Security Operations 整合。
用途
Logging 整合功能會使用 Google SecOps 功能,支援下列用途:
鑑識記錄擷取:執行進階查詢,在調查期間找出 Google Cloud 環境中的特定安全性事件。
自動威脅搜尋:使用應對手冊定期查詢記錄,找出已知的入侵指標 (IoC) 或可疑模式。
事前準備
在 Google SecOps 中設定記錄整合之前,請先完成下列必要步驟:
建立服務帳戶並授予必要角色。
選擇並設定下列其中一種驗證方式:
方法 1:Workload Identity (建議做法):這個方法會透過服務帳戶模擬功能,使用短期臨時存取權杖,因此您不必儲存密鑰。
方法 2:服務帳戶 JSON 金鑰:這個方法仰賴靜態、長期有效的密鑰檔案。只有在環境不支援 Workload Identity 驗證時,才應使用這個方法。
建立服務帳戶
如要為整合作業建立服務帳戶,請完成下列步驟:
在 Google Cloud 控制台,依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
按一下「add」「Create service account」(建立服務帳戶)。
提供名稱 (例如「SecOps Logging Integration」) 和說明,然後按一下「Create and continue」(建立並繼續)。
在「Grant this service account access to project」(將專案存取權授予這個服務帳戶) 步驟中,新增「記錄檢視器」(記錄檢視者) (
roles/logging.viewer) 角色。點按「Done」(完成)。設定時會用到這個服務帳戶的電子郵件地址。
設定 Workload Identity 憑證
請選擇這個方法或 JSON 金鑰方法,驗證整合。建議使用 Workload Identity,因為這種方法
使用服務帳戶模擬的短期臨時存取權杖。
找出專屬執行個體身分
最後,請授予 Google SecOps 執行個體權限,允許其模擬服務帳戶,確保安全存取。
在 Google SecOps 中,依序前往 「Content Hub」 >「Response Integrations」。
搜尋並選取「Cloud Logging」整合,然後在「Workload Identity Email」(Workload Identity 電子郵件) 中輸入服務帳戶電子郵件。
在「Quota Project ID」(配額專案 ID) 中輸入有效的專案 ID。
依序點選「儲存」 > 「測試」。測試預計會失敗。
按一下「Test」(測試) 右側的 close_small,然後在錯誤訊息中搜尋以
gke-init-python@...或soar-python@...開頭的身分電子郵件。複製這個專屬電子郵件地址。
在 Google Cloud中授權執行個體身分
授權擷取的專屬身分,即可啟用服務帳戶模擬功能,讓平台代表您執行操作,不需使用靜態金鑰。
在 Google Cloud 控制台,依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
選取目標服務帳戶,然後依序前往 「Permissions」(權限) >「Grant Access」(授予存取權)。
將不重複的電子郵件地址貼到「New principals」(新增主體) 欄位,並指派「Service Account Token Creator」(服務帳戶權杖建立者) 角色 (
roles/iam.serviceAccountTokenCreator)。
授予配額專案存取權
使用 Workload Identity 驗證時,必須提供 Quota Project ID,才能追蹤 API 使用情形和帳單。
在 Google Cloud 控制台,依序前往 「IAM & Admin」(IAM 與管理) >「IAM」,然後選取 用於配額專案 ID 的專案。
找出服務帳戶,然後按一下「Edit principal」(編輯主體)。
按一下「Add another role」(新增其他角色),然後選取「Service Usage Consumer」(服務使用情形消費者) (
roles/serviceusage.serviceUsageConsumer)。按一下 [儲存]。
設定 JSON 金鑰
靜態、長期有效的密鑰檔案需要手動管理。只有在無法使用 Workload Identity 憑證時,才應使用這個方法。
在 Google Cloud 控制台中,依序前往 「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶),然後選取 服務帳戶。
前往「金鑰」分頁,依序點選「新增金鑰」 > 「建立新的金鑰」。
選取「JSON」做為金鑰類型,然後按一下「建立」。
複製下載檔案的完整內容,並在設定期間貼到
User's Service Account。
整合參數
Logging 整合需要下列參數:
| 參數 | 說明 |
|---|---|
API Root |
選填。 Cloud Logging API 的基準網址 (例如 |
User's Service Account |
選填。 服務帳戶金鑰 JSON 檔案的完整內容。 只有在使用 JSON 金鑰進行驗證時,才需要使用這個參數。 |
Workload Identity Email |
選填。 服務帳戶的用戶端電子郵件地址。 只有在使用 Workload Identity 憑證進行驗證時,才需要使用這個參數。 |
Project ID |
選填。 要在整合作業中使用的專案 ID。 如未提供任何值,整合作業會從服務帳戶憑證擷取 ID。 |
Quota Project ID |
選填。 用於 API 使用和計費的專案 ID。 使用 Workload Identity 憑證進行驗證時,必須提供這個參數。 |
Organization ID |
選填。 用於限定查詢範圍的組織 ID。 |
Verify SSL |
選填。 如果選取,整合項目會在連線至 Logging 伺服器時驗證 SSL 憑證。 (預設為啟用)。 |
如要瞭解如何在 Google SecOps 中設定整合功能,請參閱「設定整合功能」。
如有需要,您可以在後續階段進行變更。設定整合執行個體後,即可在應對手冊中使用。如要進一步瞭解如何設定及支援多個執行個體,請參閱「支援多個執行個體」。
動作
如要進一步瞭解動作,請參閱「 在工作區回應待處理動作」和「在案件中執行手動動作」。
執行查詢
使用「Execute Query」(執行查詢) 動作,在 Logging 中執行自訂查詢。
這項動作不會在 Google SecOps 實體上執行。
動作輸入內容
「Execute Query」(執行查詢) 動作需要下列參數:
| 參數 | 說明 |
|---|---|
Project ID |
選用 要在整合作業中使用的專案 ID。 如未設定這個參數的值,整合功能會從 Google Cloud 服務帳戶擷取專案 ID。 |
Organization ID |
選用 要在整合中使用的組織 ID。 如未設定這個參數的值,整合功能會從 Google Cloud 服務帳戶擷取專案 ID。 |
Query |
必要 用於尋找記錄的查詢。 |
Time Frame |
選用 要擷取結果的時間範圍。 如果選取 可能的值如下:
Last Hour。 |
Start Time |
選用 要擷取結果的開始時間。 如果您為 如要設定這項參數,請使用 ISO 8601 格式。 |
End Time |
選用 擷取結果的結束時間。 如果您未設定這個參數的值,並為 如要設定這項參數,請使用 ISO 8601 格式。 |
Max Results To Return |
選用 要傳回的結果數上限。 預設值為 50。 |
動作輸出內容
「Execute Query」(執行查詢) 動作會提供下列輸出內容:
| 動作輸出類型 | 可用性 |
|---|---|
| 案件總覽附件 | 無法使用 |
| 案件總覽連結 | 無法使用 |
| 案件總覽表格 | 無法使用 |
| 補充資訊表格 | 無法使用 |
| JSON 結果 | 可用 |
| 輸出訊息 | 可用 |
| 指令碼執行結果 | 可用 |
JSON 結果
以下範例說明使用「Execute Query」動作時,收到的 JSON 結果輸出內容:
[{
"protoPayload": {
"@type": "type.googleapis.com/google.cloud.audit.AuditLog",
"authenticationInfo": {
"principalEmail": "system:clouddns"
},
"authorizationInfo": [
{
"granted": true,
"permission": "io.k8s.coordination.v1.leases.update",
"resource": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock"
}
],
"methodName": "io.k8s.coordination.v1.leases.update",
"requestMetadata": {
"callerIp": "192.0.2.6",
"callerSuppliedUserAgent": "clouddns-leader-election"
},
"resourceName": "coordination.k8s.io/v1/namespaces/kube-system/leases/clouddns-lock",
"serviceName": "k8s.io",
"status": {
"code": 0
}
},
"insertId": "ID",
"resource": {
"type": "k8s_cluster",
"labels": {
"cluster_name": "CLUSTER_NAME",
"project_id": "PROJECT_ID",
"location": "us-central1"
}
},
"timestamp": "2024-09-18T09:46:38.647428Z",
"labels": {
"authorization.k8s.io/reason": "RBAC: allowed by ClusterRoleBinding \"system:clouddns\" of ClusterRole \"system:clouddns-role\" to User \"system:clouddns\"",
"authorization.k8s.io/decision": "allow"
},
"logName": "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity",
"operation": {
"id": "ID",
"producer": "k8s.io",
"first": true,
"last": true
},
"receiveTimestamp": "2024-09-18T09:46:39.063264993Z"
}]
輸出訊息
「執行查詢」動作會提供下列輸出訊息:
| 輸出訊息 | 訊息說明 |
|---|---|
|
動作成功。 |
Error executing action "Execute Query". Reason:
ERROR_REASON |
動作失敗。 請檢查伺服器連線、輸入參數或憑證。 |
指令碼執行結果
下表說明使用「Execute Query」(執行查詢) 動作時,指令碼結果輸出的值:
| 指令碼結果名稱 | 值 |
|---|---|
is_success |
True或False |
乒乓
使用 Ping 動作測試與 Logging 的連線能力。
這項動作不會在 Google SecOps 實體上執行。
動作輸入內容
無
動作輸出內容
Ping 動作會提供下列輸出內容:
| 動作輸出類型 | 可用性 |
|---|---|
| 案件總覽附件 | 無法使用 |
| 案件總覽連結 | 無法使用 |
| 案件總覽表格 | 無法使用 |
| 補充資訊表格 | 無法使用 |
| JSON 結果 | 無法使用 |
| 輸出訊息 | 可用 |
| 指令碼執行結果 | 可用 |
輸出訊息
Ping 動作會提供下列輸出訊息:
| 輸出訊息 | 訊息說明 |
|---|---|
Successfully connected to the Cloud Logging server with
the provided connection parameters! |
動作成功。 |
Failed to connect to the Cloud Logging server! Error is
ERROR_REASON |
動作失敗。 請檢查伺服器連線、輸入參數或憑證。 |
指令碼執行結果
下表說明使用 Ping 動作時,指令碼結果輸出的值:
| 指令碼結果名稱 | 值 |
|---|---|
is_success |
True或False |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。