收集自訂安全資料分析記錄

剖析器版本:6.0

支援:

本文說明如何使用多種擷取方法,將自訂安全性分析資料擷取至 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 動態饋給

建立動態饋給

  1. 依序前往 「SIEM 設定」 > 「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 在下一頁,點按「設定單一動態饋給」。
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 custom-security-analytics-webhook)。
  5. 選取「Webhook」做為「來源類型」。
  6. 選取「自訂安全性資料分析」做為「記錄類型」。
  7. 點選「下一步」。
  8. 指定下列輸入參數的值:
    • 分割分隔符號:選用:輸入分隔符號,分割多行事件。常見值:
      • \n - 換行符號分隔符 (NDJSON 最常見的分隔符)
      • 如果每個要求都包含單一事件,請留空
    • 資產命名空間:資產命名空間
    • 擷取標籤:要套用至這個動態饋給事件的標籤
  9. 點選「下一步」。
  10. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。

產生並儲存密鑰

建立動態饋給後,您必須產生用於驗證的密鑰:

  1. 在動態饋給詳細資料頁面中,按一下「產生密鑰」。
  2. 對話方塊會顯示密鑰。
  3. 複製並妥善儲存密鑰。

取得動態饋給端點網址

  1. 前往動態消息的「詳細資料」分頁。
  2. 在「端點資訊」部分,複製「動態消息端點網址」。
  3. 網址格式為:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    

    或

    https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate
    
  4. 請儲存這個網址,以便進行後續步驟。

  5. 按一下「完成」。

建立 Google Cloud API 金鑰

Google SecOps 需要 API 金鑰才能進行驗證。在 Google Cloud 控制台中建立受限制的 API 金鑰。

建立 API 金鑰

  1. 前往 Google Cloud 控制台憑證頁面。
  2. 選取專案 (與 Chronicle 執行個體相關聯的專案)。
  3. 依序點選「建立憑證」>「API 金鑰」。
  4. 系統會建立 API 金鑰,並在對話方塊中顯示。
  5. 按一下「編輯 API 金鑰」即可限制金鑰。

限制 API 金鑰

  1. 在「API 金鑰」設定頁面中:
    • 名稱:輸入描述性名稱 (例如 Chronicle Webhook API Key)。
  2. 在「API 限制」下方:
    1. 選取「Restrict key」(限制金鑰)。
    2. 在「選取 API」下拉式選單中,搜尋並選取「Google SecOps API」 (或「Chronicle API」)。
  3. 按一下 [儲存]。
  4. 從頁面頂端的「API 金鑰」欄位複製 API 金鑰值。
  5. 安全儲存 API 金鑰。

設定自訂應用程式來傳送資料

設定自訂安全應用程式或指令碼,將 HTTP POST 要求傳送至 Chronicle Webhook 端點。

建構 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 Webhook 動態饋給支援多種驗證方式。選擇應用程式支援的方法。

如果應用程式支援自訂 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 金鑰,並在標頭中使用 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"
    }
    

Webhook 限制和最佳做法

要求限制

限制 值
要求大小上限 4 MB
每秒查詢次數 (QPS) 上限 15,000
要求逾時 30 秒
重試行為 自動 (指數輪詢)

最佳做法

  • 批次處理事件:使用以換行符分隔的 JSON (NDJSON) 格式,在單一要求中傳送多個事件,以減少額外負荷。
  • 加入時間戳記:請務必加入 ISO 8601 格式的時間戳記欄位,確保事件順序正確。
  • 使用結構化資料:以 JSON 格式傳送資料,方便剖析及擷取欄位。
  • 導入重試邏輯:以指數輪詢方式處理暫時性失敗。
  • 監控回應代碼:記錄並提醒非 200 的回應。

選項 2:Amazon S3 V2 擷取 (批次匯出)

如果自訂安全應用程式可將記錄匯出至 Amazon S3 bucket,請使用這個方法。

建立 Amazon S3 儲存貯體

  1. 開啟 Amazon S3 控制台。
  2. 點選「建立 bucket」。
  3. 請提供下列設定詳細資料:
    • Bucket 名稱:輸入 bucket 的有意義名稱 (例如 custom-security-analytics-logs)。
    • 區域:選取偏好的 AWS 區域 (例如 us-east-1)。
  4. 點選「建立」。

