收集 Google Cloud 監控快訊活動記錄
本文說明如何使用 Google Cloud Storage V2,將與 Cloud Monitoring 快訊活動相關的 Cloud Logging 記錄檔,擷取至 Google Security Operations。
Cloud Monitoring 提供 Google Cloud 資源的警報功能。記錄式警告政策會在記錄中出現特定訊息時通知您。當記錄項目符合警告政策的條件時,Cloud Monitoring 會開啟事件,並傳送事件通知。透過這項整合功能,您可以將 Cloud Logging 項目匯出至 Google Security Operations,進行安全性分析和關聯性分析。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 已啟用 Cloud Storage API 的Google Cloud 專案
- 建立及管理 GCS 值區的權限
- 管理 Google Cloud Storage 值區 IAM 政策的權限
- 設定 Cloud Logging 接收器的權限
建立 Google Cloud Storage 值區
使用 Google Cloud 控制台
- 前往 Google Cloud Console。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 monitoring-logs-export)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或保留政策 點選「建立」。
使用 gcloud 指令列工具
或者,您也可以使用
gcloud指令建立值區:gcloud storage buckets create gs://monitoring-logs-export \ --location=us-central1 \ --default-storage-class=STANDARD- 取代:
monitoring-logs-export:必要 bucket 名稱 (全域不重複)。us-central1:偏好的區域。
- 取代:
設定 Cloud Logging,將記錄檔匯出至 GCS
記錄項目會以 JSON 檔案的形式儲存在 Cloud Storage 中。您可以匯出與 Cloud Monitoring 快訊活動相關的記錄,例如快訊政策管理稽核記錄。
建立記錄接收器
- 在 Google Cloud 控制台中,依序前往「Logging」(記錄) >「Logs Router」(記錄檔路由器)。
- 按一下「Create Sink」(建立接收器)。
- 請提供下列設定詳細資料:
- 接收器名稱:輸入描述性名稱 (例如
monitoring-alerts-to-gcs)。 - 接收器說明:選填說明。
- 接收器名稱:輸入描述性名稱 (例如
- 點選「下一步」。
- 在「選取接收器服務」部分:
- 接收器服務:選取「Cloud Storage bucket」(Cloud Storage 值區)。
- 選取 Cloud Storage bucket:從清單中選取 bucket (例如
monitoring-logs-export)。
- 點選「下一步」。
在「選擇要納入接收器的記錄」部分中,輸入篩選查詢來選取要匯出的記錄。
Cloud Monitoring 稽核記錄的篩選器範例:
protoPayload.serviceName="monitoring.googleapis.com" logName:"cloudaudit.googleapis.com/activity"記錄警告政策觸發條件的篩選器範例:
如要匯出觸發記錄型快訊政策的基礎記錄,請使用符合這些特定記錄的篩選器。例如:
severity >= ERROR resource.type="gce_instance"
點選「下一步」。
選用:視需要設定排除篩選器。
按一下「Create Sink」(建立接收器)。
將記錄檔資料傳送至 Cloud Storage 值區的新接收器,可能需要數小時才會開始傳送記錄檔項目。系統會以每小時批次作業的形式,將轉送的記錄項目儲存至 Cloud Storage bucket。第一批項目可能需要 2 到 3 個小時才會開始出現。
擷取 Google SecOps 服務帳戶
Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。
在 Google SecOps 中設定資訊提供,擷取 Cloud Monitoring 記錄
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
Google Cloud Monitoring Alerts Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
選取「GCP_MONITORING_ALERTS」做為「記錄類型」。
按一下「取得服務帳戶」。系統會顯示不重複的服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,以便在下一步中使用。
點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URL:輸入 GCS bucket URI:
gs://monitoring-logs-export/- 請將
monitoring-logs-export替換為您的 GCS bucket 名稱。
- 請將
來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
使用 Google Cloud 控制台
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱 (例如
monitoring-logs-export)。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
- 指派角色:選取「Storage 物件檢視者」。
- 按一下 [儲存]。
使用 gcloud 指令列工具
或者,使用
gcloud指令授予權限:gcloud storage buckets add-iam-policy-binding gs://monitoring-logs-export \ --member="serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL" \ --role="roles/storage.objectViewer"- 取代:
monitoring-logs-export:bucket 名稱。SECOPS_SERVICE_ACCOUNT_EMAIL:Google SecOps 服務帳戶電子郵件地址。
- 取代:
使用 gsutil 指令列工具 (舊版)
授予 SecOps 服務帳戶必要權限,以便讀取目的地 bucket 中的物件:
gsutil iam ch serviceAccount:SECOPS_SERVICE_ACCOUNT_EMAIL:objectViewer \ gs://monitoring-logs-export
驗證權限
如要確認權限是否已正確授予,請按照下列步驟操作:
gcloud storage buckets get-iam-policy gs://monitoring-logs-export \ --flatten="bindings[].members" \ --filter="bindings.role:roles/storage.objectViewer"輸出內容應會顯示 Google SecOps 服務帳戶電子郵件地址。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| jsonPayload.type_1 | additional.fields.jsonPayload_type_1 | 直接複製值 |
| jsonPayload.debugInfo | additional.fields.number | 使用 grok 模式從 jsonPayload.debugInfo 擷取 |
| jsonPayload.scheduledTime、receiveTimestamp、timestamp | metadata.event_timestamp | 如果 jsonPayload.scheduledTime 不為空值,則為該值;否則如果 receiveTimestamp 不為空值,則為該值;否則如果 timestamp 不為空值,則為該值,並使用日期比對轉換 |
| event_type | metadata.event_type | 如果 event_type 不為空白,則為該值,否則設為「GENERIC_EVENT」 |
| insertId | metadata.product_log_id | 直接複製值 |
| jsonPayload.targetType | network.application_protocol | 直接複製值 |
| httpRequest.status | network.http.response_code | 已轉換為整數 |
| resource.labels.location | principal.location.name | 直接複製值 |
| jsonPayload.jobName | principal.url | 直接複製值 |
| jsonPayload.status | security_result.action | 如果 jsonPayload.status ==「PERMISSION_DENIED」,則設為「BLOCK」 |
| 嚴重性 | security_result.severity | 如果嚴重程度 =~ (?i)INFO,則設為 INFORMATIONAL;如果嚴重程度 == "LOW",則設為 LOW;如果嚴重程度 == "MEDIUM",則設為 MEDIUM;如果嚴重程度 == "HIGH",則設為 HIGH;如果嚴重程度 == "VERY-HIGH",則設為 CRITICAL |
| jsonPayload.debugInfo | security_result.summary | 使用 grok 模式從 jsonPayload.debugInfo 擷取 |
| logName | src.url | 直接複製值 |
| resource.labels.project_id | target.resource.attribute.labels.project_id | 直接複製值 |
| resource.labels.job_id | target.resource.attribute.labels.resource_labels_job_id | 直接複製值 |
| resource.type | target.resource.resource_subtype | 直接複製值 |
| jsonPayload.url | target.url | 直接複製值 |
| metadata.product_name | 設為「Gcp_monitoring_alerts」 | |
| metadata.vendor_name | 設為「GCP_MONITORING_ALERTS」 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。