收集 Fastly CDN 日志

解析器版本: 2.0

支持:

本文档介绍了如何使用 Amazon S3 将 Fastly CDN 日志注入 Google Security Operations。

Fastly 是一个内容分发网络 (CDN) 和边缘云平台,可提供实时内容分发、安全和边缘计算服务。Fastly 的实时日志流式传输功能可以将 CDN 访问日志、WAF 事件和其他遥测数据发送到各种目标位置(包括 Amazon S3),以进行安全监控和分析。

准备工作

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

  • Google SecOps 实例
  • Fastly 控制台或 API 的特权访问权限
  • AWS (S3、IAM)的特权访问权限
  • 具有 globalglobal:read 范围的 Fastly API 令牌

创建 Fastly API 令牌

  1. 登录 Fastly 控制台 (https://manage.fastly.com)。
  2. 点击右上角的用户图标
  3. 依次前往账号 > 个人 API 令牌
  4. 点击 Create Token
  5. Create API Token 对话框中,提供以下信息:
    • 名称:输入描述性名称(例如 Google SecOps S3 Logging Configuration)。
    • 类型:选择 User token
    • 范围:选择 Global access(配置日志记录端点时需要此选项)。
    • 到期时间:选择 Never expire 或设置适当的到期日期。
  6. 点击 Create Token
  7. 复制并安全地保存 API 令牌。

为 Google SecOps 配置 AWS S3 存储桶和 IAM

  1. 按照以下用户指南创建 Amazon S3 存储桶创建存储桶
  2. 保存存储桶的名称区域 以供日后参考(例如 fastly-cdn-logs)。
  3. 按照以下用户指南创建用户创建 IAM 用户
  4. 选择创建的用户
  5. 选择安全凭据 标签页。
  6. 访问密钥 部分中,点击 Create Access Key
  7. 使用情形 部分,选择 Third-party service
  8. 点击下一步
  9. 可选:添加说明标签。
  10. 点击 Create access key
  11. 点击下载 .csv 文件 以保存 Access KeySecret Access Key 以供日后参考。
  12. 点击完成
  13. 选择权限 标签页。
  14. 权限政策 部分中,点击 Add permissions
  15. 选择 Add permissions
  16. 选择 Attach policies directly
  17. 搜索 AmazonS3FullAccess 政策。
  18. 选择该政策。
  19. 点击下一步
  20. 点击 Add permissions

配置 Fastly S3 日志记录端点

方案 A:通过 Fastly 控制台进行配置

  1. 登录 Fastly 控制台 (https://manage.fastly.com)
  2. 选择要为其配置日志记录的服务
  3. 点击 Edit configuration ,然后选择 Clone active version 以创建新的草稿版本。
  4. 点击左侧导航菜单中的 Logging
  5. Amazon Web Services S3 部分中,点击 Create endpoint
  6. Create an Amazon S3 endpoint 表单中,提供以下配置详细信息:

    • 基本设置

      • 名称:输入描述性名称(例如 secops-s3-logs)。
      • 放置位置:选择 Format Version Default (推荐)。
      • 日志格式:输入以下 JSON 格式字符串:

        {"timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t","client_ip":"%{req.http.Fastly-Client-IP}V","geo_country":"%{client.geo.country_name}V","geo_city":"%{client.geo.city}V","geo_region":"%{client.geo.region}V","datacenter":"%{server.datacenter}V","host":"%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V","url":"%{json.escape(req.url)}V","request_method":"%{json.escape(req.method)}V","request_protocol":"%{json.escape(req.proto)}V","request_referer":"%{json.escape(req.http.referer)}V","request_user_agent":"%{json.escape(req.http.User-Agent)}V","response_state":"%{json.escape(fastly_info.state)}V","response_status":%{resp.status}V,"response_reason":%{if(resp.response, "\"%22\"+json.escape(resp.response)+\"%22\", \"null\")}V,"response_body_size":%{resp.body_bytes_written}V,"response_header_size":%{resp.header_bytes_written}V,"request_body_size":%{req.body_bytes_read}V,"request_header_size":%{req.header_bytes_read}V,"cache_status":"%{fastly_info.state}V","is_tls":"%{if(req.is_ssl, \"true\", \"false\")}V","tls_protocol":"%{cstr_escape(tls.client.protocol)}V","tls_cipher":"%{cstr_escape(tls.client.cipher)}V","server_identity":"%{json.escape(server.identity)}V","is_edge":%{if(fastly.ff.visits_this_service == 0, "true", "false")}V,"time_elapsed_usec":%{time.elapsed.usec}V,"time_start_sec":%{time.start.sec}V}
        
      • 时间戳格式:保留默认值(strftime 兼容字符串)。

    S3 存储桶配置

    • 存储桶名称:输入 S3 存储桶名称(例如 fastly-cdn-logs)。
    • 网域:如果您的存储桶位于美国标准区域,请留空。对于其他区域,请输入相应的 S3 端点(例如,对于 us-west-2 区域,输入 s3-us-west-2.amazonaws.com)。
    • 访问方法:选择 User Credentials
    • 访问密钥:输入第 11 步中的 AWS 访问密钥。
    • 密钥:输入第 11 步中的 AWS 私有访问密钥。
    • 周期:输入 3600(日志每小时最终确定一次)。
  7. 点击高级选项 以展开其他设置:

    高级设置

    • 路径:输入 fastly-cdn/(用于在存储桶中整理日志的可选前缀)。
    • PGP 公钥:留空(此集成不需要加密)。
    • 选择日志行格式:选择 Blank(我们将使用自定义 JSON 格式)。
    • 压缩:选择 gzip (推荐,可降低存储费用)。
    • 冗余级别:选择 Standard
    • ACL:选择 private (推荐)。
    • 服务器端加密:选择 None (或根据您的安全要求进行配置)。
    • 最大字节数:输入 0(没有文件大小上限)。
  8. 点击 Create 以创建日志记录端点。

  9. 点击右上角的 Activate

  10. 选择 Activate on Production 以部署配置更改。

  11. 在确认对话框中,点击 Activate 以确认。

方案 B:通过 Fastly API 进行配置

如果您更喜欢通过 API 配置日志记录,请使用以下方法:

  1. 从控制台中获取 Fastly 服务 ID,或列出服务:

    curl -H "Fastly-Key: YOUR_FASTLY_TOKEN" https://api.fastly.com/service
    
  2. 克隆有效版本以创建新的草稿版本:

    curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \
      "https://api.fastly.com/service/SERVICE_ID/version/ACTIVE_VERSION/clone"
    
  3. 在新草稿版本中创建 S3 日志记录端点:

    curl -X POST -H "Fastly-Key: YOUR_FASTLY_TOKEN" \
      -H "Content-Type: application/x-www-form-urlencoded" \
      "https://api.fastly.com/service/SERVICE_ID/version/NEW_VERSION/logging/s3" \
      --data-urlencode 'name=secops-s3-logs' \
      --data-urlencode 'bucket_name=fastly-cdn-logs' \
      --data-urlencode 'access_key=YOUR_AWS_ACCESS_KEY' \
      --data-urlencode 'secret_key=YOUR_AWS_SECRET_KEY' \
      --data-urlencode 'path=fastly-cdn/' \
      --data-urlencode 'period=3600' \
      --data-urlencode 'gzip_level=9' \
      --data-urlencode 'format_version=2' \
      --data-urlencode 'format={"timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t","client_ip":"%{req.http.Fastly-Client-IP}V","geo_country":"%{client.geo.country_name}V","geo_city":"%{client.geo.city}V","host":"%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V","url":"%{json.escape(req.url)}V","request_method":"%{json.escape(req.method)}V","response_status":%{resp.status}V,"cache_status":"%{fastly_info.state}V"}'
    
  4. 启用新版本:

    curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \
      "https://api.fastly.com/service/SERVICE_ID/version/NEW_VERSION/activate"
    

验证日志是否已传送到 S3

  1. 等待大约 1 小时(根据配置的周期),以便第一个日志文件最终确定。
  2. AWS 控制台 中,依次前往 S3 > 存储分区
  3. 点击您的存储桶名称(例如 fastly-cdn-logs)。
  4. 前往 fastly-cdn/ 前缀文件夹。
  5. 验证是否正在创建日志文件,且命名模式类似于:

    fastly-cdn/YYYY-MM-DD-HH-MM-SS-RANDOM_STRING.log.gz
    
  6. 下载示例日志文件,并验证 JSON 格式是否与您的配置匹配。

在 Google SecOps 中配置 Feed 以注入 Fastly CDN 日志

  1. 依次前往 SIEM 设置 > Feed
  2. 点击 Add New Feed
  3. 在下一页上,点击 Configure a single feed
  4. Feed name 输入一个唯一的名称。
  5. Source type 部分,选择 Amazon S3 V2
  6. Log type 部分,选择 Fastly CDN
  7. 点击下一步 ,然后点击提交
  8. 为以下字段指定值:

    • S3 URIs3://fastly-cdn-logs/fastly-cdn/
    • 源删除选项:根据您的偏好选择删除选项。
    • 文件存在时间上限:包含在过去指定天数内修改的文件(默认值为 180 天)。
    • 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥。
    • 私有访问密钥:具有 S3 存储桶访问权限的用户私有密钥。
    • 资产命名空间资产命名空间
    • 注入标签:要应用于此 Feed 中事件的标签。
  9. 点击下一步 ,然后点击提交

UDM 映射表

日志字段 UDM 映射 逻辑
request_protocol、response_state、response_reason、response_body_size、fastly_server、fastly_is_edge additional.fields 如果每个字段不为空,则与根据每个字段创建的标签合并
metadata.event_type 设置为“GENERIC_EVENT”,然后如果 principal_mid_present 为 true,则设置为“STATUS_UPDATE”
request_method network.http.method 直接复制值
request_user_agent network.http.parsed_user_agent 转换为 parseduseragent,然后重命名
request_referer network.http.referral_url 直接复制值
response_status network.http.response_code 先转换为字符串,再转换为整数
request_user_agent network.http.user_agent 直接复制值
host principal.asset.hostname 直接复制值
client_ip principal.asset.ip 直接复制值(在 grok 验证为 IP 后)
host principal.hostname 直接复制值
client_ip principal.ip 直接复制值(在 grok 验证为 IP 后)
geo_city principal.location.city 直接复制值
geo_country principal.location.country_or_region 直接复制值
security_result security_result 直接复制值
url target.url 直接复制值
metadata.product_name 设置为“FASTLY_CDN”
metadata.vendor_name 设置为“FASTLY_CDN”

更新日志

查看此解析器的更新日志

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