收集 Google Cloud Secure Web Proxy 記錄

支援的國家/地區:

本文說明如何使用 Google Cloud Storage V2,將 Secure Web Proxy 記錄檔擷取 Google Cloud 至 Google Security Operations。

Secure Web Proxy 是雲端優先服務,可協助您保護輸出網路流量 (HTTP 和 HTTPS)。這項解決方案提供受管理 Proxy,可根據雲端優先身分和網頁應用程式,制定彈性且精細的政策。Secure Web Proxy 會識別不符合政策規定的流量,並將流量記錄在 Cloud Logging 中,方便您監控網際網路使用情形、找出網路威脅,以及應對安全事件。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • 已啟用 Cloud Storage API 的 Google Cloud 專案
  • 建立及管理 GCS 值區的權限
  • 管理 Google Cloud Storage 值區 IAM 政策的權限
  • Secure Web Proxy 已在 Google Cloud 環境中啟用及設定
  • Google Cloud 的特殊存取權,以及存取 Secure Web Proxy 記錄的適當權限
  • 建立及管理 Cloud Logging 接收器的權限

建立 Google Cloud Storage 值區

使用 Google Cloud 控制台

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

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

使用 gcloud 指令列工具

  • 或者,您也可以使用 gcloud 指令建立值區:

    gcloud storage buckets create gs://gcp-swp-logs \
        --location=us-central1 \
        --default-storage-class=STANDARD
    
    • 取代:
      • gcp-swp-logs:您要使用的 bucket 名稱 (全域不重複)。
      • us-central1:偏好的區域 (例如 us-central1europe-west1)。

設定 Cloud Logging,將 Secure Web Proxy 記錄檔匯出至 GCS

Secure Web Proxy 會自動將 Proxy 交易記錄檔記錄至 Cloud Logging。如要將這些記錄匯出至 Cloud Storage,您必須建立 Cloud Logging 接收器。

使用 Google Cloud 控制台

  1. Google Cloud 控制台中,依序前往「Logging」>「Log Router」
  2. 按一下「Create Sink」(建立接收器)
  3. 請提供下列設定詳細資料:
    • 接收器名稱:輸入描述性名稱 (例如 swp-export-sink)。
    • 接收器說明:選填說明。
  4. 點選「下一步」
  5. 在「選取接收器服務」部分:
    • 接收器服務:選取「Cloud Storage bucket」(Cloud Storage 值區)
    • 選取 Cloud Storage bucket:從下拉式選單中選取 gcp-swp-logs
  6. 點選「下一步」
  7. 在「選擇要納入接收器的記錄檔」部分,輸入下列篩選查詢:

    logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"
    
    • <YOUR_PROJECT_ID> 替換為您的 Google Cloud 專案 ID。
  8. 點選「下一步」

  9. 檢查設定,然後按一下「建立接收器」

建立接收器後,Cloud Logging 會顯示接收器的寫入者身分 (服務帳戶電子郵件地址)。複製這個服務帳戶電子郵件地址,以供下一個步驟使用。

使用 gcloud 指令列工具

  • 或者,您也可以使用 gcloud 指令建立接收器:

    gcloud logging sinks create swp-export-sink \
        storage.googleapis.com/gcp-swp-logs \
        --log-filter='logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"'
    
    • 取代:
      • swp-export-sink:所需的接收器名稱。
      • gcp-swp-logs:您的 GCS bucket 名稱。
      • <YOUR_PROJECT_ID>:您的 Google Cloud 專案 ID。

將權限授予 Cloud Logging 服務帳戶

Cloud Logging 接收器寫入者身分服務帳戶需要有權限,才能將記錄檔寫入 GCS bucket。

使用 Google Cloud 控制台

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 按一下 bucket 名稱 (gcp-swp-logs)。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 請提供下列設定詳細資料:
    • 新增主體:貼上 Cloud Logging 接收器寫入者身分服務帳戶電子郵件地址 (例如 serviceAccount:service-123456789@gcp-sa-logging.iam.gserviceaccount.com)。
    • 指派角色:選取「Storage 物件管理員」
  6. 按一下 [儲存]

使用 gcloud 指令列工具

  • 或者,使用 gcloud 指令授予權限:

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectAdmin"
    
    • 取代:
      • gcp-swp-logs:bucket 名稱。
      • <LOGGING_SERVICE_ACCOUNT_EMAIL>:Cloud Logging 接收器寫入者身分服務帳戶電子郵件地址。

使用 gsutil 指令列工具 (舊版)

  • 將 Object 管理員角色指派給記錄服務帳戶:

    gsutil iam ch serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>:objectAdmin \
        gs://gcp-swp-logs
    

驗證權限

  • 如要確認權限是否已正確授予,請按照下列步驟操作:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectAdmin"
    

輸出內容中應該會顯示 Cloud Logging 服務帳戶電子郵件地址。

擷取 Google SecOps 服務帳戶

Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。

在 Google SecOps 中設定資訊提供,擷取 GCP 安全網路 Proxy 記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 GGoogle CloudCP Secure Web Proxy Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「GCP Secure Web Proxy」(GCP 安全網頁 Proxy) 做為「記錄類型」

  7. 按一下「取得服務帳戶」。系統會顯示不重複的服務帳戶電子郵件地址,例如:

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

  9. 點選「下一步」

  10. 指定下列輸入參數的值:

    • 儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:
    gs://gcp-swp-logs/
    
    • 取代:
      • gcp-swp-logs:您的 GCS bucket 名稱。
    • 來源刪除選項:根據偏好設定選取刪除選項:

      • 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。

    • 檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。

    • 資產命名空間資產命名空間

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

  11. 點選「下一步」

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

