收集 Cloudflare WAF 日志
支持的平台:
Google SecOps
SIEM
此解析器会从 Cloudflare Web 应用防火墙 (WAF) JSON 日志中提取字段,并将其转换并映射到 Unified Data Model (UDM)。它会处理各种 Cloudflare 操作,使用元数据和网络信息丰富数据,然后将输出结构化为 UDM 格式。
准备工作
- 确保您拥有 Google SecOps 实例。
- 确保您拥有对 Google Cloud的特权访问权限。
- 确保您已订阅 Cloudflare 企业版方案。
- 确保您拥有对 Cloudflare 的超级用户访问权限。
创建 Google Cloud 存储分区
- 登录 Google Cloud 控制台
前往 Cloud Storage 存储分区页面。
点击创建。
配置存储分区:
- 名称:输入符合存储分区名称要求的唯一名称(例如 cloudflare-waf)。
- 选择数据存储位置:选择一个位置。
- 为数据选择一个存储类别:为存储分区选择默认存储类别,或者选择 Autoclass 以自动管理存储类别。
- 选择如何控制对象的访问权限:选择否以强制执行禁止公开访问,然后为存储分区对象选择访问权限控制模型。
- 存储类别:根据您的需求进行选择(例如标准)。
点击创建。
向 Cloudflare IAM 用户授予存储分区权限
- 在 Google Cloud中,依次前往存储 > 浏览器 > 存储分区 > 权限。
- 为账号 logpush@cloudflare-data.iam.gserviceaccount.com 授予 Storage Object Admin 权限。
使用 Cloudflare 界面为 WAF 日志创建 Logpush 作业
- 登录 Cloudflare。
- 依次前往分析和日志 > Logpush。
- 选择创建 Logpush 作业。
- 在选择目标位置中,选择 Google Cloud Storage。
- 输入以下目的地详细信息:
- 存储分区: Google Cloud 存储分区名称
- 路径:存储容器中的存储分区位置
- 选择将日志整理到每日子文件夹中
- 点击继续。
- 选择要推送到存储空间的安全性 (WAF) 数据集。
- 配置 logpush 作业:
- 输入作业名称。
- 在“如果日志匹配”下,您可以选择要包含和/或从日志中移除的事件。如需了解详情,请参阅过滤条件。并非所有数据集都提供此选项。
- 在发送以下日志字段中,您可以选择将所有日志推送到存储目的地,也可以选择要推送的日志。
- 点击提交。
在 Google SecOps 中配置 Feed 以提取 Cloudflare WAF 日志
- 依次前往 SIEM 设置 > Feed。
- 点击新增。
- 在 Feed 名称字段中,输入 Feed 的名称(例如 Cloudflare WAF 日志)。
- 选择 Google Cloud Storage 作为来源类型。
- 选择 Cloudflare WAF 作为日志类型。
- 点击获取服务账号。
- 点击下一步。
为以下输入参数指定值:
- GCS URI:Cloud Storage 网址。
- URI 是:选择包含子目录的目录。
- 来源删除选项:根据您的偏好选择删除选项。
- 资源命名空间:资源命名空间。
- 提取标签:要应用于此 Feed 中的事件的标签。
点击下一步。
在最终确定界面中查看新的 Feed 配置,然后点击提交。
UDM 映射表
日志字段 | UDM 映射 | 逻辑 |
---|---|---|
Action |
security_result.action_details |
原始日志中的 Action 值会直接分配给此 UDM 字段。 |
Action |
security_result.action |
此字段的值派生自原始日志中的 Action 字段。如果 Action 为“允许”,则 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 的协议部分(例如“HTTP/1.1”中的“HTTP”)使用 grok 提取,转换为大写,然后分配给此 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 已静态设置为“元数据类型”。此字段的值是根据 ClientIP 、ClientRequestHost 和 app_protocol 的存在性和值派生的。如需了解具体逻辑,请参阅解析器代码。将静态值设为“Cloudflare”。将静态值设为“Cloudflare Log Aggregator”。将静态值设为“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_timestamp ,events.timestamp |
原始日志中的 timestamp 值会直接分配给这些 UDM 字段。 |
变化
2024-08-08
- 从“ClientRequestHost”和“ClientRequestURI”中提取数据,将其合并,并将结果映射到“target.url”。
2023-08-30
- 初始化了字段“ClientRequestPath”。
2023-02-02
- 在将“security_result”值合并到事件之前对其进行了验证。
2022-09-16
- 将“Action”字段映射到了“security_result.action_details”。
- 当操作包含“challengeSolved”“jschallengeSolved”“managedchallengenoninteractivesolved”“managedchallengeinteractivesolved”时,将“security_result.action”映射到“ALLOW_WITH_MODIFICATION”。
- 将“security_result.action”映射到“BLOCK”,前提是操作包含“drop”“block”“connectionclose”。
- 将“security_result.action”映射到“FAIL”,前提是操作包含“challengefailed”“jschallengefailed”。
2022-07-25
- 新创建的解析器
需要更多帮助?向社区成员和 Google SecOps 专业人士寻求解答。