建立具備 S3 存取權的 IAM 使用者

  1. 開啟 IAM console。
  2. 依序按一下「使用者」 > 「新增使用者」。
  3. 輸入使用者名稱 (例如 chronicle-s3-reader)。
  4. 選取「程式輔助存取權」。
  5. 點選 [Next: Permissions] (下一步:權限)。
  6. 選擇「直接附加現有政策」。
  7. 搜尋並選取「AmazonS3FullAccess」AmazonS3FullAccess。
  8. 按一下「Next: Tags」(下一步:標記)。
  9. 按一下 [下一步:檢閱]。
  10. 點選「Create user」。
  11. 按一下「Download .csv file」,儲存「Access Key ID」和「Secret Access Key」。
  12. 按一下 [關閉]。

設定應用程式,將資料匯出至 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 動態饋給

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 在下一頁,點按「設定單一動態饋給」。
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 custom-security-analytics-s3)。
  5. 選取「Amazon S3 V2」做為「來源類型」。
  6. 選取「自訂安全性資料分析」做為「記錄類型」。
  7. 點選「下一步」。
  8. 指定下列輸入參數的值:

    • S3 URI:bucket URI,格式為 s3://custom-security-analytics-logs/security-events/

    • 來源刪除選項:根據偏好選取刪除選項:

      • Never:轉移後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空目錄:成功轉移後,刪除檔案和空目錄。
    • 檔案存在時間上限:納入在過去天數內修改過的檔案 (預設為 180 天)。

    • 存取金鑰 ID:輸入 IAM 使用者的存取金鑰。

    • 私密存取金鑰:輸入 IAM 使用者的私密金鑰。

    • 資產命名空間:資產命名空間。

    • 擷取標籤:要套用至這個動態饋給事件的標籤。

  9. 點選「下一步」。

  10. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。

選項 3:Google Cloud Storage V2 擷取 (批次匯出)

如果自訂安全應用程式可將記錄匯出至 Google Cloud Storage bucket,請使用這個方法。

建立 GCS bucket

  1. 前往 Google Cloud 控制台。
  2. 選取專案或建立新專案。
  3. 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
  4. 按一下「建立值區」。
  5. 提供下列設定詳細資料:

    設定 值
    為 bucket 命名 輸入全域不重複的名稱 (例如 custom-security-analytics-logs)
    位置類型 請根據需求選擇 (區域、雙區域、多區域)
    位置 選取位置 (例如 us-central1)
    儲存空間級別 標準 (建議用於經常存取的記錄)
    存取控管 統一 (建議)
    保護工具 選用:啟用物件版本管理或資料保留政策
  6. 點選「建立」。

設定應用程式,將資料匯出至 GCS

使用下列其中一種方法,設定自訂安全性應用程式,將記錄檔寫入 GCS bucket:

  • 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 服務帳戶

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 按一下「設定單一動態饋給」。
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 custom-security-analytics-gcs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」。
  6. 選取「自訂安全性資料分析」做為「記錄類型」。
  7. 按一下「Get Service Account」。
  8. 系統會顯示專屬服務帳戶電子郵件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. 複製這個電子郵件地址,以便在下一步中使用。

授予 IAM 權限

  1. 依序前往「Cloud Storage」>「Buckets」。
  2. 點按 bucket 名稱。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」。
  5. 請提供下列設定詳細資料:
    • 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
    • 指派角色:選取「Storage 物件檢視者」。
  6. 按一下 [儲存]。