將 IAM 權限授予 Google SecOps 服務帳戶

Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。

使用 Google Cloud 控制台

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

使用 gcloud 指令列工具

  • 或者,使用 gcloud 指令授予權限:

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectViewer"
    
    • 取代:
      • gcp-swp-logs:bucket 名稱。
      • <SECOPS_SERVICE_ACCOUNT_EMAIL>:Google SecOps 服務帳戶電子郵件地址。

使用 gsutil 指令列工具 (舊版)

  • 執行下列指令,授予 SecOps 服務帳戶物件檢視者權限:

    gsutil iam ch serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>:objectViewer \
        gs://gcp-swp-logs
    

驗證權限

  • 如要確認權限是否已正確授予,請按照下列步驟操作:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectViewer"
    

輸出內容應會顯示 Google SecOps 服務帳戶電子郵件地址。

UDM 對應表

記錄欄位 UDM 對應 邏輯
httpRequest.latency、jsonPayload.@type、logName additional.fields 與 latency_label (鍵為「HTTPRequest Latency」,值來自延遲時間)、type_label (鍵為「Log Type」,值來自 @type)、logname (鍵為「Log Name」,值來自 logName) 合併
receiveTimestamp metadata.collected_timestamp 剖析為 RFC3339 時間戳記
metadata.event_type 如果 has_principal 為 true、has_target 為 true,且通訊協定符合 (?i)http,則設為 NETWORK_HTTP;如果 has_principal 為 true、has_target 為 true,且 network != "",則設為 NETWORK_CONNECTION;如果 has_principal 為 true、has_target 為 true,且 has_principal_user 為 true,則設為 USER_LOGIN;如果 has_principal 為 true,則設為 STATUS_UPDATE;否則設為 GENERIC_EVENT
insertId metadata.product_log_id 直接複製值
httpRequest.protocol network.application_protocol 使用 grok 模式 %{DATA:protocol}/%{INT:http_version} 擷取的通訊協定,如果位於 ["HTTP","HTTPS"] 中,則會設定
httpRequest.protocol network.application_protocol_version 使用 grok 模式 %{DATA:protocol}/%{INT:http_version} 擷取 http_version
httpRequest.requestMethod network.http.method 直接複製值
httpRequest.userAgent network.http.parsed_user_agent 直接複製值,並轉換為已剖析的 useragent
httpRequest.status network.http.response_code 轉換為字串,然後轉換為整數
httpRequest.userAgent network.http.user_agent 直接複製值
httpRequest.responseSize network.received_bytes 直接複製值,並轉換為 uinteger
httpRequest.requestSize network.sent_bytes 直接複製值,並轉換為 uinteger
httpRequest.serverIp principal.asset.ip 使用 grok 模式 %{IP:server_ip} 擷取 IP,如果不是空白就設定
httpRequest.serverIp principal.ip 使用 grok 模式 %{IP:server_ip} 擷取 IP,如果不是空白就設定
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action 如果 rule.action == ALLOW,則設為 ALLOW;如果 rule.action == DENIED,則設為 BLOCK
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action_details 直接從 rule.action 複製的值
jsonPayload.enforcedGatewaySecurityPolicy.requestWasTlsIntercepted、resource.labels.gateway_name、resource.labels.resource_container、resource.labels.gateway_type security_result.detection_fields 與 tls_intercepted_label (鍵「requestWasTlsIntercepted」,值來自 requestWasTlsIntercepted)、gateway_name_label (鍵「gateway-name」,值來自 gateway_name)、resource_container_label (鍵「resource_container」,值來自 resource_container)、gateway_type_label (鍵「gateway-type」,值來自 gateway_type) 合併
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].name security_result.rule_name 直接複製值
嚴重性 security_result.severity 如果嚴重程度為 CRITICAL,則設為 CRITICAL;如果嚴重程度為 ERROR,則設為 ERROR;如果嚴重程度為 ALERT 或 EMERGENCY,則設為 HIGH;如果嚴重程度為 INFO 或 NOTICE,則設為 INFORMATIONAL;如果嚴重程度為 DEBUG,則設為 LOW;如果嚴重程度為 WARNING,則設為 MEDIUM;否則設為 UNKNOWN_SEVERITY
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.asset.hostname 直接複製值
httpRequest.remoteIp target.asset.ip 使用 grok 模式 %{IP:remote_ip} 擷取的 IP,如果不是空白,則會設定
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.hostname 直接複製值
httpRequest.remoteIp target.ip 使用 grok 模式 %{IP:remote_ip} 擷取的 IP,如果不是空白,則會設定
resource.labels.location target.resource.attribute.cloud.availability_zone 直接複製值
resource.labels.network_name、resource.type target.resource.attribute.labels 與 rc_network_name_label (鍵為「rc_network_name」,值來自 network_name)、resource_type (鍵為「Resource Type」,值來自 resource.type) 合併
httpRequest.requestUrl target.url 直接複製值

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。