收集自訂安全資料分析記錄
本文說明如何使用多種擷取方法,將自訂安全分析資料擷取至 Google Security Operations。本指南適用於沒有預先建構的剖析器或記錄類型的自訂安全性資料來源。
自訂安全資料分析涵蓋專屬安全遙測資料、自訂應用程式記錄、內部安全工具,或來自沒有原生 Google SecOps 整合的來源的任何安全相關資料。您可以將這類資料以非結構化記錄的形式擷取,並視需要使用自訂剖析器進行正規化。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 可匯出 JSON、CSV、SYSLOG 或其他結構化格式記錄的自訂安全性資料來源
- 存取下列其中一項:
- Google Cloud 控制台 (用於建立 API 金鑰和 GCS)
- AWS 控制台 (適用於 S3 或 Firehose)
- Azure 入口網站 (適用於 Azure Blob 儲存體)
- 可傳送 Webhook 要求的 HTTP 用戶端或應用程式
- 在 Google SecOps 中建立及管理動態消息的權限
選擇擷取方法
Google SecOps 支援多種自訂安全資料的擷取方法。請根據資料來源功能選取最合適的方法:
| 擷取方法 | 用途 | 延遲時間 | 設定複雜度 |
|---|---|---|---|
| Webhook | 應用程式的即時推送 | 秒 | 低 |
| Amazon S3 V2 | 批次匯出至 S3 bucket | 分鐘至小時 | 中 |
| Google Cloud Storage V2 | 批次匯出至 GCS bucket | 分鐘至小時 | 中 |
| Azure Blob 儲存體 V2 | 批次匯出至 Azure 儲存體 | 分鐘至小時 | 中 |
| Amazon Data Firehose | 從 AWS 即時串流 | 秒 | 高 |
方法 1:透過 Webhook 擷取 (即時推送)
如果自訂安全應用程式可以將 HTTP POST 要求傳送至外部端點,請使用這個方法。
在 Google SecOps 中建立 Webhook 動態饋給
建立動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
custom-security-analytics-webhook)。 - 選取「Webhook」做為「來源類型」。
- 選取「自訂安全性資料分析」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- 分割分隔符號:選用:輸入分隔符號,分割多行事件。常見值:
\n- 換行符號分隔符 (NDJSON 最常見的分隔符)- 如果每個要求都包含單一活動,請留空
- 資產命名空間:資產命名空間
- 擷取標籤:要套用至這個動態饋給事件的標籤
- 分割分隔符號:選用:輸入分隔符號,分割多行事件。常見值:
- 點選「下一步」。
- 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
產生並儲存密鑰
建立動態饋給後,您必須產生用於驗證的密鑰:
- 在動態饋給詳細資料頁面中,按一下「產生密鑰」。
- 對話方塊會顯示密鑰。
複製並妥善儲存密鑰。
取得動態消息端點網址
- 前往動態消息的「詳細資料」分頁。
- 在「端點資訊」部分,複製「動態消息端點網址」。
網址格式為:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate或
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate請儲存這個網址,以供後續步驟使用。
按一下 [完成]。
建立 Google Cloud API 金鑰
Google SecOps 需要 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 key」(API 金鑰) 欄位複製 API 金鑰值。
安全儲存 API 金鑰。
設定自訂應用程式以傳送資料
設定自訂安全應用程式或指令碼,向 Chronicle Webhook 端點傳送 HTTP POST 要求。
建構 Webhook 網址:
合併 Chronicle 端點網址和 API 金鑰:
<ENDPOINT_URL>?key=<API_KEY>範例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
HTTP 要求格式:
方法:POST
網址:
<ENDPOINT_URL>?key=<API_KEY>標題:
Content-Type: application/json x-chronicle-auth: <SECRET_KEY>內文 (單一事件):
{ "timestamp": "2025-01-15T10:30:00Z", "event_type": "authentication", "user": "john.doe@example.com", "action": "login", "result": "success", "source_ip": "203.0.113.45", "custom_field_1": "value1", "custom_field_2": "value2" }內文 (以換行符號分隔的多個事件):
{"timestamp": "2025-01-15T10:30:00Z", "event_type": "authentication", "action": "login"} {"timestamp": "2025-01-15T10:30:05Z", "event_type": "file_access", "action": "read"} {"timestamp": "2025-01-15T10:30:10Z", "event_type": "authentication", "action": "logout"}
範例:
範例:Python 指令碼:
import requests import json from datetime import datetime # Configuration ENDPOINT_URL = "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate" API_KEY = "your-api-key-here" SECRET_KEY = "your-secret-key-here" # Construct full URL url = f"{ENDPOINT_URL}?key={API_KEY}" # Headers headers = { "Content-Type": "application/json", "x-chronicle-auth": SECRET_KEY } # Sample event event = { "timestamp": datetime.utcnow().isoformat() + "Z", "event_type": "custom_security_event", "severity": "high", "source": "custom_security_tool", "message": "Suspicious activity detected", "user": "admin@example.com", "ip_address": "192.168.1.100" } # Send request response = requests.post(url, headers=headers, data=json.dumps(event)) if response.status_code == 200: print("Event sent successfully") else: print(f"Error: {response.status_code} - {response.text}")範例:cURL 指令:
curl -X POST \ "https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "x-chronicle-auth: YOUR_SECRET_KEY" \ -d '{ "timestamp": "2025-01-15T10:30:00Z", "event_type": "security_alert", "severity": "critical", "source": "custom_tool", "message": "Threat detected" }'
驗證方式參考資料
Google SecOps 網頁掛鉤動態消息支援多種驗證方法。選擇應用程式支援的方法。
方法 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://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?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 金鑰,並在標頭中使用密鑰。
要求格式:
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" }
Webhook 限制和最佳做法
要求限制
| 限制 | 值 |
|---|---|
| 要求大小上限 | 4 MB |
| 每秒查詢次數上限 (QPS) | 15,000 |
| 要求逾時 | 30 秒 |
| 重試行為 | 自動重試 (指數輪詢) |
最佳做法
- 批次處理事件:使用以換行符號分隔的 JSON (NDJSON) 格式,在單一要求中傳送多個事件,減少額外負荷。
- 加入時間戳記:請務必加入 ISO 8601 格式的時間戳記欄位,確保事件排序正確。
- 使用結構化資料:以 JSON 格式傳送資料,方便剖析及擷取欄位。
- 導入重試邏輯:以指數輪詢方式處理暫時性失敗。
- 監控回應代碼:記錄並針對非 200 的回應發出快訊。
選項 2:Amazon S3 V2 擷取 (批次匯出)
如果自訂安全應用程式可將記錄匯出至 Amazon S3 值區,請使用這個方法。
建立 Amazon S3 儲存貯體
- 開啟 Amazon S3 控制台。
- 按一下「建立值區」。
- 請提供下列設定詳細資料:
- Bucket Name:輸入 bucket 的名稱 (例如
custom-security-analytics-logs)。 - 「Region」(區域):選取偏好的 AWS 區域 (例如
us-east-1)。
- Bucket Name:輸入 bucket 的名稱 (例如
- 點選「建立」。
建立具有 S3 存取權的 IAM 使用者
- 開啟 IAM console。
- 依序點選「使用者」>「新增使用者」。
- 輸入使用者名稱 (例如
chronicle-s3-reader)。 - 選取「程式輔助存取」。
- 點選 [Next: Permissions] (下一步:權限)。
- 選擇「Attach existing policies directly」。
- 搜尋並選取「AmazonS3FullAccess」AmazonS3FullAccess。
- 按一下「下一步:代碼」。
- 按一下 [下一步:檢閱]。
- 按一下「建立使用者」。
- 按一下「Download .csv file」(下載 .csv 檔案),儲存「Access Key ID」(存取金鑰 ID) 和「Secret Access Key」(存取密鑰)。
- 按一下 [關閉]。
設定應用程式,將資料匯出至 S3
設定自訂安全防護應用程式,將記錄檔寫入 S3 值區。應用程式應符合下列條件:
- 以結構化格式 (JSON、CSV 或純文字) 撰寫記錄。
- 使用一致的檔案命名慣例。
- 選用:依日期整理檔案 (例如
logs/2025/01/15/events.json)。 寫入完整檔案 (避免部分寫入)。
檔案結構範例:
s3://custom-security-analytics-logs/ ├── security-events/ │ ├── 2025/01/15/ │ │ ├── events-10-00.json │ │ ├── events-11-00.json │ │ └── events-12-00.json記錄檔格式範例 (NDJSON):
{"timestamp": "2025-01-15T10:00:00Z", "event_type": "login", "user": "alice@example.com", "result": "success"} {"timestamp": "2025-01-15T10:05:00Z", "event_type": "file_access", "user": "bob@example.com", "file": "/data/sensitive.txt"} {"timestamp": "2025-01-15T10:10:00Z", "event_type": "logout", "user": "alice@example.com"}
設定 S3 的 Google SecOps 資訊提供
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
custom-security-analytics-s3)。 - 選取「Amazon S3 V2」做為「來源類型」。
- 選取「自訂安全性資料分析」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
S3 URI:bucket URI,格式為
s3://custom-security-analytics-logs/security-events/來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
- 刪除已轉移的檔案和空白目錄:成功轉移檔案後,刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。
存取金鑰 ID:輸入 IAM 使用者的存取金鑰。
私密存取金鑰:輸入 IAM 使用者的私密金鑰。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
選項 3:Google Cloud Storage V2 擷取 (批次匯出)
如果自訂安全應用程式可以將記錄匯出至 Google Cloud Storage bucket,請使用這個方法。
建立 GCS bucket
- 前往 Google Cloud Console。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 custom-security-analytics-logs)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或保留政策 點選「建立」。
設定應用程式,將資料匯出至 GCS
請使用下列任一方法,設定自訂安全應用程式將記錄檔寫入 GCS 值區:
- Google Cloud SDK:使用
gsutil或用戶端程式庫 - 服務帳戶:建立具備「Storage 物件建立者」角色的服務帳戶
已簽署的網址:產生已簽署的網址,取得暫時寫入權
使用 gsutil 的範例:
gsutil cp /path/to/logs/events.json gs://custom-security-analytics-logs/security-events/使用 Python 用戶端程式庫的範例:
from google.cloud import storage import json # Initialize client client = storage.Client() bucket = client.bucket('custom-security-analytics-logs') # Upload log file blob = bucket.blob('security-events/2025/01/15/events.json') # Write NDJSON data events = [ {"timestamp": "2025-01-15T10:00:00Z", "event_type": "login"}, {"timestamp": "2025-01-15T10:05:00Z", "event_type": "logout"} ] ndjson_data = '\n'.join([json.dumps(event) for event in events]) + '\n' blob.upload_from_string(ndjson_data, content_type='application/x-ndjson')
取得 Google SecOps 服務帳戶
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
custom-security-analytics-gcs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「自訂安全性資料分析」做為「記錄類型」。
- 按一下「取得服務帳戶」。
系統會顯示不重複的服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,以便在下一步中使用。
授予 IAM 權限
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱。
- 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
- 指派角色:選取「Storage 物件檢視者」。
按一下 [儲存]。
為 GCS 設定 Google SecOps 資訊提供
- 從動態消息建立頁面繼續操作 (或依序前往「SIEM 設定」>「動態消息」>「新增動態消息」)。
- 點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:
gs://custom-security-analytics-logs/security-events/來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
- 刪除已轉移的檔案和空白目錄:成功轉移檔案後,刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
選項 4:Azure Blob 儲存體 V2 擷取 (批次匯出)
如果自訂安全應用程式可以將記錄檔匯出至 Azure Blob 儲存體,請使用這個方法。
建立 Azure 儲存體帳戶
- 在 Azure 入口網站中,搜尋「儲存體帳戶」。
- 點選「+ 建立」。
請提供下列設定詳細資料:
設定 值 訂閱項目 選取 Azure 訂閱項目 資源群組 選取現有項目或建立新項目 儲存體帳戶名稱 輸入不重複的名稱 (例如 customsecuritylogs)區域 選取區域 (例如 East US)效能 標準 (建議) 備援功能 GRS (異地備援儲存空間) 或 LRS (本機備援儲存空間) 按一下「Review + create」。
查看帳戶總覽,然後按一下「建立」。
等待部署作業完成。
取得儲存空間帳戶憑證
- 前往您剛建立的「儲存空間帳戶」。
- 在左側導覽中,選取「Security + networking」(安全性 + 網路) 下方的「Access keys」(存取金鑰)。
- 按一下「顯示金鑰」。
- 複製並儲存下列項目,以供日後使用:
- 儲存體帳戶名稱:
customsecuritylogs - 金鑰 1 或金鑰 2:共用存取金鑰
- 儲存體帳戶名稱:
建立 Blob 容器
- 在同一個儲存空間帳戶中,選取左側導覽列的「容器」。
- 按一下「+ 容器」。
- 請提供下列設定詳細資料:
- 名稱:輸入容器名稱 (例如
security-events) - 公開存取層級:選取「私人 (不允許匿名存取)」
- 名稱:輸入容器名稱 (例如
- 點選「建立」。
設定應用程式,將資料匯出至 Azure Blob
請使用下列其中一種方法,將自訂安全應用程式設定為將記錄檔寫入 Azure Blob 容器:
- Azure CLI:使用
az storage blob upload - Azure SDK:使用程式設計語言適用的用戶端程式庫
- AzCopy:使用 AzCopy 指令列工具
示例:
使用 Azure CLI 的範例:
az storage blob upload \ --account-name customsecuritylogs \ --container-name security-events \ --name logs/2025/01/15/events.json \ --file /path/to/events.json \ --account-key <YOUR_ACCESS_KEY>使用 Python SDK 的範例:
from azure.storage.blob import BlobServiceClient import json # Initialize client connection_string = "DefaultEndpointsProtocol=https;AccountName=customsecuritylogs;AccountKey=<YOUR_KEY>;EndpointSuffix=core.windows.net" blob_service_client = BlobServiceClient.from_connection_string(connection_string) # Get container client container_client = blob_service_client.get_container_client("security-events") # Upload log file blob_client = container_client.get_blob_client("logs/2025/01/15/events.json") # Write NDJSON data events = [ {"timestamp": "2025-01-15T10:00:00Z", "event_type": "login"}, {"timestamp": "2025-01-15T10:05:00Z", "event_type": "logout"} ] ndjson_data = '\n'.join([json.dumps(event) for event in events]) + '\n' blob_client.upload_blob(ndjson_data, overwrite=True)
設定 Azure Blob 的 Google SecOps 資訊提供
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在下一個頁面中,按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
custom-security-analytics-azure)。 - 選取「Microsoft Azure Blob Storage V2」做為「來源類型」。
- 選取「自訂安全性資料分析」做為「記錄類型」。
- 點選「下一步」。
指定下列輸入參數的值:
Azure URI:輸入 Blob 服務端點網址和容器路徑:
https://customsecuritylogs.blob.core.windows.net/security-events/來源刪除選項:根據偏好設定選取刪除選項:
- 永不:轉移後一律不刪除任何檔案。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
- 刪除已轉移的檔案和空白目錄:成功轉移檔案後,刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)。
共用金鑰:輸入儲存空間帳戶的共用金鑰值 (存取金鑰)。
資產命名空間:資產命名空間。
擷取標籤:要套用至這個動態饋給事件的標籤。
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
選項 5:Amazon Data Firehose 擷取 (即時串流)
如果自訂安全應用程式會將記錄寫入 Amazon CloudWatch Logs,且您需要將記錄即時串流至 Google SecOps,請使用這個方法。
建立 Google SecOps Firehose 動態饋給
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
custom-security-analytics-firehose)。 - 選取「Amazon Data Firehose」做為「來源類型」。
- 選取「自訂安全性資料分析」做為「記錄類型」。
- 點選「下一步」。
- 指定下列輸入參數的值:
- 分割分隔符號:選填:輸入
\n,即可分割以換行符號分隔的記錄。 - 資產命名空間:資產命名空間。
- 擷取標籤:要套用至這個動態饋給事件的標籤。
- 分割分隔符號:選填:輸入
- 點選「下一步」。
- 檢查動態饋給設定,然後按一下「提交」。
- 按一下「產生密鑰」,產生驗證這個動態饋給的密鑰。
- 複製並儲存密鑰,因為您無法再次查看這組密鑰。
- 前往「詳細資料」分頁。
- 從「端點資訊」欄位複製動態消息端點網址。
- 按一下 [完成]。
建立 Google Cloud API 金鑰
- 前往 Google Cloud 控制台的「憑證」頁面:https://console.cloud.google.com/apis/credentials
- 按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)。
- 按一下「編輯 API 金鑰」即可限制金鑰。
- 在「API 限制」下方,選取「限制金鑰」。
- 搜尋並選取「Google SecOps API」。
- 按一下 [儲存]。
- 複製並儲存 API 金鑰。
建構端點網址
以以下格式將 API 金鑰附加至動態饋給端點網址:
<FEED_ENDPOINT_URL>?key=<API_KEY>範例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...請儲存這個完整網址,以供下一個步驟使用。
為 Firehose 建立 IAM 政策
- 在 AWS 控制台中,依序前往「IAM」>「Policies」>「Create policy」>「JSON」分頁標籤。
貼上下列政策 JSON:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/CustomSecurityToChronicle" } ] }更改下列內容:
<REGION>:您的 AWS 區域 (例如us-east-1)。<ACCOUNT_ID>:您的 AWS 帳戶 ID (12 位數)。
將政策命名為
CloudWatchLogsToFirehosePolicy。點選「建立政策」。
為 CloudWatch Logs 建立 IAM 角色
- 依序前往「IAM」>「角色」>「建立角色」。
選取「自訂信任政策」並貼上:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<REGION>.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }將
<REGION>替換為您的 AWS 區域。點選「下一步」。
搜尋並選取您在上一步建立的政策
CloudWatchLogsToFirehosePolicy。點選「下一步」。
將角色命名為
CloudWatchLogsToFirehoseRole。按一下「建立角色」。
建立 Kinesis Data Firehose 傳送串流
- 在 AWS 控制台中,依序前往「Kinesis」>「Data Firehose」>「Create delivery stream」。
請提供下列設定詳細資料:
來源和目的地:
- 來源:選取「直接 PUT 或其他來源」
- 目的地:選取「HTTP 端點」
傳送串流名稱:
- 傳送串流名稱:輸入
CustomSecurityToChronicle
- 傳送串流名稱:輸入
HTTP 端點目的地:
- HTTP 端點網址:輸入您先前建構的完整端點網址 (動態饋給端點 + API 金鑰)
- 內容編碼:選取 GZIP (建議使用,可節省頻寬)
自訂 HTTP 標頭:
- 按一下「新增自訂 HTTP 標頭」
- 標頭名稱:輸入
X-Goog-Chronicle-Auth - 標頭值:輸入您在上一個步驟中儲存的密鑰
備份設定:
- Amazon S3 中的來源記錄備份:選取「僅限失敗的資料」(建議)
- S3 bucket:選取現有 bucket,或為失敗的記錄建立新 bucket
緩衝區提示:
- 緩衝區大小:輸入
1MiB (HTTP 端點的最小值) - 緩衝間隔:輸入
60秒
- 緩衝區大小:輸入
重試時間長度:
- 重試時間長度:輸入
300秒 (5 分鐘)
- 重試時間長度:輸入
按一下「建立傳送串流」。
等待傳送串流狀態變更為「有效」 (1 到 2 分鐘)。
將 CloudWatch Log 群組訂閱至 Firehose
- 在 AWS 控制台中,依序前往「CloudWatch」>「Logs」>「Log groups」。
- 選取包含自訂安全分析記錄的目標記錄群組。
- 按一下「訂閱篩選器」分頁標籤。
- 依序按一下「建立」> 建立 Amazon Kinesis Data Firehose 訂閱篩選器。
- 請提供下列設定詳細資料:
- 目的地:選取放送串流
CustomSecurityToChronicle。 - 授予權限:選取角色
CloudWatchLogsToFirehoseRole。 - 訂閱項目篩選器名稱:輸入
CustomSecurityToChronicle。 - 記錄格式:選取「其他」 (Google SecOps 會處理剖析作業)。
- 訂閱篩選器模式:如要傳送所有事件,請留空;如要只傳送特定事件,請輸入篩選器模式。
- 目的地:選取放送串流
- 按一下「開始串流播放」。
- 記錄現在會透過 Firehose 即時串流至 Google SecOps。
建立自訂剖析器 (選用)
擷取自訂安全性資料做為非結構化記錄後,您可以建立自訂剖析器,將資料正規化為 UDM 格式,以便搜尋及偵測。
何時該建立自訂剖析器
在下列情況下,請建立自訂剖析器:
- 您需要從自訂記錄格式中擷取特定欄位
- 您想對自訂資料啟用 UDM 搜尋功能
- 您必須將自訂欄位對應至偵測規則的標準 UDM 欄位
- 您想透過為特定欄位建立索引來提升搜尋效能
建立自訂記錄類型
- 依序前往「SIEM 設定」>「可用記錄類型」。
- 按一下「要求記錄類型」。
- 在「建立自訂記錄類型或要求預先建立的記錄類型」部分下方,選取「建立自訂記錄類型」。
- 請提供下列資訊:
- 記錄類型名稱:輸入描述性名稱 (例如
CUSTOM_SECURITY_ANALYTICS)。 - 說明:輸入記錄類型說明。
- 記錄範例:貼上 5 到 10 個原始格式的記錄項目範例。
- 記錄類型名稱:輸入描述性名稱 (例如
- 按一下「提交」。
- 自訂記錄類型會在約 10 分鐘後生效。
建立自訂剖析器
- 依序前往「SIEM 設定」>「剖析器」。
- 按一下「建立剖析器」。
- 選取「自訂剖析器」。
- 請提供下列資訊:
- 剖析器名稱:輸入描述性名稱
- 記錄類型:選取自訂記錄類型 (例如
CUSTOM_SECURITY_ANALYTICS) - 剖析器程式碼:使用 Google SecOps 的剖析器設定語言輸入剖析器設定
- 使用範例記錄測試剖析器。
- 按一下「提交」即可啟用剖析器。
剖析器設定範例
如要使用自訂 JSON 記錄格式,請按照下列步驟操作:
{ "timestamp": "2025-01-15T10:30:00Z", "event_type": "authentication", "user": "john.doe@example.com", "action": "login", "result": "success", "source_ip": "203.0.113.45" }剖析器設定範例:
filter { json { fields { timestamp: timestamp event_type: event_type user: user action: action result: result source_ip: source_ip } } } event { $e.metadata.event_timestamp.seconds = parseTimestamp(timestamp, "yyyy-MM-dd'T'HH:mm:ss'Z'") $e.metadata.event_type = "USER_LOGIN" $e.principal.user.email_addresses = user $e.target.ip = source_ip $e.security_result.action = if(result == "success", "ALLOW", "BLOCK") }如要進一步瞭解如何建立自訂剖析器,請參閱「管理預先建構和自訂剖析器」。
驗證資料匯入作業
設定動態饋給後,請確認資料是否已順利擷取。
查看動態消息狀態
- 依序前往「SIEM 設定」>「動態饋給」。
- 在清單中找出動態消息。
- 查看「狀態」欄:
- 有效:動態饋給正在執行並擷取資料
- 錯誤:動態饋給發生錯誤 (按一下即可查看詳細資料)
- 已暫停:動態消息已暫停
搜尋擷取的記錄
- 依序前往「搜尋」>「原始記錄掃描」。
輸入搜尋查詢,找出自訂記錄:
metadata.log_type = "CUSTOM_SECURITY_DATA_ANALYTICS"視需要調整時間範圍。
按一下 [搜尋]。
確認記錄是否顯示在結果中。
監控動態饋給指標
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下動態饋給名稱。
- 前往「指標」分頁。
- 查看下列指標:
- 擷取的事件數量:擷取的事件總數
- 擷取的位元組數:擷取的資料總量
- 擷取速率:每秒事件數
- 錯誤:擷取錯誤數量
疑難排解
Webhook 擷取問題
問題:HTTP 401 未經授權
- 原因:API 金鑰或密鑰無效
- 解決方法:確認 API 金鑰和私密金鑰正確無誤,且未過期
問題:HTTP 403 Forbidden
- 原因:API 金鑰沒有 Chronicle API 權限
- 解決方法:編輯 API 金鑰,並確認「API 限制」下方已選取「Chronicle API」
問題:HTTP 400 錯誤的要求
- 原因:要求格式或酬載無效
- 解決方法:確認 Content-Type 標頭已設為
application/json,且酬載是有效的 JSON
S3/GCS/Azure Blob 擷取問題
問題:未擷取任何資料
- 原因:值區 URI 不正確或缺少權限
- 解決方法:確認 bucket URI 包含尾端斜線,且服務帳戶具有「Storage 物件檢視者」角色
問題:檔案在擷取後未刪除
- 原因:服務帳戶沒有刪除權限
- 解決方案:授予 Storage 物件管理員角色,而非 Storage 物件檢視者
問題:舊檔案未擷取
- 原因:檔案最長效期設定會排除舊檔案
- 解決方法:在動態饋給設定中增加「檔案最長保留時間」值
Firehose 擷取問題
問題:傳送串流顯示錯誤
- 原因:端點網址或驗證無效
- 解決方法:確認端點網址包含 API 金鑰參數,且 X-Goog-Chronicle-Auth 標頭包含正確的密鑰
問題:資料更新間隔指標偏高
- 原因:Firehose 受到節流或發生傳送失敗
- 解決方法:檢查
ThrottledRecords和DeliveryToHTTP.Success速率的 CloudWatch 指標
問題:CloudWatch 未串流記錄檔
- 原因:未設定訂閱項目篩選器,或 IAM 角色缺少權限
- 解決方案:確認訂閱篩選器已啟用,且 IAM 角色具有
firehose:PutRecord權限
UDM 對應表
自訂安全性資料分析記錄檔會以非結構化資料的形式擷取。如要啟用 UDM 欄位對應,請按照上述「建立自訂剖析器」一節的說明建立自訂剖析器。
建立自訂剖析器後,系統會根據剖析器設定填入 UDM 欄位。安全分析資料的常見 UDM 欄位包括:
| UDM 欄位 | 說明 |
|---|---|
metadata.event_timestamp |
事件時間戳記 |
metadata.event_type |
事件類型 (例如 USER_LOGIN、FILE_ACCESS) |
principal.user.email_addresses |
使用者電子郵件地址 |
principal.ip |
來源 IP 位址 |
target.resource.name |
目標資源名稱 |
security_result.action |
安全性動作 (允許、封鎖等) |
security_result.severity |
事件嚴重程度 |
如需 UDM 欄位的完整清單,請參閱 UDM 欄位參考資料。
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。