為 GCS 設定 Google SecOps 資訊提供

  1. 在動態消息建立頁面繼續操作 (或依序前往 「SIEM 設定」 > 「動態消息」 > 「新增動態消息」)。
  2. 點選「下一步」。
  3. 指定下列輸入參數的值:

    • 儲存空間 bucket 網址:輸入 GCS bucket URI,並加上前置路徑:

      gs://custom-security-analytics-logs/security-events/
      
    • 來源刪除選項:根據偏好設定選取刪除選項:

      • Never:轉移後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空目錄:成功轉移後,刪除檔案和空目錄。
    • 檔案存在時間上限:納入在過去天數內修改過的檔案 (預設為 180 天)。

    • Asset namespace:資產命名空間。

    • 擷取標籤:要套用至這個動態饋給事件的標籤。

  4. 點選「下一步」。

  5. 在「Finalize」(完成) 畫面中檢查新的新聞動態消息設定,然後按一下「Submit」(提交)。

選項 4:Azure Blob 儲存體 V2 擷取 (批次匯出)

如果自訂安全性應用程式可以將記錄匯出至 Azure Blob 儲存體,請使用這個方法。

建立 Azure 儲存體帳戶

  1. 在 Azure 入口網站中,搜尋「Storage accounts」。
  2. 點選「+ 建立」。
  3. 提供下列設定詳細資料:

    設定 值
    訂閱項目 選取 Azure 訂閱項目
    資源群組 選取現有項目或建立新項目
    儲存空間帳戶名稱 輸入不重複的名稱 (例如 customsecuritylogs)
    區域 選取區域 (例如 East US)
    效能 標準 (建議)
    備援 GRS (異地備援儲存體) 或 LRS (本地備援儲存體)
  4. 按一下「Review + create」。

  5. 查看帳戶總覽,然後按一下「建立」。

  6. 等待部署作業完成。

取得儲存空間帳戶憑證

  1. 前往您剛建立的「儲存空間帳戶」。
  2. 在左側導覽列中,選取「Security + networking」下方的「Access keys」。
  3. 按一下「顯示金鑰」。
  4. 複製並儲存下列項目,以供日後使用:
    • 儲存空間帳戶名稱:customsecuritylogs
    • 金鑰 1 或金鑰 2:共用存取金鑰

建立 Blob 容器

  1. 在同一個儲存空間帳戶中,選取左側導覽列的「容器」。
  2. 按一下「+ 容器」。
  3. 請提供下列設定詳細資料:
    • 名稱:輸入容器名稱 (例如 security-events)
    • 公開存取層級:選取「私人 (不允許匿名存取)」。
  4. 點選「建立」。

設定應用程式,將資料匯出至 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 資訊提供

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 在下一個頁面中,按一下「設定單一動態饋給」。
  4. 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如 custom-security-analytics-azure)。
  5. 選取「Microsoft Azure Blob Storage V2」做為「來源類型」。
  6. 「Log type」(記錄類型) 請選取「Custom Security Data Analytics」(自訂安全性資料分析)。
  7. 點選「下一步」。
  8. 指定下列輸入參數的值:

    • Azure URI:輸入 Blob 服務端點網址和容器路徑:

      https://customsecuritylogs.blob.core.windows.net/security-events/
      
    • 來源刪除選項:根據偏好設定選取刪除選項:

      • 永不:轉移後一律不刪除任何檔案。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空目錄:成功轉移後,刪除檔案和空目錄。
    • 檔案存在時間上限:納入在過去天數內修改過的檔案 (預設為 180 天)。

    • 共用金鑰:輸入儲存體帳戶的共用金鑰值 (存取金鑰)。

    • 資產命名空間:資產命名空間。

    • 擷取標籤:要套用至這個動態饋給事件的標籤。

  9. 點選「下一步」。

  10. 在「Finalize」(完成) 畫面中檢查新的新聞動態消息設定,然後按一下「Submit」(提交)。

選項 5:Amazon Data Firehose 擷取 (即時串流)

如果自訂安全性應用程式會將記錄寫入 Amazon CloudWatch Logs,且您需要即時串流至 Google SecOps,請使用這個方法。

