收集 F5 Distributed Cloud Services 日志

支持的平台:

本文档介绍了如何使用 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. 点击添加云凭据
  5. 元数据部分中:
    • 名称:输入一个描述性名称(例如 gcp-chronicle-logs
    • 说明(可选):输入 Cloud Storage credentials for Google SecOps log export
  6. Cloud 凭据类型部分中,选择 GCP 凭据
  7. 点击 GCP 凭据字段中的配置
  8. 凭据类型下拉菜单中,选择服务账号凭据文件
  9. 点击上传文件,然后选择您在之前的步骤中下载的 JSON 密钥文件。
  10. 点击应用
  11. 点击保存并退出

创建全局日志接收器

  1. F5 Distributed Cloud Console 中,确保您位于 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 接收器

  8. GCP Bucket Name 字段中,输入您的 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 使用 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)合并
纬度 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 如果值不为空或不是 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 从提取的 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”
中介 中介 直接合并

需要更多帮助?获得社区成员和 Google SecOps 专业人士的解答。