收集 Cloudflare Page Shield 日志

支持的平台:

本文档介绍了如何使用 Amazon S3 将 Cloudflare Page Shield 日志提取到 Google Security Operations。

Page Shield 可帮助管理网站访问者加载的资源(包括脚本、连接和 Cookie),并在资源发生更改或被视为恶意资源时触发提醒通知。

准备工作

  • Google SecOps 实例
  • 已启用 Page Shield 的 Cloudflare 账号
  • Cloudflare 信息中心的特权访问权限
  • AWS (S3、IAM) 的特权访问权限

此选项使用 Cloudflare Logpush 将 Page Shield 事件导出到 Amazon S3,然后 Google SecOps 会提取这些事件。

启用 Page Shield

  1. 登录 Cloudflare 控制面板
  2. 选择您的账号和网域。
  3. 依次前往安全性> Page Shield
  4. 点击启用 Page Shield

创建 Amazon S3 存储分区

  1. 打开 Amazon S3 控制台
  2. 点击创建存储桶
  3. 提供以下配置详细信息:
    • 存储分区名称:为存储分区输入一个有意义的名称(例如 cloudflare-pageshield-logs)。
    • 区域:选择您的首选 AWS 区域(例如 us-east-1)。
  4. 点击创建
  5. 保存相应存储分区名称和区域,以供日后参考。

创建具有 S3 访问权限的 IAM 用户

  1. 打开 IAM 控制台
  2. 依次点击“用户”图标 >“添加用户”
  3. 输入用户名(例如 chronicle-s3-user)。
  4. 选择以编程方式访问
  5. 点击 Next: Permissions
  6. 选择 Attach existing policies directly
  7. 搜索并选择 AmazonS3FullAccess 政策。
  8. 点击 Next: Tags
  9. 点击下一步:检查
  10. 点击创建用户
  11. 点击下载 .csv 文件以保存访问密钥 ID私有访问密钥