建立 Google SecOps Firehose 動態饋給

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如 custom-security-analytics-firehose)。
  4. 選取「Amazon Data Firehose」做為「來源類型」。
  5. 選取「自訂安全性資料分析」做為「記錄類型」。
  6. 點選「下一步」。
  7. 指定下列輸入參數的值:
    • 分割分隔符號:(選用) 輸入 \n,分割以換行符號分隔的記錄。
    • 資產命名空間:資產命名空間。
    • 擷取標籤:要套用至這個動態饋給事件的標籤。
  8. 點選「下一步」。
  9. 檢查動態饋給設定,然後按一下「提交」。
  10. 按一下「產生密鑰」,產生用於驗證這個動態消息的密鑰。
  11. 複製並儲存密鑰,因為您無法再次查看這組密鑰。
  12. 前往「詳細資料」分頁。
  13. 從「端點資訊」欄位複製動態消息端點網址。
  14. 按一下「完成」。

建立 Google Cloud API 金鑰

  1. 前往 Google Cloud 控制台的「憑證」頁面:https://console.cloud.google.com/apis/credentials
  2. 按一下 [Create credentials] (建立憑證),然後選取 [API key] (API 金鑰)。
  3. 按一下「編輯 API 金鑰」即可限制金鑰。
  4. 在「API 限制」下方,選取「限制金鑰」。
  5. 搜尋並選取「Google SecOps API」。
  6. 按一下 [儲存]。
  7. 複製並儲存 API 金鑰。

建構端點網址

  1. 以以下格式將 API 金鑰附加至動態饋給端點網址:

    <FEED_ENDPOINT_URL>?key=<API_KEY>
    

    範例:

    https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...
    
  2. 請儲存這個完整網址,以便在下一個步驟使用。

建立 Firehose 的 IAM 政策

  1. 在 AWS 控制台中,依序前往「IAM」>「Policies」>「Create policy」>「JSON」分頁標籤。
  2. 貼上以下政策 JSON:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                ],
                "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/CustomSecurityToChronicle"
            }
        ]
    }
    
  3. 更改下列內容:

    • <REGION>:您的 AWS 區域 (例如 us-east-1)。
    • <ACCOUNT_ID>:您的 AWS 帳戶 ID (12 位數)。
  4. 將政策命名為 CloudWatchLogsToFirehosePolicy。

  5. 點選「建立政策」。

為 CloudWatch Logs 建立 IAM 角色

  1. 依序前往「IAM」>「角色」>「建立角色」。
  2. 選取「Custom trust policy」,然後貼上以下內容:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<REGION>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  3. 將 <REGION> 替換為您的 AWS 區域。

  4. 點選「下一步」。

  5. 搜尋並選取您在上一個步驟中建立的政策 CloudWatchLogsToFirehosePolicy。

  6. 點選「下一步」。

  7. 將角色命名為 CloudWatchLogsToFirehoseRole。

  8. 按一下「建立角色」。

建立 Kinesis Data Firehose 傳送串流

  1. 在 AWS 控制台中,依序前往「Kinesis」>「Data Firehose」>「Create delivery stream」。
  2. 提供下列設定詳細資料:

    • 來源和目的地:

      • 來源:選取「直接 PUT 或其他來源」
      • 目的地:選取「HTTP 端點」
    • 傳送串流名稱:

      • 傳送串流名稱:輸入 CustomSecurityToChronicle
    • HTTP 端點目的地:

      • HTTP 端點網址:輸入您先前建構的完整端點網址 (動態饋給端點 + API 金鑰)
      • 內容編碼:選取「GZIP」 (建議選取,可節省頻寬)
    • 自訂 HTTP 標頭:

      • 按一下「新增自訂 HTTP 標頭」
      • 標頭名稱:輸入 X-Goog-Chronicle-Auth
      • 標頭值:輸入您在先前步驟中儲存的密鑰
    • 備份設定:

      • Source record backup in Amazon S3:選取「Failed data only」 (建議)
      • S3 bucket:選取現有 bucket,或為失敗的記錄建立新 bucket
    • 緩衝區提示:

      • 緩衝區大小:輸入 1 MiB (HTTP 端點的最小值)
      • 緩衝間隔:輸入 60 秒
    • 重試時間長度:

      • 重試時間長度:輸入 300 秒 (5 分鐘)
  3. 按一下「建立放送串流」。

  4. 等待傳送串流狀態變更為「有效」 (1 到 2 分鐘)。

