收集 F5 Distributed Cloud Services 服務記錄
剖析器版本:6.0
本文說明如何使用 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 的權限
- 具備管理 GCS bucket IAM 政策的權限
- F5 Distributed Cloud 控制台的特殊存取權
- 在 F5 Distributed Cloud 建立全域記錄接收器物件的權限
建立 Google Cloud Storage bucket
- 前往 Google Cloud 控制台。
- 選取專案或建立新專案。
- 在導覽選單中,依序前往「Cloud Storage」>「Bucket」。
- 按一下「建立值區」。
提供下列設定詳細資料:
設定 值 為 bucket 命名 輸入全域不重複的名稱 (例如 f5-dcs-logs)位置類型 請根據需求選擇 (單一區域、雙區域、多區域) 位置 選取位置 (例如 us-central1)儲存空間級別 標準 (建議用於經常存取的記錄) 存取控管 統一 (建議) 保護工具 選用:啟用物件版本管理或資料保留政策 點選「建立」。
設定 F5 Distributed Cloud,將資料匯出至 GCS
將 GCS bucket 新增至防火牆許可清單
您必須將下列 IP 位址範圍新增至防火牆許可清單,F5 Distributed Cloud Global Log Receiver 才能運作:
193.16.236.64/29185.160.8.152/29
如果 GCS bucket 使用 VPC Service Controls 或防火牆規則,請將這些 IP 範圍加入許可清單。
為 F5 Distributed Cloud 建立 Google Cloud 服務帳戶
- 在 Google Cloud 控制台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)。
- 按一下「Create Service Account」(建立服務帳戶)。
提供下列設定詳細資料:
- 服務帳戶名稱:輸入
f5-dcs-log-writer(或描述性名稱) - 服務帳戶說明:輸入
Service account for F5 Distributed Cloud to write logs to GCS
- 服務帳戶名稱:輸入
按一下「建立並繼續」。
在「將專案存取權授予這個服務帳戶」部分:
- 按一下「請選擇角色」。
- 搜尋並選取「Storage 物件管理員」。
按一下「繼續」。
按一下「完成」。
建立服務帳戶金鑰
- 在「Service Accounts」(服務帳戶) 清單中,按一下您建立的服務帳戶 (例如
f5-dcs-log-writer)。 - 前往「金鑰」分頁。
- 依序點選「新增金鑰」>「建立新的金鑰」。
- 選取「JSON」做為金鑰類型。
- 點選「建立」。
- JSON 金鑰檔案會下載到您的電腦。
- 請妥善保存這個檔案。後續步驟會用到。
授予 GCS bucket 的 IAM 權限
- 依序前往「Cloud Storage」>「Bucket」。
- 點選 bucket 名稱 (例如
f5-dcs-logs)。 - 前往「權限」分頁。
- 按一下「授予存取權」。
- 提供下列設定詳細資料:
- 新增主體:輸入服務帳戶電子郵件地址 (例如
f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com) - 指派角色:選取「Storage 物件管理員」
- 新增主體:輸入服務帳戶電子郵件地址 (例如
- 按一下「儲存」。
在 F5 Distributed Cloud 控制台建立 Google Cloud 憑證
- 登入 F5 Distributed Cloud 控制台 (
https://<tenant>.console.ves.volterra.io)。 - 在首頁選取「Multi-Cloud Network Connect」服務。
- 依序前往「管理」>「網站管理」>「雲端憑證」。
- 按一下「Add Cloud Credentials」。
- 在「Metadata」部分:
- 名稱:輸入描述性名稱 (例如
gcp-chronicle-logs) - 說明 (選填):輸入
Cloud Storage credentials for Google SecOps log export
- 名稱:輸入描述性名稱 (例如
- 在「Cloud Credentials Type」(雲端憑證類型) 部分,選取「GCP Credentials」(GCP 憑證)。
- 按一下「GCP Credentials」欄位中的「Configure」。
- 在「Credential Type」(憑證類型) 下拉式選單中,選取「Service Account Credentials File」(服務帳戶憑證檔案)。
- 按一下「Upload File」,然後選取您在先前步驟中下載的 JSON 金鑰檔案。
- 按一下「套用」。
- 按一下「儲存並退出」。
建立全域記錄接收器
- 在 F5 Distributed Cloud 控制台中,確認您位於「多雲端網路連線」服務。
- 依序前往「Manage」>「Log Management」>「Global Log Receiver」。
- 按一下「Add Global Log Receiver」(新增全域記錄接收器)。
在「Metadata」(中繼資料) 部分:
- 名稱:輸入描述性名稱 (例如
chronicle-gcs-receiver) - 說明 (選填):輸入
Global log receiver for Google SecOps SIEM
- 名稱:輸入描述性名稱 (例如
在「Log Type」(記錄類型) 下拉式選單中,選取要匯出的記錄類型:
- 要求記錄:HTTP 要求/回應記錄,包含使用者、路徑、方法、回應代碼
- 安全性事件:WAF 事件、DDoS、API 防護、Bot Defense 事件
- 稽核記錄:透過公開 API 變更設定
- DNS 要求記錄:DNS 查詢記錄
在「Log Message Selection」(記錄訊息選取) 下拉式選單中,選取下列其中一項:
- 選取目前命名空間的記錄:僅傳送目前命名空間的記錄
- 選取所有命名空間的記錄:傳送所有命名空間的記錄 (建議做法,可全面掌握情況)
- 選取特定命名空間中的記錄:傳送指定命名空間中的記錄 (按一下「新增項目」即可新增命名空間名稱)
在「Receiver Configuration」下拉式選單中,選取「GCP Bucket Receiver」。
在「GCP Bucket Name」(GCP bucket 名稱) 欄位中,輸入 GCS bucket 的名稱 (例如
f5-dcs-logs)。在「GCP Cloud Credentials」(GCP 雲端憑證) 下拉式選單中,選取先前建立的雲端憑證 (例如
gcp-chronicle-logs)。選用:展開「Show Advanced Fields」,設定批次選項:
- 批次逾時選項:選取「逾時秒數」並輸入值 (預設值:
300秒) - 批次事件數量上限:選取「事件數量上限」,然後輸入介於 32 到 2000 之間的值 (如不設限,請留空)
- 批次位元組數:選取「位元組數上限」,然後輸入介於 4096 和 1048576 之間的值 (預設值:
10485760位元組/10 MB)
- 批次逾時選項:選取「逾時秒數」並輸入值 (預設值:
按一下「儲存並退出」。
測試連線
- 在「Global Log Receiver」(全域記錄接收器) 清單中,找出您建立的接收器 (例如
chronicle-gcs-receiver)。 - 按一下「動作」欄中的三點圖示 (...)。
- 選取「測試連線」。
- 等待測試完成。
畫面上應會顯示連線成功的訊息。
驗證 GCS bucket 中的記錄
- 在 GCP 控制台中,依序前往「Cloud Storage」>「Bucket」。
- 點選 bucket 名稱 (例如
f5-dcs-logs)。 - 確認 bucket 中是否已建立記錄檔。
F5 Distributed Cloud 會按照下列資料夾結構整理記錄:
YYYY/MM/DD/HH/- 系統會為每天建立一個資料夾 (YYYY/MM/DD)
- 在每個日期資料夾中,系統會為每小時 (HH) 建立一個子資料夾
- 每 5 分鐘,新的壓縮 gzip 檔案會寫入每小時子資料夾
- 檔案格式為 NDJSON (以換行符號分隔的 JSON)
點選 gzip 檔案,下載並檢查記錄格式。
擷取 Google SecOps 服務帳戶
Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。
取得服務帳戶電子郵件地址
- 依序前往「設定」>「資料管理」>「動態饋給」。如果使用的是 SIEM 專用平台,請依序前往「設定」>「動態饋給」。
- 按一下「新增動態饋給」。
- 按一下「設定單一動態饋給」。
- 在「Feed name」(動態饋給名稱) 欄位中,輸入動態饋給名稱 (例如
F5 DCS Logs)。 - 選取「Google Cloud Storage V2」做為「來源類型」。
- 選取「F5 Distributed Cloud Services」做為「Log type」(記錄類型)。
按一下「Get Service Account」。系統會顯示專屬服務帳戶電子郵件地址,例如:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com複製這個電子郵件地址,下一個步驟將會用到。
點選「下一步」。
指定下列輸入參數的值:
Storage bucket URL:輸入 GCS bucket URI:
gs://f5-dcs-logs/將
f5-dcs-logs替換為 GCS bucket 名稱。來源刪除選項:根據偏好選取刪除選項:
- Never:轉移後一律不刪除任何檔案 (建議用於測試)。
- 刪除已轉移的檔案:在成功轉移後刪除檔案。
刪除已轉移的檔案和空白目錄:成功轉移後,刪除檔案和空白目錄。
檔案存在時間上限:納入過去幾天內修改過的檔案 (預設為 180 天)
資產命名空間:資產命名空間
擷取標籤:要套用至這個動態饋給事件的標籤
點選「下一步」。
在「完成」畫面中檢查新的新聞動態消息設定,然後按一下「提交」。
將 IAM 權限授予 Google SecOps 服務帳戶
Google SecOps 服務帳戶必須具備 GCS bucket 的「Storage 物件檢視者」角色。
- 依序前往「Cloud Storage」>「Bucket」。
- 點選 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 | Merged from bot_info_name_label (derived from bot_info.name) |
| bot_info.type | security_result.detection_fields | Merged from bot_info_type_label (derived from bot_info.type) |
| 時間戳記 | @timestamp | 使用日期篩選器剖析,格式為 RFC 3339、UNIX、ISO8601 |
| visitor_id | security_result.detection_fields | 從 visitor_id_label (衍生自 visitor_id) 合併 |
| 標記 | security_result.detection_fields | 從 tag_label 合併 (衍生自 tag) |
| 動作 | security_result.action | 如果與允許標籤相符,請設為「ALLOW」;如果與拒絕標籤相符,請設為「BLOCK」 |
| 嚴重性 | security_result.severity | 如果發生錯誤/警告,請設為「HIGH」;如果是重大錯誤,請設為「CRITICAL」;如果是通知,請設為「MEDIUM」;如果是資訊/info,請設為「LOW」 |
| 嚴重性 | 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 | Merged from about_req_params (derived from req_params) |
| as_number | additional.fields | Merged from about_as_number (converted to string from 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 | Merged from violation_rating_label (derived from 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 | Merged from recommended_action_label (derived from 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 合併 (衍生自 site) |
| cluster_name | additional.fields | 從 cluster_name_field (衍生自 cluster_name) 合併 |
| 網域 | principal.administrative_domain | 直接複製值 |
| 方法 | network.http.method | 如果不是空白或不適用,則直接複製值 |
| 命名空間 | target.namespace | 直接複製值 |
| 城市 | 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 | 從擷取的 user_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」 | |
| 中介 | 中介 | 直接合併 |
rsp_size |
event.idm.read_only_udm.network.received_bytes |
從變更記錄對應 |
dst |
event.idm.read_only_udm.target.ip 和 event.idm.read_only_udm.target.asset.ip |
從變更記錄對應 |
has_sec_event |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
app |
event.idm.read_only_udm.target.application |
從變更記錄對應 |
node_id |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
sample_rate |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
time_to_first_downstream_tx_byte |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
time_to_first_upstream_rx_byte |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
time_to_first_upstream_tx_byte |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
time_to_last_downstream_tx_byte |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
time_to_last_rx_byte |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
time_to_last_upstream_rx_byte |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
time_to_last_upstream_tx_byte |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
timeseries_enabled |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
sni |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
terminated_time |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
rtt_downstream_seconds |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
rtt_upstream_seconds |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
rsp_code_details |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
authority |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
connected_time |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
req_id |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
proxy_type |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
vh_type |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
dst_instance |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
lb_port |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
mtls |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
ja4_tls_fingerprint |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
duration_with_data_tx_delay |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
dst_site |
event.idm.read_only_udm.additional.fields |
從變更記錄對應 |
protocol and scheme |
event.idm.read_only_udm.network.application_protocol |
從變更記錄對應 |
referer |
event.idm.read_only_udm.network.http.referral_url |
從變更記錄對應 |
tls_cipher_suite |
event.idm.read_only_udm.network.tls.cipher |
從變更記錄對應 |
tls_version |
event.idm.read_only_udm.network.tls.version |
從變更記錄對應 |
user_agent |
event.idm.read_only_udm.network.http.user_agent |
從變更記錄對應 |
user_agent |
event.idm.read_only_udm.network.http.parsed_user_agent |
從變更記錄對應 |
browser_type |
event.idm.read_only_udm.principal.browser.browser_type |
從變更記錄對應 |
content-type |
event.idm.read_only_udm.principal.process.file.mime_type |
從變更記錄對應 |
response_flags |
security_result.detection_fields |
從變更記錄對應 |
original_authority |
event.idm.read_only_udm.target.administrative_domain |
從變更記錄對應 |
country |
event.idm.read_only_udm.principal.location.country_or_region |
從變更記錄對應 |
變更記錄
還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求解答。