收集 F5 Shape 記錄

剖析器版本:1.0

支援的國家/地區:

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

F5 Distributed Cloud Bot Defense (前身為 Shape Security) 可識別並防範惡意機器人,保護應用程式免受自動化攻擊。Bot Defense 會使用 JavaScript 和原生 Mobile SDK,從用戶端瀏覽器和行動裝置收集遙測資料,並在要求送達應用程式前檢查這些資料。這項服務提供整合式資訊主頁和報表,可查看分析流量的詳細資訊,包括安全性事件、存取記錄和稽核記錄。

事前準備

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

  • Google SecOps 執行個體
  • 已啟用 Cloud Storage API 的 GCP 專案
  • 建立及管理 GCS bucket 的權限
  • 管理 Google Cloud Storage 值區 IAM 政策的權限
  • F5 Distributed Cloud Console 的特殊存取權
  • 具有 Multi-Cloud Network Connect 或 Shared Configuration 服務存取權的 F5 Distributed Cloud 帳戶

建立 Google Cloud Storage bucket

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

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

產生 F5 Shape API 憑證

F5 Distributed Cloud 使用 API 憑證 (mTLS) 或 API 權杖進行驗證。建議使用 API 憑證來提升安全性。

建立 API 憑證

  1. 登入 F5 Distributed Cloud Console。
  2. 在管理中心首頁中,選取「管理」。
  3. 在左側導覽選單中,依序前往「個人管理」>「憑證」。
  4. 點選「Add Credentials」。
  5. 在「Metadata」部分,輸入憑證的「Name」 (例如 secops-integration)。
  6. 在「憑證類型」清單中,選取「API 憑證」。
  7. 輸入「密碼」,然後在「確認密碼」欄位中確認密碼。
  8. 從日曆清單中選取「到期日」。

  9. 按一下「下載」,即可產生並下載 .p12 檔案格式的憑證。

  10. 請妥善儲存下載的憑證檔案和密碼,以備日後使用。

在 F5 Distributed Cloud 中建立 GCP Cloud 憑證

F5 Distributed Cloud 需要 Google Cloud 服務帳戶憑證,才能將記錄檔寫入 GCS bucket。

建立 Google Cloud 服務帳戶

  1. 在 GCP 控制台中,依序前往「IAM 與管理」>「服務帳戶」。
  2. 按一下「Create Service Account」(建立服務帳戶)。
  3. 請提供下列設定詳細資料:
    • 服務帳戶名稱:輸入 f5-xc-log-writer (或您偏好的名稱)。
    • 服務帳戶說明:輸入 Service account for F5 Distributed Cloud to write logs to GCS。
  4. 按一下「建立並繼續」。
  5. 在「將專案存取權授予這個服務帳戶」部分:
    1. 按一下「請選擇角色」。
    2. 搜尋並選取「Storage 物件管理員」。
  6. 按一下「繼續」。
  7. 按一下「完成」。

授予 GCS bucket 的 IAM 權限

  1. 依序前往「Cloud Storage」>「Buckets」。
  2. 按一下 bucket 名稱 (例如 f5-xc-logs)。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」。
  5. 請提供下列設定詳細資料:
    • 新增主體:輸入服務帳戶電子郵件地址 (例如 f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com)。
    • 指派角色:選取「Storage 物件管理員」。
  6. 按一下 [儲存]。

建立服務帳戶金鑰

  1. 在 GCP 控制台中,依序前往「IAM 與管理」>「服務帳戶」。
  2. 找出服務帳戶 (例如 f5-xc-log-writer),然後按一下。
  3. 前往「金鑰」分頁。
  4. 依序點選「新增金鑰」>「建立新的金鑰」。
  5. 選取「JSON」做為金鑰類型。
  6. 點選「建立」。
  7. 系統會自動下載 JSON 金鑰檔案。請妥善儲存這個檔案。

將 Google Cloud 雲端憑證新增至 F5 Distributed Cloud

  1. 在 F5 Distributed Cloud Console 的首頁中,選取「Multi-Cloud Network Connect」(多雲網路連線) 或「Shared Configuration」(共用設定)。
  2. 在左側導覽選單中,依序前往「管理」「網站管理」「雲端憑證」。
  3. 按一下「新增雲端憑證」。
  4. 在「中繼資料」部分,輸入「名稱」,例如 gcp-secops-logs。
  5. 在「Cloud Credentials Type」清單中,選取「GCP Credentials」。
  6. 在「GCP 憑證」部分,按一下「設定」。
  7. 在「服務帳戶金鑰」部分:
    1. 在「Secret Type」清單中,選取「Blindfolded Secret」。
    2. 從「動作」清單中選取「Blindfold New Secret」。
    3. 在「政策類型」清單中,選取「內建」。
    4. 在「Secret to Blindfold」欄位中,貼上下載的 JSON 金鑰檔案完整內容。
  8. 按一下「套用」。
  9. 按一下「儲存並退出」。

為 GCS 設定全域記錄接收器

