收集 F5 Distributed Cloud Services 日志

解析器版本:6.0

支持的平台:

本文档介绍了如何使用 Google Cloud Storage V2 将 F5 Distributed Cloud Services 日志注入到 Google Security Operations 中。

F5 Distributed Cloud Services 是一个基于 SaaS 的安全、网络和应用管理平台,可在多云和边缘位置提供分布式云基础架构、应用交付、API 安全和 Web 应用防火墙功能。

准备工作

请确保满足以下前提条件:

  • Google SecOps 实例
  • 启用了 Cloud Storage API 的 Google Cloud 项目
  • 创建和管理 GCS 存储桶的权限
  • 管理 GCS 存储桶的 IAM 政策的权限
  • 对 F5 Distributed Cloud 控制台的特权访问权限
  • 在 F5 Distributed Cloud 中创建全局日志接收器对象的权限

创建 Google Cloud Storage 存储桶

  1. 前往 Google Cloud 控制台。
  2. 选择您的项目或创建一个新项目。
  3. 在导航菜单中,依次前往 Cloud Storage > 存储桶。
  4. 点击创建存储分区。
  5. 提供以下配置详细信息:

    设置 值
    为存储桶命名 输入一个全局唯一的名称(例如 f5-dcs-logs)
    位置类型 根据您的需求进行选择(区域级、双区域级、多区域级)
    位置 选择位置(例如 us-central1)
    存储类别 标准(建议用于频繁访问的日志)
    访问权限控制 均匀(推荐)
    保护工具 可选:启用对象版本控制或保留政策
  6. 点击创建。

配置 F5 Distributed Cloud 以导出到 GCS

将 GCS 存储桶添加到防火墙许可名单

  1. F5 Distributed Cloud 全球日志接收器要求将以下 IP 地址范围添加到防火墙许可名单:

    • 193.16.236.64/29
    • 185.160.8.152/29
  2. 如果您的 GCS 存储桶使用 VPC Service Controls 或防火墙规则,请将这些 IP 范围添加到许可名单。

为 F5 Distributed Cloud 创建 Google Cloud 服务账号

  1. 在 Google Cloud 控制台中,依次前往 IAM 和管理 > 服务账号。
  2. 点击创建服务账号。
  3. 提供以下配置详细信息:

    • 服务账号名称:输入 f5-dcs-log-writer(或一个描述性名称)
    • 服务账号说明:输入 Service account for F5 Distributed Cloud to write logs to GCS
  4. 点击创建并继续。

  5. 在向此服务账号授予对项目的访问权限部分中:

    1. 点击选择角色。
    2. 搜索并选择 Storage Object Admin。
  6. 点击继续。

  7. 点击完成。

创建服务账号密钥

  1. 在服务账号列表中,点击您创建的服务账号(例如 f5-dcs-log-writer)。
  2. 前往密钥标签页。
  3. 依次点击添加密钥> 创建新密钥。
  4. 选择 JSON 作为密钥类型。
  5. 点击创建。
  6. JSON 密钥文件将下载到您的计算机上。
  7. 请妥善保存此文件。您将在后续步骤中用到此名称。

授予对 GCS 存储桶的 IAM 权限

  1. 前往 Cloud Storage > 存储桶。
  2. 点击您的存储桶名称(例如 f5-dcs-logs)。
  3. 前往权限标签页。
  4. 点击授予访问权限。
  5. 提供以下配置详细信息:
    • 添加主账号:输入服务账号电子邮件地址(例如 f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com)
    • 分配角色:选择 Storage Object Admin
  6. 点击保存。

在 F5 Distributed Cloud 控制台中创建 Google Cloud 凭据

  1. 访问 https://<tenant>.console.ves.volterra.io,登录 F5 Distributed Cloud 控制台。
  2. 从首页中选择 Multi-Cloud Network Connect 服务。
  3. 依次前往管理 > 网站管理 > 云凭据。
  4. 点击 Add Cloud Credentials。
  5. 在元数据部分中:
    • 名称:输入一个描述性名称(例如 gcp-chronicle-logs)
    • 说明(可选):输入 Cloud Storage credentials for Google SecOps log export
  6. 在 Cloud 凭据类型部分中,选择 GCP 凭据。
  7. 点击 GCP 凭据字段中的配置。
  8. 在凭据类型下拉菜单中,选择服务账号凭据文件。
  9. 点击 Upload File(上传文件),然后选择您在之前的步骤中下载的 JSON 密钥文件。
  10. 点击应用。
  11. 点击保存并退出。

