收集 Akamai WAF 日志

支持的语言:

本文档介绍了如何使用 Google Cloud Storage 或 AWS S3 将 Akamai WAF 日志导出并注入到 Google Security Operations 中。解析器可处理日志,同时支持 syslog 和 CEF 格式。它会提取 IP 地址、网址、HTTP 方法、响应代码、用户代理和安全规则信息等字段,并将它们映射到统一数据模型 (UDM),以便实现一致的表示。解析器还会处理特定的 Akamai 字段(例如 attackDataclientReputation),执行必要的数据转换并丰富 UDM 输出。

准备工作

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

  • Google SecOps 实例
  • 对 Google Cloud 或 AWS 的特权访问权限
  • 对 Akamai 的特权访问权限

从 Cloud Storage 导出和注入 Akamai WAF 日志

本部分概述了该流程的初始步骤:为 Akamai WAF 日志设置必要的存储空间。

创建 Google Cloud 存储分区

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

    进入“存储桶”

  3. 点击创建

  4. 在“创建存储桶”页面上,输入您的存储桶信息。完成以下每一步后,点击继续以继续执行后续步骤:

    1. 开始使用部分中,执行以下操作:

      • 输入符合存储桶名称要求的唯一名称(例如 akamai-waf-logs)。
      • 如需启用分层命名空间,请点击展开箭头以展开优化文件导向型和数据密集型工作负载部分,然后选择在此存储桶上启用分层命名空间
      • 如需添加存储桶标签,请点击展开箭头以展开标签部分。
      • 点击添加标签,然后为标签指定键和值。
    2. 选择数据存储位置部分中,执行以下操作:

      • 选择位置类型
      • 使用位置类型的下拉菜单选择一个位置,用于永久存储存储桶中的对象数据。
      • 如需设置跨存储桶复制,请展开设置跨存储桶复制部分。
    3. 为数据选择一个存储类别部分中,为存储桶选择默认存储类别,或者选择 Autoclass 对存储桶数据进行自动存储类别管理。

    4. 选择如何控制对对象的访问权限部分中,选择强制执行禁止公开访问,然后为存储桶对象选择访问权限控制模型

    5. 选择如何保护对象数据部分中,执行以下操作:

      • 数据保护下,选择您要为存储桶设置的任何选项。
      • 如需选择对象数据的加密方式,请点击标有数据加密的展开箭头,然后选择数据加密方法
  5. 点击创建

为 Cloud Storage 配置权限

  1. 转到创建服务账号页面。

    转到“创建服务账号”

  2. 选择 Google Cloud 项目。

  3. 输入要在 Google Cloud 控制台中显示的服务账号名称

  4. 点击创建并继续

  5. 授予对相应存储桶的 roles/storage.admin

  6. 点击完成以完成服务账号的创建过程。

创建并下载 Google Cloud 服务账号密钥文件

  1. 转到服务账号页面。

    转到“服务账号”

  2. 选择一个 Google Cloud 项目。

  3. 点击新创建的服务账号的电子邮件地址。

  4. 点击密钥标签页。

  5. 点击添加密钥菜单,然后选择创建新密钥

  6. 选择 JSON 作为密钥类型,然后点击创建

    • 点击创建即会下载服务账号密钥文件。下载密钥文件后,您无法再次下载。
    • 下载的密钥采用以下格式,其中 PRIVATE_KEY 是公钥/私钥对的私钥部分。