为 Cloudflare 配置 S3 存储分区政策

  1. Amazon S3 控制台中,选择您的存储桶。
  2. 依次点击权限 > 存储分区政策
  3. 点击修改
  4. 粘贴以下政策,并将 <BUCKET_NAME> 替换为您的存储分区名称:

    {
      "Id": "Policy1506627184792",
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1506627150918",
          "Action": ["s3:PutObject"],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::<BUCKET_NAME>/*",
          "Principal": {
            "AWS": ["arn:aws:iam::391854517948:user/cloudflare-logpush"]
          }
        }
      ]
    }
    
  5. 点击保存更改

创建 Cloudflare Logpush 作业

  1. 登录 Cloudflare 控制面板
  2. 选择您的账号和网域。
  3. 前往分析和日志 > 日志
  4. 点击创建 Logpush 作业
  5. 选择目标位置中,选择 Amazon S3
  6. 输入以下目的地信息:
    • 存储分区名称:输入您的 S3 存储分区名称(例如 cloudflare-pageshield-logs)。
    • 存储分区区域:选择与您的 S3 存储分区匹配的区域。
    • 存储分区路径(可选):输入路径前缀(例如 pageshield/)。
  7. 点击继续
  8. 为证明您是域名所有者,Cloudflare 会向您指定的目标位置发送一个文件。如需查找令牌,请在所有权验证文件的“概览”标签页中选择“打开”按钮,然后将其粘贴到 Cloudflare 信息中心,以验证您对相应存储分区的访问权限。输入所有权令牌,然后选择“继续”。
  9. 选择数据集中,选择 Page Shield 事件
  10. 点击下一步
  11. 配置您的 logpush 作业:
    • 作业名称:输入一个描述性名称(例如 pageshield-to-s3)。
    • 如果日志匹配:留空可包含所有事件,也可根据需要配置过滤条件。
    • 发送以下字段:选择所有字段或选择特定字段。
  12. 点击提交

在 Google SecOps 中配置 Feed 以提取 Page Shield 日志

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

    • S3 URI:输入存储分区 URI,格式为:s3://<BUCKET_NAME>/<BUCKET_PATH>/

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

      • 永不:永不删除转移后的任何文件。
      • 删除已转移的文件:在成功转移后删除文件。
      • 删除已转移的文件和空目录:在成功转移后删除文件和空目录。
    • 文件存在时间上限:包含在过去指定天数内修改的文件。默认值为 180 天。

    • 访问密钥 ID:有权访问 S3 存储桶的用户访问密钥。

    • 私有访问密钥:有权访问 S3 存储分区的用户私有密钥。

    • 资产命名空间资产命名空间

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

  9. 点击下一步

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

UDM 映射表

日志字段 UDM 映射 逻辑
URLContainsCDNCGIPath event.idm.read_only_udm.additional.fields.CGI_label 从 网址ContainsCDNCGIPath 中获取的值,在键为“CGI”的标签中设置为 string_value
操作 event.idm.read_only_udm.additional.fields.action_label 从操作中获取的值,在键为“action”的标签中设置为 string_value
resource.first_page_url event.idm.read_only_udm.additional.fields.first_page_label 从 resource.first_page_url 中获取的值,在键为“first_page_url”的标签中设置为 string_value
resource.last_page_url event.idm.read_only_udm.additional.fields.last_page_label 从 resource.last_page_url 中获取的值,在键为“last_page_url”的标签中设置为 string_value
name event.idm.read_only_udm.additional.fields.name_label 从名称中获取的值,在键为“name”的标签中设置为 string_value
ts event.idm.read_only_udm.metadata.event_timestamp 从 ts (UNIX) 转换为时间戳
event.idm.read_only_udm.metadata.event_type 根据 has_principal、has_target、has_target_user 派生:如果同时存在主账号和目标,则为 NETWORK_CONNECTION;如果存在 target_user,则为 USER_UNCATEGORIZED;如果存在主账号,则为 STATUS_UPDATE;否则为 GENERIC_EVENT
resource.url event.idm.read_only_udm.network.http.referral_url 从 resource.url 中获取的值
主机 event.idm.read_only_udm.principal.asset.hostname 从 Host 或 host.hostname 中获取的值
主机 event.idm.read_only_udm.principal.hostname 从 Host 或 host.hostname 中获取的值
alert_type event.idm.read_only_udm.principal.resource.attribute.labels.alert_type_label 从 alert_type 中获取的值,设置为键为“alert_type”的标签中的值
resource.cryptomining_score event.idm.read_only_udm.principal.resource.attribute.labels.crypto_label 从 resource.cryptomining_score 中获取的值,设置为键为“cryptominingscore%{index2}”的标签中的值
resource.dataflow_score event.idm.read_only_udm.principal.resource.attribute.labels.dataflow_label 从 resource.dataflow_score 中获取的值,设置为键为“dataflowscore%{index2}”的标签中的值
policie.description event.idm.read_only_udm.principal.resource.attribute.labels.desc_label 从 policie.description 中获取的值,设置为键为“description_%{index}”的标签中的值
version.fetched_at event.idm.read_only_udm.principal.resource.attribute.labels.fetched_at_label 从 version.fetched_at 中获取值,并将其设置为键为“fetchedat%{index2}”的标签中的值
version.hash event.idm.read_only_udm.principal.resource.attribute.labels.hash_label 从 version.hash 中获取的值,设置为键为“hash_%{index2}”的标签中的值
policie.id event.idm.read_only_udm.principal.resource.attribute.labels.id_label 从 policie.id 中获取的值,设置为键为“policyid%{index}”的标签中的值
data.options.remove_dashboard_links event.idm.read_only_udm.principal.resource.attribute.labels.remove_dash_label 值取自 data.options.remove_dashboard_links,设置为键为“remove_dashboard_links”的标签中的值
resource.resource_type event.idm.read_only_udm.principal.resource.attribute.labels.res_type_label 从 resource.resource_type 中获取的值,设置为键为“resourcetype%{index2}”的标签中的值
data.type event.idm.read_only_udm.principal.resource.attribute.labels.type_label 从 data.type 中获取的值,设置为键为“type”的标签中的值
data.zones event.idm.read_only_udm.principal.resource.attribute.labels.zones_label 从 data.zones 中获取的值,设置为键为“zones”的标签中的值
resource.id event.idm.read_only_udm.principal.resource.id 从 resource.id 中获取的值
PageURL event.idm.read_only_udm.principal.url 从 Page网址 中获取的值
account_id event.idm.read_only_udm.principal.user.product_object_id 从 account_id 中提取的值
policy_id event.idm.read_only_udm.security_result.detection_fields.policy_id_label 从 policy_id 中获取的值,设置为键为“policy_id”的标签中的值
policy_name event.idm.read_only_udm.security_result.detection_fields.policy_name_label 从 policy_name 中获取的值,设置为键为“policy_name”的标签中的值
text event.idm.read_only_udm.security_result.description 从文本中提取的值
resource.first_seen_at event.idm.read_only_udm.security_result.first_discovered_time 从 resource.first_seen_at 转换为 ISO8601 时间戳
PolicyID event.idm.read_only_udm.security_result.rule_name 从 PolicyID 中获取的值
data.severity event.idm.read_only_udm.security_result.severity 派生自 data.severity:如果为“INFO”,则为“INFORMATIONAL”;如果为“WARN”,则为“MEDIUM”;否则为“UNKNOWN_SEVERITY”
网址 event.idm.read_only_udm.target.url 从网址中获取的值
URLHost event.idm.read_only_udm.target.user.email_addresses 如果与电子邮件格式匹配,则取自 网址Host 的值

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