F5 Distributed Cloud Global Log Receiver 會以 NDJSON 格式 (以換行符號分隔的 JSON) 將記錄串流至 GCS,每 5 分鐘一次。

建立全域記錄接收器

  1. 在 F5 Distributed Cloud Console 的首頁中,選取「Multi-Cloud Network Connect」(多雲網路連線) 或「Shared Configuration」(共用設定)。
    • 如要使用 Multi-Cloud Network Connect,請依序前往「管理」>「記錄管理」>「全域記錄接收器」。
    • 如要使用共用設定,請依序前往「管理」 >「全域記錄接收器」。
  2. 按一下「新增全域記錄接收器」。
  3. 在「中繼資料」部分,輸入「名稱」,例如 secops-gcs-receiver。
  4. 視需要新增標籤和說明。
  5. 在「記錄類型」清單中,選取要收集的記錄類型:

    • 要求記錄:負載平衡器的 HTTP 存取記錄
    • 安全性事件:機器人防禦和 WAF 安全性事件
    • 稽核記錄:設定和管理稽核記錄
    • DNS 請求記錄:DNS 查詢記錄
  6. 從「記錄訊息選取」清單中:

    • 如果使用 Multi-Cloud Network Connect 服務,請選取「Select logs from current namespace」(從目前的命名空間選取記錄) (系統命名空間)。
    • 如果使用「共用設定」服務,請選擇下列其中一種做法:
      • 選取目前命名空間的記錄:只傳送共用命名空間的記錄。
      • 選取所有命名空間的記錄:傳送所有命名空間的記錄。
      • 選取特定命名空間中的記錄:輸入特定命名空間名稱,然後按一下「新增項目」即可新增更多項目。
  7. 從「接收器設定」清單中選取「GCP Bucket」。

  8. 在「GCP Bucket」部分,提供下列設定:

    • GCP Bucket 名稱:輸入 GCS bucket 名稱 (例如 f5-xc-logs)。
    • GCP Cloud 憑證:從清單中選取您建立的 Cloud 憑證 (例如 gcp-secops-logs)。

調整進階設定 (選用)

  1. 按一下「顯示進階欄位」切換鈕。
  2. 在「批次選項」部分,設定下列選項 (選用):

    • 批次逾時選項:選取「逾時秒數」並輸入值 (預設值:300 秒)。
    • 批次最多事件數:選取「最多事件數」,然後輸入介於 32 到 2000 之間的值 (選用)。
    • 批次位元組:選取「最大位元組」,然後輸入介於 4096 至 1048576 的值 (預設值:10485760 位元組 / 10 MB)。

完成並測試設定

  1. 按一下「儲存並結束」,即可建立全域記錄接收器。
  2. 在「Global Log Receiver」(全域記錄接收器) 清單中,找出您的接收器 (例如 secops-gcs-receiver)。
  3. 在「動作」欄中,按一下三點圖示 ...,然後選取「測試連線」。
  4. 等待測試完成。如果看到成功訊息,表示連線正常運作。

  5. 確認記錄檔是否寫入 GCS:

    1. 前往 GCP 控制台的「Cloud Storage」>「Buckets」頁面。
    2. 按一下 bucket 名稱 (例如 f5-xc-logs)。
    3. 5 到 10 分鐘內,您應該會看到建立的資料夾,結構如下:
      • 每日資料夾:YYYY-MM-DD/
      • 每小時子資料夾:YYYY-MM-DD/HH/
      • 記錄檔:YYYY-MM-DD/HH/logs_YYYYMMDDHHMMSS.ndjson.gz

設定防火牆許可清單

F5 Distributed Cloud 需要在防火牆中允許特定 IP 範圍,才能傳送記錄。

將下列 IP 位址範圍新增至防火牆的許可清單:

  • 193.16.236.64/29
  • 185.160.8.152/29

擷取 Google SecOps 服務帳戶

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

