收集 Cloudflare 日志

支持的语言:

本文档介绍了如何使用 Webhook(HTTP 目标)或 Google Cloud Storage 将 Cloudflare 日志注入到 Google Security Operations。Cloudflare 会生成 DNS、HTTP、审核、零信任和 CASB 的日志形式的运营数据。通过此集成,您可以将这些日志发送到 Google SecOps 以进行分析和监控。解析器首先初始化一组空字段,然后解析 JSON 格式的 Cloudflare 日志,并舍弃所有无效的 JSON 消息。然后,该代码会根据特定字段的存在情况和值使用条件逻辑来确定 Cloudflare 产品和事件类型,并相应地填充统一数据模型 (UDM) 字段。

准备工作

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

  • Google SecOps 实例。
  • 已启用 LogPush 的 Cloudflare Enterprise 账号。
  • 对于 Webhook 方法:对 Google Cloud 控制台的特权访问权限。
  • 对于 Google Cloud Storage 方法:对 Google Cloud Storage 的特权访问权限。

方法 1:使用 Webhook(HTTP 目标位置)配置 Cloudflare 日志导出

此方法可让您将 Cloudflare 日志直接流式传输到 Google SecOps,而无需中间存储。

在 Google SecOps 中配置 Webhook Feed

  1. 依次前往 SIEM 设置> Feed
  2. 点击新增
  3. Feed 名称字段中,输入 Feed 的名称(例如 Cloudflare Webhook)。
  4. 选择 Webhook 作为来源类型
  5. 选择 Cloudflare 作为日志类型
  6. 点击下一步
  7. 为以下输入参数指定值:
    • 拆分分隔符\n
    • 资产命名空间资产命名空间
    • 注入标签:要应用于此 Feed 中事件的标签。
  8. 点击下一步
  9. 最终确定界面中查看新的 Feed 配置,然后点击提交
  10. 点击生成密钥,生成用于对此 Feed 进行身份验证的密钥。
  11. 复制保存此密钥,因为您将无法再次查看此密钥。
  12. 点击详细信息标签页。
  13. 端点信息字段复制 Feed 端点网址。
  14. 点击完成

为 Webhook Feed 创建 API 密钥

  1. 依次前往 Google Cloud 控制台 > API 和服务 > 凭据
  2. 点击创建凭据,然后选择 API 密钥
  3. 点击修改 API 密钥
  4. API 限制下,选择限制密钥
  5. 从列表中选择 Google SecOps API
  6. 点击保存
  7. 复制 API 密钥值。

配置 Cloudflare LogPush HTTP 目标

  1. 登录 Cloudflare 控制面板
  2. 选择要与 LogPush 搭配使用的企业账号网域
  3. 前往分析和日志> Logpush
  4. 点击创建 Logpush 作业
  5. 选择目的地中,选择 HTTP 目的地
  6. 输入包含身份验证参数的 HTTP 端点网址:

    <ENDPOINT_URL>?header_X-goog-api-key=<API_KEY>&header_X-Webhook-Access-Key=<SECRET_KEY>
    

    替换以下内容:

    • <ENDPOINT_URL>:Google SecOps 提供的 Feed 端点网址。
    • <API_KEY>:来自 Google Cloud 控制台的 API 密钥(如果包含特殊字符,则采用网址编码)。
    • <SECRET_KEY>:Webhook Feed 中的密钥(如果包含特殊字符,则采用网址编码)。
  7. 点击继续

  8. 选择要推送的数据集(例如 HTTP 请求DNS审核零信任CASB)。

  9. 配置日志推送作业:

    • 输入作业名称
    • 可选:在如果日志匹配下,配置过滤条件。
    • 发送以下字段中,选择要包含的字段。
    • 选择时间戳格式(建议使用 RFC3 339)。
    • 根据需要配置采样率。
  10. 点击提交以创建日志推送作业。

验证 webhook 集成

配置完成后,日志应会在几分钟内显示在 Google SecOps 中。要进行验证,请执行以下操作:

  1. 依次前往调查 > SIEM 搜索
  2. 搜索带有您配置的提取标签的日志。
  3. 确认 Cloudflare 日志是否正在正确解析。

方法 2:使用 Google Cloud Storage 配置 Cloudflare 日志导出

配置 Cloudflare 以将日志推送到该服务,这需要向 Cloudflare 授予必要的权限。

