收集 Cloudflare WAF 日志

支持的语言:

此解析器可从 Cloudflare Web 应用防火墙 (WAF) JSON 日志中提取字段,并将其转换和映射到 Unified Data Model (UDM)。它会处理各种 Cloudflare 操作,在将输出结构化为 UDM 格式之前,使用元数据和网络信息丰富数据。

准备工作

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

  • Google SecOps 实例。
  • 对 Google Cloud的特权访问权限。
  • Cloudflare 企业版方案。
  • 对 Cloudflare 的特权访问权限。

创建 Google Cloud 存储分区

  1. 登录 Google Cloud 控制台。
  2. 前往 Cloud Storage 存储分区页面。

    进入“存储桶”

  3. 点击创建

  4. 配置存储桶:

    • 名称:输入符合存储桶名称要求的唯一名称(例如 cloudflare-waf)。
    • 选择数据存储位置:选择一个位置。
    • 为数据选择一个存储类别:为存储桶选择默认存储类别,或者选择 Autoclass 以进行自动存储类别管理。
    • 选择如何控制对对象的访问权限:选择强制执行禁止公开访问,然后为存储桶对象选择访问权限控制模型
    • 存储类别:根据您的需求进行选择(例如,标准)。
  5. 点击创建

向 Cloudflare IAM 用户授予存储桶权限

  1. 在 Google Cloud中,依次前往存储 > 浏览器 > 存储分区 > 权限
  2. 添加具有 Storage Object Admin 权限的账号 logpush@cloudflare-data.iam.gserviceaccount.com 。

使用 Cloudflare 界面为 WAF 日志创建 Logpush 作业

  1. 登录 Cloudflare。
  2. 依次前往分析和日志 > 日志推送
  3. 选择创建 Logpush 作业
  4. 选择目标位置中,选择Google Cloud 存储空间
  5. 输入以下目的地详细信息:
    • 存储桶: Google Cloud 存储桶名称
    • 路径:存储容器内的存储分区位置
    • 选择将日志整理到每日子文件夹中
  6. 点击继续
  1. 选择要推送到存储空间的 Security (WAF) 数据集。
  2. 配置 logpush 作业:
    • 输入作业名称
    • 在“如果日志匹配”下方,您可以选择要在日志中包含和/或移除的事件。如需了解详情,请参阅过滤条件。并非所有数据集都提供此选项。
    • 发送以下内容字段中,您可以选择将所有日志推送到存储目标位置,也可以选择性地推送您想要的日志。
  3. 点击提交

设置 Feed

您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:

  • SIEM 设置 > Feed
  • 内容中心 > 内容包

通过“SIEM 设置”>“Feed”设置 Feed

如需配置 Feed,请按以下步骤操作:

  1. 依次前往 SIEM 设置 > Feed
  2. 点击添加新 Feed
  3. 在下一页上,点击配置单个 Feed
  4. Feed 名称字段中,输入 Feed 的名称(例如 Cloudflare WAF 日志)。
  5. 选择 Google Cloud Storage 作为来源类型
  6. 选择 Cloudflare WAF 作为日志类型
  7. 点击获取服务账号
  8. 点击下一步
  9. 为以下输入参数指定值:

    • GCS URI:Cloud Storage 网址。
    • URI is a(URI 是一个):选择目录(包括子目录)
    • 来源删除选项:根据您的偏好设置选择删除选项。
  10. 点击下一步

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

设置来自内容中心的 Feed

为以下字段指定值:

  • GCS URI:Cloud Storage 网址。
  • URI is a(URI 是一个):选择目录(包括子目录)
  • 来源删除选项:根据您的偏好设置选择删除选项。

高级选项

  • Feed 名称:用于标识 Feed 的预填充值。
  • 来源类型:用于将日志收集到 Google SecOps 中的方法。
  • 资源命名空间:与 Feed 关联的命名空间。
  • 提取标签:应用于相应 Feed 中所有事件的标签。

UDM 映射表