將 CloudWatch 日誌群組訂閱至 Firehose

  1. 在 AWS 控制台中,依序前往「CloudWatch」>「Logs」>「Log groups」。
  2. 選取含有自訂安全性分析記錄的目標記錄群組。
  3. 按一下「訂閱篩選器」分頁標籤。
  4. 依序點選「建立」>「建立 Amazon Kinesis Data Firehose 訂閱篩選器」。
  5. 提供下列設定詳細資料:
    • 目的地:選取放送串流 CustomSecurityToChronicle。
    • 授予權限:選取角色 CloudWatchLogsToFirehoseRole。
    • 訂閱篩選器名稱:輸入 CustomSecurityToChronicle。
    • 記錄格式:選取「其他」 (Google SecOps 會處理剖析作業)。
    • 訂閱篩選器模式:留空即可傳送所有事件,或輸入篩選器模式,只傳送特定事件。
  6. 按一下「開始串流播放」。
  7. 記錄現在會透過 Firehose 即時串流至 Google SecOps。

建立自訂剖析器 (選用)

擷取自訂安全性資料做為非結構化記錄後,您可以建立自訂剖析器,將資料正規化為 UDM 格式,以便搜尋及偵測。

建立自訂剖析器的時機

在下列情況下,請建立自訂剖析器:

  • 您需要從自訂記錄格式中擷取特定欄位
  • 您想對自訂資料啟用 UDM 搜尋功能
  • 您必須將自訂欄位對應至標準 UDM 欄位,才能用於偵測規則
  • 您想透過為特定欄位建立索引來提升搜尋效能

建立自訂記錄類型

  1. 依序前往「SIEM 設定」>「可用記錄類型」。
  2. 按一下「要求記錄類型」。
  3. 在「建立自訂記錄類型或要求預先建立的記錄類型」部分下方,選取「建立自訂記錄類型」。
  4. 提供下列資訊:
    • 記錄類型名稱:輸入描述性名稱 (例如 CUSTOM_SECURITY_ANALYTICS)。
    • 說明:輸入記錄檔類型的說明。
    • 記錄範例:以原始格式貼上 5 到 10 個記錄項目範例。
  5. 按一下「提交」。
  6. 自訂記錄類型會在約 10 分鐘後生效。

建立自訂剖析器

  1. 依序前往「SIEM 設定」>「剖析器」。
  2. 按一下「建立剖析器」。
  3. 選取「自訂剖析器」。
  4. 請提供下列資訊:
    • 剖析器名稱:輸入描述性名稱
    • 記錄類型:選取自訂記錄類型 (例如 CUSTOM_SECURITY_ANALYTICS)
    • 剖析器程式碼:使用 Google SecOps 的剖析器設定語言輸入剖析器設定
  5. 使用範例記錄檔測試剖析器。
  6. 按一下「Submit」(提交),啟用剖析器。

剖析器設定範例

  • 如要使用自訂 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")
    }
    

    如要進一步瞭解如何建立自訂剖析器,請參閱「管理預先建構和自訂剖析器」。

驗證資料擷取作業

設定動態饋給後,請確認資料是否已成功擷取。

查看動態饋給狀態

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 在清單中找出動態消息。
  3. 查看「狀態」欄:
    • 有效:動態消息正在執行並擷取資料
    • 錯誤:動態饋給發生錯誤 (按一下即可查看詳細資料)
    • 已暫停:動態饋給已暫停

搜尋擷取的記錄

  1. 依序點選「搜尋」>「原始記錄掃描」。
  2. 輸入搜尋查詢,找出自訂記錄:

    metadata.log_type = "CUSTOM_SECURITY_DATA_ANALYTICS"
    
  3. 視需要調整日期範圍。

  4. 按一下 [搜尋]。

  5. 確認記錄顯示在結果中。

監控動態消息指標

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下動態饋給名稱。
  3. 前往「指標」分頁。
  4. 查看下列指標:
    • 擷取的事件數量:擷取的事件總數
    • 擷取的位元組數:擷取的資料總量
    • 擷取率:每秒事件數
    • 錯誤:擷取錯誤數量

疑難排解

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 擷取問題

  • 問題:未擷取任何資料

    • 原因:bucket 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 專業人員尋求解答。