收集 F5 Distributed Cloud Services 記錄
本文說明如何使用 Google Cloud Storage V2,將 F5 Distributed Cloud Services 記錄檔擷取至 Google Security Operations。
F5 Distributed Cloud Services 是以 SaaS 為基礎的安全、網路和應用程式管理平台,可在多雲端和邊緣位置提供分散式雲端基礎架構、應用程式傳送、API 安全性和網頁應用程式防火牆功能。
事前準備
請確認您已完成下列事前準備事項:
- Google SecOps 執行個體
- 已啟用 Cloud Storage API 的 Google Cloud 專案
- 建立及管理 GCS bucket 的權限
- 管理 Google Cloud Storage 值區 IAM 政策的權限
- F5 Distributed Cloud 控制台的特殊存取權
- 在 F5 Distributed Cloud 中建立全域記錄接收器物件的權限
建立 Google Cloud Storage 值區
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
請提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 f5-dcs-logs)位置類型 根據需求選擇 (區域、雙區域、多區域) 位置 選取地點 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或保留政策 點選「建立」。
設定 F5 Distributed Cloud,將資料匯出至 GCS
將 GCS bucket 新增至防火牆許可清單
如要使用 F5 Distributed Cloud Global Log Receiver,請將下列 IP 位址範圍加入防火牆許可清單:
193.16.236.64/29185.160.8.152/29
如果 GCS 儲存空間使用 VPC Service Controls 或防火牆規則,請將這些 IP 範圍加入許可清單。
為 F5 Distributed Cloud 建立 Google Cloud 服務帳戶
- 在 Google Cloud 控制台中,依序前往「IAM 與管理」>「服務帳戶」。
- 按一下「Create Service Account」(建立服務帳戶)。
請提供下列設定詳細資料:
- 服務帳戶名稱:輸入
f5-dcs-log-writer(或說明性名稱) - 服務帳戶說明:輸入
Service account for F5 Distributed Cloud to write logs to GCS
- 服務帳戶名稱:輸入
按一下「建立並繼續」。
在「將專案存取權授予這個服務帳戶」部分:
- 按一下「選擇角色」。
- 搜尋並選取「Storage 物件管理員」。
按一下「繼續」。
按一下 [完成]。
建立服務帳戶金鑰
- 在「服務帳戶」清單中,按一下您建立的服務帳戶 (例如
f5-dcs-log-writer)。 - 前往「金鑰」分頁。
- 依序點選「新增金鑰」>「建立新的金鑰」。
- 選取「JSON」做為金鑰類型。
- 點選「建立」。
- 系統會將 JSON 金鑰檔案下載至您的電腦。
- 請妥善儲存這個檔案。後續步驟會用到。
授予 GCS 值區的 IAM 權限
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱 (例如
f5-dcs-logs)。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
- 請提供下列設定詳細資料:
- 新增主體:輸入服務帳戶電子郵件地址 (例如
f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com) - 指派角色:選取「Storage 物件管理員」
- 新增主體:輸入服務帳戶電子郵件地址 (例如
- 按一下 [儲存]。
在 F5 Distributed Cloud 控制台中建立 Google Cloud 憑證
- 前往
https://<tenant>.console.ves.volterra.io,登入 F5 Distributed Cloud 控制台。 - 在首頁選取「Multi-Cloud Network Connect」服務。
- 依序前往「管理」>「網站管理」>「雲端憑證」。
- 按一下「新增雲端憑證」。
- 在「Metadata」部分:
- 名稱:輸入描述性名稱 (例如
gcp-chronicle-logs) - 說明 (選填):輸入
Cloud Storage credentials for Google SecOps log export
- 名稱:輸入描述性名稱 (例如
- 在「Cloud Credentials Type」(雲端憑證類型) 區段中,選取「GCP Credentials」(GCP 憑證)。
- 按一下「GCP 憑證」欄位中的「設定」。
- 在「憑證類型」下拉式選單中,選取「服務帳戶憑證檔案」。
- 按一下「上傳檔案」,然後選取您在先前步驟下載的 JSON 金鑰檔案。
- 按一下「套用」。
- 按一下「儲存並結束」。
建立全域記錄接收器
- 在 F5 Distributed Cloud Console 中,確認您位於 Multi-Cloud Network Connect 服務。
- 依序前往「管理」>「記錄管理」>「全域記錄接收器」。
- 按一下「新增全域記錄接收器」。
在「Metadata」(中繼資料) 區段中:
- 名稱:輸入描述性名稱 (例如
chronicle-gcs-receiver) - 說明 (選填):輸入
Global log receiver for Google SecOps SIEM
- 名稱:輸入描述性名稱 (例如
在「記錄類型」下拉式選單中,選取要匯出的記錄類型:
- 要求記錄:HTTP 要求/回應記錄,包含使用者、路徑、方法、回應代碼
- 安全事件:WAF 事件、DDoS、API 防護、機器人防禦事件
- 稽核記錄:透過公用 API 進行的設定變更
- DNS 請求記錄:DNS 查詢記錄
在「記錄訊息選取」下拉式選單中,選取下列其中一個選項:
- 選取目前命名空間的記錄:只傳送目前命名空間的記錄
- 選取所有命名空間的記錄:傳送所有命名空間的記錄 (建議使用,可全面掌握情況)
- 選取特定命名空間中的記錄:傳送指定命名空間中的記錄 (按一下「新增項目」即可新增命名空間名稱)
在「接收器設定」下拉式選單中,選取「GCP Bucket 接收器」。
在「GCP Bucket Name」欄位中,輸入 GCS bucket 的名稱 (例如
f5-dcs-logs)。在「GCP Cloud Credentials」下拉式選單中,選取您先前建立的雲端憑證 (例如
gcp-chronicle-logs)。選用:展開「顯示進階欄位」,設定批次選項:
- 批次逾時選項:選取「逾時秒數」並輸入值 (預設值:
300秒) - 批次最多事件數:選取「最多事件數」,然後輸入介於 32 到 2000 之間的值 (如未設定,則無限制)
- 批次位元組:選取「最大位元組」,然後輸入介於 4096 和 1048576 之間的值 (預設值:
10485760個位元組 / 10 MB)
- 批次逾時選項:選取「逾時秒數」並輸入值 (預設值:
按一下「儲存並結束」。
測試連線
- 在「全域記錄接收器」清單中,找到您建立的接收器 (例如
chronicle-gcs-receiver)。 - 按一下「動作」欄中的三點圖示 (...)。
- 選取「測試連線」。
- 等待測試完成。
畫面上應會顯示連線成功的訊息。
驗證 GCS bucket 中的記錄
- 前往 GCP 控制台的「Cloud Storage」>「Buckets」頁面。
- 按一下 bucket 名稱 (例如
f5-dcs-logs)。 - 確認系統是否在值區中建立記錄檔。
F5 Distributed Cloud 會依下列資料夾結構整理記錄:
YYYY/MM/DD/HH/- 系統會為每天建立一個資料夾 (YYYY/MM/DD)
- 在每個日期資料夾中,系統會為每個小時 (HH) 建立子資料夾
- 每 5 分鐘,新的 gzip 壓縮檔會寫入每小時的子資料夾
- 檔案為 NDJSON 格式 (以換行符號分隔的 JSON)
按一下 gzip 檔案即可下載並檢查記錄格式。
擷取 Google SecOps 服務帳戶
Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。
取得服務帳戶電子郵件地址
- 依序前往「SIEM 設定」>「動態饋給」。
- 按一下「新增動態消息」。
- 按一下「設定單一動態饋給」。
- 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如
F5 DCS Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「F5 Distributed Cloud Services」做為「記錄類型」。
按一下「取得服務帳戶」。系統會顯示不重複的服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,以便在下一步中使用。
點選「下一步」。
指定下列輸入參數的值:
儲存空間 bucket URL:輸入 GCS bucket URI:
gs://f5-dcs-logs/請將
f5-dcs-logs替換為您的 GCS bucket 名稱。來源刪除選項:根據偏好設定選取刪除選項:
- 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
檔案存在時間上限:包含在過去天數內修改的檔案 (預設為 180 天)
資產命名空間:資產命名空間
擷取標籤:要套用至這個動態饋給事件的標籤
點選「下一步」。
在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。
- 依序前往「Cloud Storage」>「Buckets」。
- 按一下 bucket 名稱 (例如
f5-dcs-logs)。 - 前往「權限」分頁標籤。
- 按一下「授予存取權」。
請提供下列設定詳細資料:
- 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址
- 指派角色:選取「Storage 物件檢視者」
按一下 [儲存]。
UDM 對應表
| 記錄欄位 | UDM 對應 | 邏輯 |
|---|---|---|
| _id | metadata.product_log_id | 直接複製值 |
| src | principal.namespace | 直接複製值 |
| kubernetes_labels_app | target.resource.attribute.labels | 從 app_label 合併 (衍生自 kubernetes_labels_app) |
| kubernetes_host | target.hostname | 直接複製值 |
| kubernetes_container_name | target.resource.product_object_id | 直接複製值 |
| bot_info.classification | security_result.detection_fields | 從 bot_info_classification_label 合併 (衍生自 bot_info.classification) |
| bot_info.name | security_result.detection_fields | 從 bot_info_name_label 合併 (衍生自 bot_info.name) |
| bot_info.type | security_result.detection_fields | 從 bot_info_type_label 合併 (衍生自 bot_info.type) |
| 時間戳記 | @timestamp | 使用日期篩選器 (RFC3339、UNIX、ISO8601) 剖析 |
| visitor_id | security_result.detection_fields | 從 visitor_id_label (衍生自 visitor_id) 合併 |
| 標記 | security_result.detection_fields | 從 tag_label 合併 (衍生自代碼) |
| 動作 | security_result.action | 如果相符項目允許,請設為 ALLOW;如果相符項目拒絕,請設為 BLOCK |
| 嚴重性 | security_result.severity | 如果發生錯誤/警告,請設為「高」;如果發生重大問題,請設為「重大」;如果只是通知,請設為「中」;如果是資訊/資訊,請設為「低」 |
| 嚴重性 | security_result.severity_details | 直接複製值 |
| api_endpoint | target.labels | 從 api_endpoint_label 合併 (衍生自 api_endpoint) |
| app_firewall_name | principal.process.command_line | 直接複製值 |
| app_type | security_result.detection_fields | 從 about_app_type (衍生自 app_type) 合併 |
| as_org | security_result.detection_fields | 從 about_as_org 合併 (衍生自 as_org) |
| asn | security_result.detection_fields | 從 about_asn 合併 (衍生自 asn) |
| kubernetes.pod_id | security_result.detection_fields | 從 about_pod_id (衍生自 kubernetes.pod_id) 合併 |
| kubernetes.pod_name | security_result.detection_fields | 從 about_pod_name 合併 (衍生自 kubernetes.pod_name) |
| latitude | principal.location.region_latitude | 已轉換為浮點數 |
| longitude | principal.location.region_longitude | 已轉換為浮點數 |
| req_params | additional.fields | 從 about_req_params (衍生自 req_params) 合併 |
| as_number | additional.fields | 從 about_as_number 合併 (從 as_number 轉換為字串) |
| x_forwarded_for | intermediary.ip | 如果 IP 有效,則會合併 |
| x_forwarded_for | security_result.about.resource.attribute.labels | 如果不是 IP,則從 x_forwarded_for_label 合併 |
| policy_hit.malicious_user_mitigate_action | security_result.detection_fields | 從 malicious_user_label 合併 (衍生自 policy_hit.malicious_user_mitigate_action) |
| policy_hit.policy | security_result.about.resource.attribute.labels | 從 policy_label 合併 (衍生自 policy_hit.policy) |
| policy_hit.policy_namespace | additional.fields | 從 policy_namespace_label 合併 (衍生自 policy_hit.policy_namespace) |
| policy_hit.policy_rule | security_result.rule_name | 直接複製值 |
| policy_hit.policy_rule_description | security_result.description | 直接複製值 |
| policy_hit.policy_set | target.resource.name | 直接複製值 |
| policy_hit.result | additional.fields | 從 result_label 合併 (衍生自 policy_hit.result) |
| vhost_id | security_result.detection_fields | 從 vhostlabel 合併 (衍生自 vhost_id) |
| messageid | security_result.detection_fields | 從 messageid_label 合併 (衍生自 messageid) |
| sec_event_name | security_result.detection_fields | 從 sec_event_name_label (衍生自 sec_event_name) 合併 |
| sec_event_type | security_result.detection_fields | 從 sec_event_type_label 合併 (衍生自 sec_event_type) |
| vh_name | security_result.detection_fields | 從 vhost_name_label (衍生自 vh_name) 合併 |
| tls_fingerprint | security_result.detection_fields | 從 tls_fingerprint_label 合併 (衍生自 tls_fingerprint) |
| 時間 | additional.fields | 從 time_label (衍生自 time) 合併 |
| kubernetes.namespace_name | additional.fields | 從 namespace_name_label 合併 (衍生自 kubernetes.namespace_name) |
| src_instance | additional.fields | 從 src_instance_label (衍生自 src_instance) 合併 |
| violation_rating | additional.fields | 從 violation_rating_label 合併 (衍生自 violation_rating) |
| req_size | additional.fields | 從 req_size_label 合併 (從 req_size 轉換為字串) |
| rsp_code | additional.fields | 從 rsp_code_label 合併 (從 rsp_code 轉換為字串) |
| rsp_code_class | additional.fields | 從 rsp_code_class_label 合併 (從 rsp_code_class 轉換為字串) |
| rsp_size | additional.fields | 從 rsp_size_label 合併 (從 rsp_size 轉換為字串) |
| original_path | additional.fields | 從 original_path_label 合併 (衍生自 original_path) |
| req_path | target.url | 直接複製值 |
| req_headers_size | additional.fields | 從 req_headers_size_label 合併 (衍生自 req_headers_size) |
| recommended_action | additional.fields | 從 recommended_action_label (衍生自 recommended_action) 合併 |
| enforcement_mode | additional.fields | 從 enforcement_mode_label 合併 (衍生自 enforcement_mode) |
| src_ip | principal.ip、principal.asset.ip | 如果符合 IPv4 規則運算式,則會合併 |
| 主機 | principal.ip、principal.asset.ip | 如果符合 IPv4 規則運算式,則會合併 |
| 主機名稱 | principal.hostname、principal.asset.hostname | 如果值不是空白或「-」,則直接複製值 |
| http_version | network.application_protocol_version | 直接複製值 |
| http_version | network.application_protocol | 如果包含 HTTP,則設為 HTTP;如果包含 HTTPS,則設為 HTTPS |
| 網路 | principal.nat_ip | 如果符合 IPv4 規則運算式,則會合併 |
| dst_ip | target.ip、target.asset.ip | 如果符合 IPv4 規則運算式,則會合併 |
| dst_port | target.port | 已轉換為整數 |
| src_port | principal.port | 已轉換為整數 |
| src_site | additional.fields | 從 src_site_field 合併 (衍生自 src_site) |
| 網站 | additional.fields | 從 site_field (衍生自網站) 合併 |
| cluster_name | additional.fields | 從 cluster_name_field 合併 (衍生自 cluster_name) |
| 網域 | principal.administrative_domain | 直接複製值 |
| 方法 | network.http.method | 如果值不是空白或 N/A,則直接複製 |
| 命名空間 | target.namespace | 直接複製值 |
| city | principal.location.city | 直接複製值 |
| 串流 | security_result.detection_fields | 從 stream_label 合併 (衍生自 stream) |
| 區域 | principal.location.country_or_region | 直接複製值 |
| 使用者 | principal.user.userid | 使用 user_id 的 grok 模式從使用者擷取 |
| user_ip | target.ip、target.asset.ip | 從擷取的使用者 IP 合併 |
| Cookie | additional.fields | 從 Cookie 合併 (衍生自 req_headers 中的 Cookie) |
| X-F5-Request-Id | security_result.detection_fields | 從 x_f5_request_id 合併 (衍生自 req_headers 中的 X-F5-Request-Id) |
| X-Request-Id | security_result.detection_fields | 從 request_id 合併 (衍生自 req_headers 中的 X-Request-Id) |
| security_result | security_result | 直接合併 |
| has_network、has_principal、has_target | metadata.event_type | 如果全為 true,則設為 NETWORK_CONNECTION;如果 has_principal 為 true,則設為 STATUS_UPDATE;否則設為 GENERIC_EVENT |
| metadata.vendor_name | 設為「F5_DCS」 | |
| metadata.product_name | 設為「F5 DCS」 | |
| 中介 | 中介 | 直接合併 |
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。