取得服務帳戶電子郵件地址

  1. 依序前往「SIEM 設定」>「動態饋給」。
  2. 按一下「新增動態饋給」。
  3. 按一下「設定單一動態饋給」。
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 F5 Distributed Cloud Bot Defense)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」。
  6. 選取「F5_SHAPE」做為「記錄類型」。
  7. 按一下「取得服務帳戶」。系統會顯示專屬服務帳戶電子郵件地址,例如:

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

  9. 點選「下一步」。

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

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

      gs://f5-xc-logs/
      
      • 將 f5-xc-logs 替換為實際的 GCS bucket 名稱。
      • 如果您在全域記錄接收器中設定特定前置字元,請將其納入路徑 (例如 gs://f5-xc-logs/bot-defense/)。
    • 來源刪除選項:根據偏好設定選取刪除選項:

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

    • 檔案存在時間上限:納入在過去天數內修改過的檔案 (預設為 180 天)。

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

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

  11. 點選「下一步」。

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

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

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

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

UDM 對應表

記錄欄位 UDM 對應 邏輯
msg.requestHeaders.Proxy-Client-IP、msg.requestHeaders.WF-Forwarded-For、msg.requestHeaders.X-Forwarded-For、msg.requestHeaders.wl-proxy-client-ip、msg.hashedUserAgent、msg.transactionId、msg.hashedUsername、msg.dcgShapeFailedOn、ShapeShifterId、eventType、eventId、latRequest、latResponse、latTotal、latRspWait、count、latEccWait additional.fields 從不同欄位建立的標籤合併而來
中介 中介 如果值不為空,則直接複製
說明 metadata.description 直接複製值
target、has_principal_machine metadata.event_type 如果 target != "",則設為 NETWORK_HTTP;如果 has_principal_machine == true,則設為 STATUS_UPDATE;否則設為 GENERIC_EVENT
應用程式 network.application_protocol 值已轉換為大寫
requestMethod、msg.method network.http.method 如果 requestMethod 不為空白,則為該值,否則為 msg.method
requestClientApplication, msg.requestHeaders.User-Agent network.http.parsed_user_agent 如果 requestClientApplication 不為空白,則為該值;否則為 msg.requestHeaders.User-Agent,並轉換為已剖析的使用者代理程式
requestContext, msg.requestHeaders.Referer network.http.referral_url 如果 requestContext 不為空白,則為 requestContext 中的值,否則為 msg.requestHeaders.Referer
msg.sseResponseCode、prCode network.http.response_code 如果 msg.sseResponseCode 不是空白,則為該值,否則為 prCode,並轉換為整數
requestClientApplication, msg.requestHeaders.User-Agent network.http.user_agent 如果 requestClientApplication 不是空白,則為該值,否則為 msg.requestHeaders.User-Agent
requestHeader.x-shape-src-virtual observer.ip 直接複製值
主體 主體 直接複製值
msg.host principal.asset.hostname 直接複製值
src、msg.src、msg.trueClientIP、requestHeader.X-Forwarded-For principal.asset.ip 如果 src 不為空值,則為 src 的值;否則為 msg.src;否則為 msg.trueClientIP;否則為 X-Forwarded-For 中的第一個 IP (如果 != src)
msg.host principal.hostname 直接複製值
src、msg.src、msg.trueClientIP、requestHeader.X-Forwarded-For principal.ip 如果 src 不為空值,則為 src 的值;否則為 msg.src;否則為 msg.trueClientIP;否則為 X-Forwarded-For 中的第一個 IP (如果 != src)
msg.requestHeaders principal.resource.attribute.labels 從 msg.requestHeaders 中的鍵/值組合合併
msg.uri principal.url 直接複製值
security_result security_result 直接複製值
deviceExternalId security_result.about.asset_id 直接複製值
flowLabel、agentLabel、requestHeader.Content-Length、requestHeader.Content-Type、requestHeader.Accept、requestHeader.Accept-Encoding、browserType、accountInfo、requestHeader.Via、asn、tid、ctag、requestHeader.Cache-Control、transactionResult security_result.about.labels 從不同欄位建立的標籤合併而來
act, msg.transactionResult security_result.action 如果 act 符合 PASS 且為 isAttack,則設為 ALLOW,否則設為 UNKNOWN_ACTION;如果 msg.transactionResult == Success,則設為 ALLOW,如果為 Failure,則設為 BLOCK
act, msg.transactionResult security_result.action_details 如果 act 不為空值,則為 act 的值,否則為 msg.transactionResult
嚴重性 security_result.severity 如果為 Error、error、warning,請設為 HIGH;如果符合 critical,請設為 CRITICAL;如果為 notice,請設為 MEDIUM;如果為 information、info、INFO,請設為 LOW
嚴重性 security_result.severity_details 直接複製值
attackCause security_result.threat_name 直接複製值
目標 目標 直接複製值
appName target.application 直接複製值
dst、msg.dst target.asset.ip 如果 dst 不為空值,則為 dst 的值,否則為 msg.dst
dhost target.hostname 直接複製值
dst、msg.dst target.ip 如果 dst 不為空值,則為 dst 的值,否則為 msg.dst
countryName target.location.country_or_region 直接複製值
dpt target.port 已轉換為整數
msg.responseHeaders target.resource.attribute.labels 從 msg.responseHeaders 中的鍵/值組合合併
要求 target.url 直接複製值
requestHeader.X-Forwarded-For intermediary.ip 設為 X-Forwarded-For 陣列中的後續 IP
metadata.product_name 設為「形狀」
metadata.vendor_name 設為「F5」
requestHeaders_id_array.User-Agent network.http.user_agent 從變更記錄對應
requestHeaders_id_array.Referer network.http.referral_url 從變更記錄對應
requestHeaders_id_array.Proxy-Client-IP", "requestHeaders_id_array.WF-Forwarded-For", "requestHeaders_id_array.X-Forwarded-For", and "requestHeaders_id_array.wl-proxy-client-ip additional.fields 從變更記錄對應

變更記錄

查看這個剖析器的變更記錄

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