配置 Akamai WAF 以将日志发送到 Cloud Storage

  1. 登录 Akamai 控制中心。
  2. 前往安全性部分。
  3. 选择日志
  4. 配置新的日志传送:
    • 日志来源:选择您的 WAF 配置。
    • 目标平台:选择 Google Cloud Storage
    • 显示名称:输入唯一的名称说明。
    • 存储分区:指定您创建的 Cloud Storage 存储桶的名称(例如 gs://akamai-waf-logs)。
    • 项目 ID:输入 Google Cloud 项目的唯一 ID。
    • 服务账号名称:输入您之前创建的服务账号的名称。
    • 私钥:输入您之前生成并下载的 JSON 密钥中的 private_key 值。(您应以 PEM 格式输入私钥,并使用换行符 [“\n”],例如 -----BEGIN PRIVATE KEY-----\nprivate_key\n-----END PRIVATE KEY-----\n
    • 日志格式:选择所需的日志格式(例如 JSON)。
    • 推送频率:选择您希望的日志传送频率(例如 every 60 seconds)。
  5. 点击验证并保存以验证与目的地的连接,并保存您提供的详细信息。

  6. 点击下一步,前往摘要标签页。

设置 Feed

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

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

使用 Google Cloud 存储空间,通过“SIEM 设置”>“Feed”设置 Feed

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

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

    • 存储桶 URI: Google Cloud 存储桶网址(例如 gs://akamai-waf-logs)。
    • URI Is A:选择目录(包括子目录)
    • 来源删除选项:根据您的偏好设置选择删除选项。
  10. 点击下一步

  11. 在“Finalize”界面中查看新 Feed 配置,然后点击提交

设置来自内容中心的 Feed

为以下字段指定值:

  • 存储桶 URI: Google Cloud 存储桶网址(例如 gs://akamai-waf-logs)。
  • URI Is A:选择目录(包括子目录)
  • 来源删除选项:根据您的偏好设置选择删除选项。

高级选项

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

从 AWS S3 导出并注入 Akamai WAF 日志

本部分介绍了设置 Amazon S3 存储桶以接收和存储 Akamai WAF 日志的初始步骤。

配置 Amazon S3 存储桶

  1. 按照以下用户指南创建 Amazon S3 存储桶创建存储桶
  2. 保存存储桶名称区域以供日后参考。
  3. 按照以下用户指南创建用户创建 IAM 用户
  4. 选择创建的用户
  5. 选择安全凭据标签页。
  6. 访问密钥部分中,点击创建访问密钥
  7. 选择第三方服务作为使用情形
  8. 点击下一步
  9. 可选:添加说明标记。
  10. 点击创建访问密钥
  11. 点击下载 CSV 文件,保存访问密钥密钥以供日后参考。
  12. 点击完成
  13. 选择权限标签页。
  14. 权限政策部分中,点击添加权限
  15. 选择添加权限
  16. 选择直接附加政策
  17. 搜索 AmazonS3FullAccess 政策。
  18. 选择相应政策。
  19. 点击下一步
  20. 点击添加权限

配置 Akamai WAF 以将日志发送到 Amazon S3

  1. 登录 Akamai 控制中心。
  2. 前往安全性部分。
  3. 选择日志
  4. 配置新的日志传送:

    • 日志来源:选择您的 WAF 配置。
    • 目标平台:选择 Amazon S3
    • S3 存储桶:指定您创建的 S3 存储桶的名称。
    • 区域:选择您的 S3 存储桶所在的 AWS 区域。
    • 访问密钥 ID 和私有访问密钥:提供您生成的凭据。
    • 日志格式:选择所需的日志格式(例如 JSON)。
    • 传送频率:选择您希望的日志传送频率(例如,每 5 分钟)。

  5. 验证日志传送:

    • 配置 LDS 后,请监控 S3 存储桶中是否有传入的日志文件。

使用 AWS S3 通过“SIEM 设置”>“Feed”设置 Feed

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

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

    • 区域:Amazon S3 存储桶所在的区域。
    • S3 URI:存储桶 URI。s3:/BUCKET_NAME 替换以下内容:
      • BUCKET_NAME:相应存储桶的名称。
    • URI is a:根据日志流配置选择 URI 类型:Single file | Directory | Directory which includes subdirectories
    • 来源删除选项:根据您的偏好设置选择删除选项。
    • 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥。
    • 私有访问密钥:有权访问 S3 存储桶的用户私有密钥。
  9. 点击下一步

  10. 在“Finalize”界面中查看新 Feed 配置,然后点击提交

UDM 映射表

日志字段(升序) UDM 映射 逻辑
attackData.clientIP principal.ipprincipal.asset.ip 发起请求的客户端的 IP 地址。从 akamai_siem 日志的 attackData.clientIP 字段中提取。
attackData.configId metadata.product_log_id 安全配置 ID。从 akamai_siem 日志的 attackData.configId 字段中提取。还作为 detection_field 添加到 security_result 对象中。
attackData.policyId 不适用 在解析器逻辑中使用,以使用值 PolicyId:[value] 填充 security_result.summary
attackData.ruleActions security_result.actionsecurity_result.action_details 根据触发的规则采取的行动。从 akamai_siem 日志的 attackData.ruleActions 字段中提取。“deny”映射到 BLOCK,其他值(“alert”“monitor”“allow”“tarpit”)映射到 ALLOW。原始值也存储在 action_details 中。
attackData.ruleData security_result.detection_fields 与触发的规则相关联的数据。从 akamai_siem 日志的 attackData.ruleData 字段中提取。已添加到 security_result.detection_fields,键为“RuleData”。
attackData.ruleMessages security_result.threat_name 与触发的规则关联的消息。从 akamai_siem 日志的 attackData.ruleMessages 字段中提取。
attackData.ruleSelectors security_result.detection_fields 与触发的规则关联的选择器。从 akamai_siem 日志的 attackData.ruleSelectors 字段中提取。已添加到 security_result.detection_fields,键为“RuleSelector”。
attackData.ruleTags security_result.category_details 与触发的规则相关联的代码。从 akamai_siem 日志的 attackData.ruleTags 字段中提取。
attackData.ruleVersions security_result.detection_fields 触发的规则的版本。从 akamai_siem 日志的 attackData.ruleVersions 字段中提取。已添加到 security_result.detection_fields,键为“Rule Version”。
clientReputation principal.labels 客户声誉信息。从 akamai_siem 日志的 clientReputation 字段中提取。作为标签添加到具有键“reputation”的主账号。
cliIPcli_ipprincipal_ip principal.ipprincipal.asset.ip 客户端 IP 地址。从 cliIPcli_ipprincipal_ip 中提取,具体取决于日志格式。
cp additional.fields CP 代码。提取自 cp 字段。已添加到键为“cp”的 additional.fields 中。
eventId metadata.product_log_id 活动 ID。提取自 eventId 字段。
eventTimelog_date metadata.event_timestamp 活动时间戳。从 eventTime 中提取或从 log_date 中解析,具体取决于日志格式。
eventType.eventDefinition.eventDefinitionId target.resource.product_object_id 事件定义 ID。提取自 eventType.eventDefinition.eventDefinitionId
eventType.eventDefinition.eventDescription metadata.description 活动说明。提取自 eventType.eventDefinition.eventDescription
eventType.eventDefinition.eventName metadata.product_event_type 活动名称。提取自 eventType.eventDefinition.eventName
eventType.eventTypeId additional.fields 事件类型 ID。提取自 eventType.eventTypeId。已添加到键为“eventTypeId”的 additional.fields
eventType.eventTypeName additional.fields 事件类型名称。提取自 eventType.eventTypeName。已添加到 additional.fields,键为“eventTypeName”。
format 不适用 供解析器用于确定日志格式。
geo.asn principal.location.name 自治系统编号 (ASN)。从 geo.asnAkamaiSiemASN 中提取,具体取决于日志格式。该值带有“ASN”前缀。
geo.city principal.location.city 城市。从 geo.cityAkamaiSiemCity 中提取,具体取决于日志格式。
geo.country principal.location.country_or_region 国家/地区。从 geo.countryAkamaiSiemContinent 中提取,具体取决于日志格式。
httpMessage.bytes network.sent_bytes HTTP 消息中发送的字节数。提取自 httpMessage.bytes
httpMessage.host target.hostnametarget.asset.hostname 主机名。从 httpMessage.hostreqHost 中提取,具体取决于日志格式。
httpMessage.method network.http.method HTTP 方法。从 httpMessage.methodnetwork_http_methodreqMethod 中提取,具体取决于日志格式。已转换为大写。
httpMessage.path target.url 请求路径。从 httpMessage.pathtarget_urlreqPath 中提取,具体取决于日志格式。如果存在 httpMessage.query,则会使用“?”分隔符将其附加到路径中。
httpMessage.port target.port 端口。从 httpMessage.portreqPort 中提取,具体取决于日志格式。
httpMessage.protocol 不适用 供解析器用于确定协议。
httpMessage.query 不适用 在解析器逻辑中使用,以在存在时附加到 httpMessage.path
httpMessage.requestId network.session_id 请求 ID。从 httpMessage.requestIdreqId 中提取,具体取决于日志格式。
httpMessage.requestHeadersAkamaiSiemRequestHeaders additional.fields 请求标头。从 httpMessage.requestHeadersAkamaiSiemRequestHeaders 中提取,具体取决于日志格式。已添加到 additional.fields,键为“AkamaiSiemRequestHeaders”。
httpMessage.responseHeadersAkamaiSiemResponseHeaders additional.fields 响应标头。从 httpMessage.responseHeadersAkamaiSiemResponseHeaders 中提取,具体取决于日志格式。已添加到 additional.fields,键为“AkamaiSiemResponseHeaders”。
httpMessage.statusAkamaiSiemResponseStatusnetwork_http_response_codestatusCode network.http.response_code HTTP 响应代码。从 httpMessage.statusAkamaiSiemResponseStatusnetwork_http_response_codestatusCode 中提取,具体取决于日志格式。
httpMessage.tlsAkamaiSiemTLSVersiontlsVersion network.tls.version TLS 版本。从 httpMessage.tlsAkamaiSiemTLSVersiontlsVersion 中提取,具体取决于日志格式。
httpMessage.useragentnetwork_http_user_agentUAuseragent network.http.user_agent 用户代理。从 httpMessage.useragentnetwork_http_user_agentUAuseragent 中提取,具体取决于日志格式。
log_description metadata.description 日志说明。提取自 log_description
log_rule security_result.rule_name 日志规则。提取自 log_rule
message 不适用 原始日志消息。供解析器用于各种提取。
network_http_referral_url network.http.referral_url HTTP 引荐来源网址。提取自 network_http_referral_url
proto 不适用 在解析器逻辑中使用,用于在不存在 attackData.policyId 的情况下填充 security_result.summary
reqHost target.hostnametarget.asset.hostname 请求主机。提取自 reqHost
reqId metadata.product_log_idnetwork.session_id 请求 ID。提取自 reqId
reqMethod network.http.method 请求方法。提取自 reqMethod
reqPath target.url 请求路径。提取自 reqPath
reqPort target.port 请求端口。提取自 reqPort
rspContentType target.file.mime_type 响应内容类型。提取自 rspContentType
securityRules security_result.rule_namesecurity_result.about.resource.attribute.labels 安全规则。提取自 securityRules。第一部分映射到 rule_name,其余部分作为标签添加,键分别为“non_deny_rules”和“deny_rule_format”。
statusCode network.http.response_code 状态代码。提取自 statusCode
state principal.location.statetarget.user.personal_address.state 州或省/直辖市/自治区。提取自 state
tlsVersion network.tls.version TLS 版本。提取自 tlsVersion
type metadata.product_event_type 活动类型。提取自 type
UA network.http.user_agent 用户代理。提取自 UA
version metadata.product_versionprincipal.asset.software.version 版本。提取自 version
不适用 metadata.event_timestamp 事件时间戳派生自 akamai_lds 日志中的 _ts 字段、akamai_siem 日志中的 httpMessage.start 字段或其他格式中的 log_date 字段。
不适用 metadata.vendor_name 硬编码为“Akamai”。
不适用 metadata.product_name 硬编码为“Kona”。
不适用 metadata.log_type 硬编码为“AKAMAI_WAF”。
不适用 network.application_protocol 对于 akamai_siem 和 akamai_lds 日志,请设置为“HTTP”;对于其他格式,请设置为“DNS”。
不适用 security_result.severity 对于“提醒”操作,请设置为“中”;对于“拒绝”操作,请设置为“严重”;对于其他操作,请设置为“高”。
不适用 event.idm.read_only_udm.metadata.event_type 对于大多数日志格式,请设置为“NETWORK_HTTP”;对于包含 eventIdeventData 字段的事件,请设置为“GENERIC_EVENT”;对于包含 cli_ipp_ip 但不包含 reqHost 的事件,请设置为“STATUS_UPDATE”。

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