创建 Google Cloud 存储分区

  1. 登录 Google Cloud 控制台
  2. 前往 Cloud Storage 存储分区页面。
  3. 点击创建
  4. 创建存储桶页面上,输入您的存储桶信息:
    • 名称:输入符合存储桶名称要求的唯一名称(例如 cloudflare-data)。
    • 位置类型:选择位置类型和区域。
    • 如需启用分层命名空间,请点击展开箭头以展开优化文件导向型和数据密集型工作负载,然后选择在此存储桶上启用分层命名空间
  5. 点击创建

向存储桶授予权限

  1. Cloud Storage 控制台中,选择您之前创建的存储桶。
  2. 点击权限标签页。
  3. 点击授予访问权限
  4. 添加具有 Storage Object Admin 权限的账号 logpush@cloudflare-data.iam.gserviceaccount.com
  5. 点击保存

将 Cloudflare LogPush 配置为 Google Cloud Storage

  1. 登录 Cloudflare 控制面板
  2. 选择要与 LogPush 搭配使用的企业账号网域
  3. 前往分析和日志> Logpush
  4. 点击创建 Logpush 作业
  5. 选择目标位置中,选择 Google Cloud Storage
  6. 输入您的 Google Cloud Storage 存储桶路径(例如 gs://cloudflare-data/logs/)。
  7. 点击继续

  8. 输入所有权令牌,然后点击继续

  9. 选择要推送到存储空间的数据集。

  10. 配置日志推送作业:

    • 输入作业名称
    • 如果日志匹配下,您可以选择要在日志中包含或移除的事件。
    • 发送以下字段中,选择要推送的日志。
    • 选择时间戳格式(建议使用 RFC 339)。
    • 根据需要配置采样率。
  11. 点击提交

在 Google SecOps 中配置 Feed 以从 Google Cloud Storage 注入 Cloudflare 日志

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

    • 存储桶 URIgs://my-bucket/<value>/ 格式的 Google Cloud 存储桶网址。此网址必须以尾随正斜杠 (/) 结尾。
    • 来源删除选项:根据您的偏好设置选择删除选项。
    • 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。
    • 资产命名空间资产命名空间
    • 注入标签:要应用于此 Feed 中事件的标签。
  9. 点击下一步

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

UDM 映射表

日志字段 UDM 映射 逻辑
ClientIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
该值取自 ClientIP 字段。
ClientRequestHost read_only_udm.target.asset.hostname
read_only_udm.target.hostname
该值取自 ClientRequestHost 字段。
ClientRequestMethod read_only_udm.network.http.method 该值取自 ClientRequestMethod 字段。
ClientRequestURI read_only_udm.target.url 该值取自 ClientRequestURI 字段。如果 ClientRequestHost 字段不为空,则该值会与 ClientRequestHost 字段串联。
ClientSrcPort read_only_udm.principal.port 该值取自 ClientSrcPort 字段。
ClientRequestUserAgent read_only_udm.network.http.user_agent 该值取自 ClientRequestUserAgent 字段。
ClientSSLCipher read_only_udm.network.tls.cipher 该值取自 ClientSSLCipher 字段。
ClientSSLProtocol read_only_udm.network.tls.version 该值取自 ClientSSLProtocol 字段。
国家/地区 read_only_udm.target.location.country_or_region 该值取自“国家/地区”字段。
CreatedAt read_only_udm.metadata.event_timestamp 该值取自 CreatedAt 字段。
日期时间 read_only_udm.metadata.event_timestamp 该值取自日期时间字段。
DestinationIP read_only_udm.target.asset.ip
read_only_udm.target.ip
该值取自 DestinationIP 字段。
DestinationPort read_only_udm.target.port 该值取自 DestinationPort 字段。
DeviceID read_only_udm.principal.asset_id 该值取自 DeviceID 字段,并带有“Cloudflare:”前缀。
DeviceName read_only_udm.principal.asset.hostname
read_only_udm.principal.hostname
该值取自 DeviceName 字段。
DstIP read_only_udm.target.asset.ip
read_only_udm.target.ip
该值取自 DstIP 字段。
DstPort read_only_udm.target.port 该值取自 DstPort 字段。
EdgeResponseBytes read_only_udm.network.received_bytes 该值取自 EdgeResponseBytes 字段。
EdgeResponseStatus read_only_udm.network.http.response_code 该值取自 EdgeResponseStatus 字段。
EdgeServerIP read_only_udm.target.asset.ip
read_only_udm.target.ip
该值取自 EdgeServerIP 字段。
电子邮件 read_only_udm.principal.user.email_addresses
read_only_udm.target.user.email_addresses
该值取自“电子邮件”字段。
FirewallMatchesActions read_only_udm.security_result.action 如果 FirewallMatchesAction 字段为“allow”“Allow”“ALLOW”“skip”“SKIP”或“Skip”,则该值设置为“ALLOW”;如果 FirewallMatchesAction 字段为“challengeSolved”或“jschallengeSolved”,则该值设置为“ALLOW_WITH_MODIFICATION”;如果 FirewallMatchesAction 字段为“drop”或“block”,则该值设置为“BLOCK”;如果 FirewallMatchesAction 字段不为空,则该值设置为“UNKNOWN_ACTION”。
FirewallMatchesRuleIDs read_only_udm.security_result.rule_id 该值取自 FirewallMatchesRuleIDs 字段。
FirewallMatchesSources read_only_udm.security_result.rule_name 该值取自 FirewallMatchesSources 字段。
HTTPMethod read_only_udm.network.http.method 该值取自 HTTPMethod 字段。
HTTPHost read_only_udm.target.hostname 该值取自 HTTPHost 字段。
HTTPVersion read_only_udm.network.application_protocol 该值取自 HTTPVersion 字段。如果值包含“HTTP”,则替换为“HTTP”。
IPAddress read_only_udm.target.asset.ip
read_only_udm.target.ip
该值取自 IPAddress 字段。
IsIsolated read_only_udm.about.labels
read_only_udm.security_result.about.resource.attribute.labels
该值取自 IsIsolated 字段,并转换为字符串。
位置 read_only_udm.principal.location.name 该值取自“位置”字段。
OriginIP read_only_udm.intermediary.ip
read_only_udm.target.asset.ip
read_only_udm.target.ip
该值取自 OriginIP 字段。
OriginPort read_only_udm.target.port 该值取自 OriginPort 字段。
OwnerID read_only_udm.target.user.product_object_id 该值取自 OwnerID 字段。
政策 read_only_udm.security_result.rule_name 该值取自 Policy 字段。
PolicyID read_only_udm.security_result.rule_id 该值取自 PolicyID 字段。
PolicyName read_only_udm.security_result.rule_name 该值取自 PolicyName 字段。
协议 read_only_udm.network.ip_protocol 该值取自“协议”字段,并转换为大写。
QueryCategoryIDs read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
该值取自 QueryCategoryIDs 字段。
QueryName read_only_udm.network.dns.questions.name 该值取自 QueryName 字段。
QueryNameReversed read_only_udm.network.dns.questions.name 该值取自 QueryNameReversed 字段。
QuerySize read_only_udm.network.sent_bytes 该值取自 QuerySize 字段。
QueryType read_only_udm.network.dns.questions.type 该值取自 QueryType 字段。如果该值是已知的 DNS 记录类型之一,则会将其映射到相应的数值。否则,该值将转换为字符串。
RData read_only_udm.network.dns.answers 该值取自 RData 字段。类型字段会转换为无符号整数。
RayID read_only_udm.metadata.product_log_id 该值取自 RayID 字段。
Referer read_only_udm.network.http.referral_url 该值取自 Referer 字段。
RequestID read_only_udm.metadata.product_log_id 该值取自 RequestID 字段。
ResolverDecision read_only_udm.security_result.summary 该值取自 ResolverDecision 字段。
ResourceID read_only_udm.target.resource.id
read_only_udm.target.resource.product_object_id
该值取自 ResourceID 字段。
ResourceType read_only_udm.target.resource.resource_subtype 该值取自 ResourceType 字段。
SNI read_only_udm.network.tls.client.server_name 该值取自 SNI 字段。
SecurityAction read_only_udm.security_result.action 如果 SecurityAction 字段为空或 sec_action 字段为空,则该值设置为“ALLOW”;如果 SecurityAction 字段为“challengeSolved”或“jschallengeSolved”,则该值设置为“ALLOW_WITH_MODIFICATION”;如果 SecurityAction 字段为“drop”或“block”,则该值设置为“BLOCK”。
SecurityLevel read_only_udm.security_result.severity 该值取自 SecurityLevel 字段,并映射到相应的 UDM 严重程度值。
SessionID read_only_udm.network.session_id 该值取自 SessionID 字段。
SessionStartTime read_only_udm.metadata.event_timestamp 该值取自 SessionStartTime 字段。
SourceIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
read_only_udm.src.asset.ip
read_only_udm.src.ip
该值取自 SourceIP 字段。
SourcePort read_only_udm.principal.port
read_only_udm.src.port
该值取自 SourcePort 字段。
SrcIP read_only_udm.principal.asset.ip
read_only_udm.principal.ip
该值取自 SrcIP 字段。
SrcPort read_only_udm.principal.port 该值取自 SrcPort 字段。
TemporaryAccessDuration read_only_udm.network.session_duration.seconds 该值取自 TemporaryAccessDuration 字段。
时间戳 read_only_udm.metadata.event_timestamp 该值取自 Timestamp 字段。
传输 read_only_udm.network.ip_protocol 该值取自“交通方式”字段,并转换为大写。
网址 read_only_udm.target.url 该值取自网址字段。
UserAgent read_only_udm.network.http.user_agent 该值取自 UserAgent 字段。
UserID read_only_udm.principal.user.product_object_id 该值取自 UserID 字段。
UserUID read_only_udm.target.user.product_object_id 该值取自 UserUID 字段。
VirtualNetworkID read_only_udm.principal.resource.product_object_id 该值取自 VirtualNetworkID 字段。
WAFAction read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
该值取自 WAFAction 字段。
WAFAttackScore read_only_udm.security_result.about.resource.attribute.labels 该值取自 WAFAttackScore 字段。
WAFFlags read_only_udm.security_result.about.resource.attribute.labels 该值取自 WAFFlags 字段。
WAFProfile read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
该值取自 WAFProfile 字段。
WAFRCEAttackScore read_only_udm.security_result.about.resource.attribute.labels 该值取自 WAFRCEAttackScore 字段。
WAFRuleID read_only_udm.security_result.about.labels
read_only_udm.security_result.about.resource.attribute.labels
read_only_udm.security_result.threat_id
该值取自 WAFRuleID 字段。
WAFRuleMessage read_only_udm.security_result.rule_name
read_only_udm.security_result.threat_name
该值取自 WAFRuleMessage 字段。
WAFSQLiAttackScore read_only_udm.security_result.about.resource.attribute.labels 该值取自 WAFSQLiAttackScore 字段。
WAFXSSAttackScore read_only_udm.security_result.about.resource.attribute.labels 该值取自 WAFXSSAttackScore 字段。
ZoneID read_only_udm.additional.fields 该值取自 ZoneID 字段。
read_only_udm.metadata.log_type 该值设置为“CLOUDFLARE”。
read_only_udm.metadata.product_name 如果日志是 DNS 日志,则该值设置为“Cloudflare Gateway DNS”;如果日志是 Gateway HTTP 日志,则设置为“Cloudflare Gateway HTTP”;如果日志是审核日志,则设置为“Cloudflare Audit”;否则设置为“Web Application Firewall”。
read_only_udm.metadata.vendor_name 该值设置为“Cloudflare”。
read_only_udm.network.application_protocol 如果日志是 DNS 日志,则该值设置为“DNS”;如果 HTTPVersion 字段包含“HTTP”,则该值设置为“HTTP”;如果 Protocol 字段不为空且不是“tls”或“TLS”,则该值设置为 Protocol 字段的值(转换为大写)。
read_only_udm.network.direction 如果 EgressIP 字段不为空,则该值设置为“OUTBOUND”。
read_only_udm.network.http.parsed_user_agent 该值取自 UserAgent 或 ClientRequestUserAgent 字段,并使用 parseduseragent 过滤条件进行解析。
read_only_udm.extensions.auth.type 如果 Action 字段为“login”或“logout”,则该值设置为“MACHINE”。
read_only_udm.metadata.event_type 如果日志是 DNS 日志,则该值设置为“NETWORK_DNS”;如果日志是网关 HTTP 日志,则设置为“NETWORK_CONNECTION”;如果日志是审核日志且 ActorIP 和 ActorEmail 字段为空,则设置为“USER_RESOURCE_ACCESS”;如果日志是审核日志且 ResourceType 和 newvalue 字段不为空,则设置为“USER_RESOURCE_UPDATE_CONTENT”;如果 Action 字段为“login”,则设置为“USER_LOGIN”;如果 Action 字段为“logout”,则设置为“USER_LOGOUT”;如果 Email 字段不为空且符合电子邮件地址格式,则设置为“USER_RESOURCE_ACCESS”;如果 EgressIP 和 SourceIP 字段不为空,或者 OriginIP 和 SourceIP 字段不为空,则设置为“NETWORK_CONNECTION”。
read_only_udm.target.file.mime_type 该值取自 EdgeResponseContentType 字段。
read_only_udm.target.location.country_or_region 该值取自“国家/地区”字段。
read_only_udm.target.resource.id 该值取自 AccountID 字段或 ResourceID 字段。
read_only_udm.target.resource.product_object_id 该值取自 AccountID 字段、AppUUID 字段或 ResourceID 字段。
read_only_udm.target.user.product_object_id 该值取自 OwnerID 字段或 UserUID 字段。

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