创建全局日志接收器

  1. 在 F5 Distributed Cloud 控制台中,确保您位于 Multi-Cloud Network Connect 服务中。
  2. 依次前往管理 > 日志管理 > 全局日志接收器。
  3. 点击 Add Global Log Receiver。
  4. 在元数据部分中:

    • 名称:输入一个描述性名称(例如 chronicle-gcs-receiver)
    • 说明(可选):输入 Global log receiver for Google SecOps SIEM
  5. 在日志类型下拉菜单中,选择要导出的日志类型:

    • 请求日志:包含用户、路径、方法、响应代码的 HTTP 请求/响应日志
    • 安全事件:WAF 事件、DDoS 攻击、API 保护事件、Bot 防御事件
    • 审核日志:通过公共 API 进行的配置更改
    • DNS 请求日志:DNS 查询日志
  6. 在日志消息选择下拉菜单中,选择以下选项之一:

    • 选择当前命名空间中的日志:仅发送当前命名空间中的日志
    • 选择所有命名空间中的日志:发送所有命名空间中的日志(建议选择此选项,以便全面了解情况)
    • 选择特定命名空间中的日志:发送指定命名空间中的日志(点击添加项可添加命名空间名称)
  7. 在接收器配置下拉菜单中,选择 GCP Bucket Receiver。

  8. 在 GCP 存储桶名称字段中,输入您的 GCS 存储桶的名称(例如 f5-dcs-logs)。

  9. 在 GCP Cloud Credentials 下拉菜单中,选择您之前创建的云凭据(例如 gcp-chronicle-logs)。

  10. 可选:展开显示高级字段以配置批处理选项:

    • 批处理超时选项:选择超时秒数,然后输入一个值(默认值:300 秒)
    • 批处理最大事件数:选择最大事件数,然后输入介于 32 到 2000 之间的值(不设置表示没有限制)
    • 批次字节数:选择字节数上限,然后输入介于 4096 到 1048576 之间的值(默认值:10485760 字节 / 10 MB)
  11. 点击保存并退出。

测试连接

  1. 在全局日志接收器列表中,找到您创建的接收器(例如 chronicle-gcs-receiver)。
  2. 点击操作列中的三点状图标 (…)。
  3. 选择测试连接。
  4. 等待测试完成。
  5. 系统应会显示一条消息,表明连接成功。

验证 GCS 存储桶中的日志

  1. 在 GCP 控制台中,前往 Cloud Storage > 存储桶。
  2. 点击您的存储桶名称(例如 f5-dcs-logs)。
  3. 验证日志文件是否正在存储桶中创建。
  4. F5 Distributed Cloud 会按以下文件夹结构整理日志:

    YYYY/MM/DD/HH/
    
    • 系统会为每一天创建一个文件夹 (YYYY/MM/DD)
    • 在每个日期文件夹中,系统会为每个小时 (HH) 创建一个子文件夹
    • 每 5 分钟,新的压缩 gzip 文件会写入到小时子文件夹中
    • 文件采用 NDJSON 格式(以换行符分隔的 JSON)
  5. 点击某个 gzip 文件即可下载并检查日志格式。

检索 Google SecOps 服务账号

Google SecOps 使用唯一的服务账号从您的 GCS 存储桶中读取数据。您必须向此服务账号授予对您的存储桶的访问权限。

获取服务账号电子邮件地址

  1. 前往 SIEM 设置 > Feed。
  2. 点击添加新 Feed。
  3. 点击配置单个 Feed。
  4. 在 Feed 名称字段中,输入 Feed 的名称(例如 F5 DCS Logs)。
  5. 选择 Google Cloud Storage V2 作为来源类型。
  6. 选择 F5 Distributed Cloud Services 作为日志类型。
  7. 点击获取服务账号。系统会显示一个唯一的服务账号电子邮件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 复制此电子邮件地址,以便在下一步中使用。

  9. 点击下一步。

  10. 为以下输入参数指定值:

    • 存储桶网址:输入 GCS 存储桶 URI:

      gs://f5-dcs-logs/
      

      将 f5-dcs-logs 替换为您的 GCS 存储桶名称。

    • 来源删除选项:根据您的偏好选择删除选项:

      • 永不:转移后永不删除任何文件(建议用于测试)。
      • 删除已转移的文件:成功转移后删除文件。
      • 删除已转移的文件和空目录:成功转移后删除文件和空目录。

    • 文件存在时间上限:包含在过去指定天数内修改过的文件(默认值为 180 天)

    • 资源命名空间:资源命名空间

    • 注入标签:要应用于此 Feed 中事件的标签

  11. 点击下一步。

  12. 在最终确定界面中查看新的 Feed 配置,然后点击提交。

向 Google SecOps 服务账号授予 IAM 权限

Google SecOps 服务账号需要对您的 GCS 存储桶具有 Storage Object Viewer 角色。

  1. 前往 Cloud Storage > 存储桶。
  2. 点击您的存储桶名称(例如 f5-dcs-logs)。
  3. 前往权限标签页。
  4. 点击授予访问权限。
  5. 提供以下配置详细信息:

    • 添加主账号:粘贴 Google SecOps 服务账号电子邮件地址
    • 分配角色:选择 Storage Object Viewer
  6. 点击保存。

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 使用 RFC 3339、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 如果出现错误/警告,则设置为 HIGH;如果出现严重错误,则设置为 CRITICAL;如果出现通知,则设置为 MEDIUM;如果出现信息/信息,则设置为 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)合并
纬度 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(派生自时间)合并
kubernetes.namespace_name additional.fields 从 namespace_name_label(派生自 kubernetes.namespace_name)合并
src_instance additional.fields 从 src_instance_label(派生自 src_instance)合并
violation_rating additional.fields 从违规评级标签(派生自违规评级)合并
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(派生自 site)合并
cluster_name additional.fields 从 cluster_name_field(源自 cluster_name)合并
网域 principal.administrative_domain 直接复制值
方法 network.http.method 如果值不为空或不为“不适用”,则直接复制该值
命名空间 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 从提取的 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 专业人士的解答。