日志字段 UDM 映射 逻辑
Action security_result.action_details 原始日志中的 Action 值直接分配给此 UDM 字段。
Action security_result.action 此字段的值派生自原始日志中的 Action 字段。如果 Action 为“allow”,则 UDM 字段设置为 ALLOW。如果 Action 是“challengeSolved”“jschallengeSolved”“managedchallengenoninteractivesolved”或“managedchallengeinteractivesolved”,则 UDM 字段设置为 ALLOW_WITH_MODIFICATION。如果 Action 为“drop”“block”或“connectionclose”,则 UDM 字段设置为 BLOCK。如果 Action 为“challengefailed”或“jschallengefailed”,则 UDM 字段设置为 FAIL。否则,该值会设置为 UNKNOWN_ACTION
ClientASN network.asn 原始日志中的 ClientASN 值在转换为字符串后会直接分配给此 UDM 字段。
ClientASNDescription additional.fields.key 该键静态设置为“ClientASNDescription”。
ClientASNDescription additional.fields.value.string_value 原始日志中的 ClientASNDescription 值直接分配给此 UDM 字段。
ClientCountry principal.location.country_or_region 原始日志中的 ClientCountry 值直接分配给此 UDM 字段。
ClientIP principal.ip 原始日志中的 ClientIP 值直接分配给此 UDM 字段。
ClientRefererHost intermediary.hostname 原始日志中的 ClientRefererHost 值直接分配给此 UDM 字段。
ClientRefererPath network.http.referral_url 原始日志中的 ClientRefererPath 值直接分配给此 UDM 字段。
ClientRequestHost target.hostname 原始日志中的 ClientRequestHost 值直接分配给此 UDM 字段。
ClientRequestMethod network.http.method 原始日志中的 ClientRequestMethod 值直接分配给此 UDM 字段。
ClientRequestPath target.file.full_path 原始日志中的 ClientRequestPath 值直接分配给此 UDM 字段。
ClientRequestProtocol network.application_protocol ClientRequestProtocol 的协议部分(例如,使用 Grok 从“HTTP/1.1”中提取“HTTP”,将其转换为大写,然后分配给此 UDM 字段。
ClientRequestUserAgent network.http.user_agent 原始日志中的 ClientRequestUserAgent 值直接分配给此 UDM 字段。
Datetime metadata.event_timestamp 原始日志中的 Datetime 值会解析为 RFC 3339 时间戳,并分配给此 UDM 字段。
EdgeColoCode additional.fields.key 该键静态设置为“EdgeColoCode”。
EdgeColoCode additional.fields.value.string_value 原始日志中的 EdgeColoCode 值直接分配给此 UDM 字段。
EdgeResponseStatus network.http.response_code 原始日志中的 EdgeResponseStatus 值直接分配给此 UDM 字段并转换为整数。
Kind metadata.product_event_type 原始日志中的 Kind 值直接分配给此 UDM 字段。
Metadata.filter target.resource.attribute.labels.value 原始日志中的 Metadata.filter 值会分配给 target.resource.attribute.labels 中标签的 value 字段。此标签的 key 静态设置为“元数据过滤条件”。
Metadata.type target.resource.attribute.labels.value 原始日志中的 Metadata.type 值会分配给 target.resource.attribute.labels 中标签的 value 字段。相应标签的 key 静态设置为“元数据类型”。此字段的值是根据 ClientIPClientRequestHostapp_protocol 的存在情况和值派生出来的。如需了解具体逻辑,请参阅解析器代码。静态设置为“Cloudflare”。静态设置为“Cloudflare 日志聚合器”。静态设置为“CLOUDFLARE_WAF”。
RayID metadata.product_log_id 原始日志中的 RayID 值直接分配给此 UDM 字段。
RuleID security_result.rule_id 原始日志中的 RuleID 值直接分配给此 UDM 字段。
Source security_result.rule_name 原始日志中的 Source 值直接分配给此 UDM 字段。
timestamp metadata.event_timestampevents.timestamp 原始日志中的 timestamp 值会直接分配给这些 UDM 字段。

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