收集 Akamai WAF 日志
本文档介绍了如何使用 Google Cloud Storage 或 AWS S3 将 Akamai WAF 日志导出并注入到 Google Security Operations 中。解析器可处理日志,同时支持 syslog 和 CEF 格式。它会提取 IP 地址、网址、HTTP 方法、响应代码、用户代理和安全规则信息等字段,并将它们映射到统一数据模型 (UDM),以便实现一致的表示。解析器还会处理特定的 Akamai 字段(例如 attackData
和 clientReputation
),执行必要的数据转换并丰富 UDM 输出。
准备工作
请确保满足以下前提条件:
- Google SecOps 实例
- 对 Google Cloud 或 AWS 的特权访问权限
- 对 Akamai 的特权访问权限
从 Cloud Storage 导出和注入 Akamai WAF 日志
本部分概述了该流程的初始步骤:为 Akamai WAF 日志设置必要的存储空间。
创建 Google Cloud 存储分区
- 登录 Google Cloud 控制台。
前往 Cloud Storage 存储分区页面。
点击创建。
在“创建存储桶”页面上,输入您的存储桶信息。完成以下每一步后,点击继续以继续执行后续步骤:
在开始使用部分中,执行以下操作:
- 输入符合存储桶名称要求的唯一名称(例如
akamai-waf-logs
)。 - 如需启用分层命名空间,请点击展开箭头以展开优化文件导向型和数据密集型工作负载部分,然后选择在此存储桶上启用分层命名空间。
- 如需添加存储桶标签,请点击展开箭头以展开标签部分。
- 点击添加标签,然后为标签指定键和值。
- 输入符合存储桶名称要求的唯一名称(例如
在选择数据存储位置部分中,执行以下操作:
- 选择位置类型。
- 使用位置类型的下拉菜单选择一个位置,用于永久存储存储桶中的对象数据。
- 如需设置跨存储桶复制,请展开设置跨存储桶复制部分。
在为数据选择一个存储类别部分中,为存储桶选择默认存储类别,或者选择 Autoclass 对存储桶数据进行自动存储类别管理。
在选择如何控制对对象的访问权限部分中,选择不强制执行禁止公开访问,然后为存储桶对象选择访问权限控制模型。
在选择如何保护对象数据部分中,执行以下操作:
- 在数据保护下,选择您要为存储桶设置的任何选项。
- 如需选择对象数据的加密方式,请点击标有数据加密的展开箭头,然后选择数据加密方法。
点击创建。
为 Cloud Storage 配置权限
转到创建服务账号页面。
选择 Google Cloud 项目。
输入要在 Google Cloud 控制台中显示的服务账号名称。
点击创建并继续。
授予对相应存储桶的 roles/storage.admin。
点击完成以完成服务账号的创建过程。
创建并下载 Google Cloud 服务账号密钥文件
转到服务账号页面。
选择一个 Google Cloud 项目。
点击新创建的服务账号的电子邮件地址。
点击密钥标签页。
点击添加密钥菜单,然后选择创建新密钥。
选择 JSON 作为密钥类型,然后点击创建。
- 点击创建即会下载服务账号密钥文件。下载密钥文件后,您无法再次下载。
- 下载的密钥采用以下格式,其中
PRIVATE_KEY
是公钥/私钥对的私钥部分。
配置 Akamai WAF 以将日志发送到 Cloud Storage
- 登录 Akamai 控制中心。
- 前往安全性部分。
- 选择日志。
- 配置新的日志传送:
- 日志来源:选择您的 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
)。
点击验证并保存以验证与目的地的连接,并保存您提供的详细信息。
点击下一步,前往摘要标签页。
设置 Feed
您可以通过两种不同的入口点在 Google SecOps 平台中设置 Feed:
- SIEM 设置 > Feed
- 内容中心 > 内容包
使用 Google Cloud 存储空间,通过“SIEM 设置”>“Feed”设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置> Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如 Akamai WAF 日志)。
- 选择 Google Cloud Storage 作为来源类型。
- 选择 Akamai WAF 作为日志类型。
- 点击获取服务账号作为 Chronicle 服务账号。
- 点击下一步。
为以下输入参数指定值:
- 存储桶 URI: Google Cloud 存储桶网址(例如
gs://akamai-waf-logs
)。 - URI Is A:选择目录(包括子目录)。
- 来源删除选项:根据您的偏好设置选择删除选项。
- 存储桶 URI: Google Cloud 存储桶网址(例如
点击下一步。
在“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 存储桶
- 按照以下用户指南创建 Amazon S3 存储桶:创建存储桶。
- 保存存储桶名称和区域以供日后参考。
- 按照以下用户指南创建用户:创建 IAM 用户。
- 选择创建的用户。
- 选择安全凭据标签页。
- 在访问密钥部分中,点击创建访问密钥。
- 选择第三方服务作为使用情形。
- 点击下一步。
- 可选:添加说明标记。
- 点击创建访问密钥。
- 点击下载 CSV 文件,保存访问密钥和密钥以供日后参考。
- 点击完成。
- 选择权限标签页。
- 在权限政策部分中,点击添加权限。
- 选择添加权限。
- 选择直接附加政策。
- 搜索 AmazonS3FullAccess 政策。
- 选择相应政策。
- 点击下一步。
- 点击添加权限。
配置 Akamai WAF 以将日志发送到 Amazon S3
- 登录 Akamai 控制中心。
- 前往安全性部分。
- 选择日志。
配置新的日志传送:
- 日志来源:选择您的 WAF 配置。
- 目标平台:选择 Amazon S3。
- S3 存储桶:指定您创建的 S3 存储桶的名称。
- 区域:选择您的 S3 存储桶所在的 AWS 区域。
- 访问密钥 ID 和私有访问密钥:提供您生成的凭据。
- 日志格式:选择所需的日志格式(例如 JSON)。
传送频率:选择您希望的日志传送频率(例如,每 5 分钟)。
验证日志传送:
- 配置 LDS 后,请监控 S3 存储桶中是否有传入的日志文件。
使用 AWS S3 通过“SIEM 设置”>“Feed”设置 Feed
如需配置 Feed,请按以下步骤操作:
- 依次前往 SIEM 设置> Feed。
- 点击添加新 Feed。
- 在下一页上,点击配置单个 Feed。
- 在 Feed 名称字段中,输入 Feed 的名称(例如 Akamai WAF 日志)。
- 选择 Amazon S3 作为来源类型。
- 选择 Akamai WAF 作为日志类型。
- 点击下一步。
为以下输入参数指定值:
- 区域:Amazon S3 存储桶所在的区域。
- S3 URI:存储桶 URI。
s3:/BUCKET_NAME
替换以下内容:BUCKET_NAME
:相应存储桶的名称。
- URI is a:根据日志流配置选择 URI 类型:Single file | Directory | Directory which includes subdirectories。
- 来源删除选项:根据您的偏好设置选择删除选项。
- 访问密钥 ID:具有 S3 存储桶访问权限的用户访问密钥。
- 私有访问密钥:有权访问 S3 存储桶的用户私有密钥。
点击下一步。
在“Finalize”界面中查看新 Feed 配置,然后点击提交。
UDM 映射表
日志字段(升序) | UDM 映射 | 逻辑 |
---|---|---|
attackData.clientIP |
principal.ip ,principal.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.action ,security_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”的主账号。 |
cliIP 、cli_ip 、principal_ip |
principal.ip ,principal.asset.ip |
客户端 IP 地址。从 cliIP 或 cli_ip 或 principal_ip 中提取,具体取决于日志格式。 |
cp |
additional.fields |
CP 代码。提取自 cp 字段。已添加到键为“cp”的 additional.fields 中。 |
eventId |
metadata.product_log_id |
活动 ID。提取自 eventId 字段。 |
eventTime ,log_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.asn 或 AkamaiSiemASN 中提取,具体取决于日志格式。该值带有“ASN”前缀。 |
geo.city |
principal.location.city |
城市。从 geo.city 或 AkamaiSiemCity 中提取,具体取决于日志格式。 |
geo.country |
principal.location.country_or_region |
国家/地区。从 geo.country 或 AkamaiSiemContinent 中提取,具体取决于日志格式。 |
httpMessage.bytes |
network.sent_bytes |
HTTP 消息中发送的字节数。提取自 httpMessage.bytes 。 |
httpMessage.host |
target.hostname ,target.asset.hostname |
主机名。从 httpMessage.host 或 reqHost 中提取,具体取决于日志格式。 |
httpMessage.method |
network.http.method |
HTTP 方法。从 httpMessage.method 或 network_http_method 或 reqMethod 中提取,具体取决于日志格式。已转换为大写。 |
httpMessage.path |
target.url |
请求路径。从 httpMessage.path 或 target_url 或 reqPath 中提取,具体取决于日志格式。如果存在 httpMessage.query ,则会使用“?”分隔符将其附加到路径中。 |
httpMessage.port |
target.port |
端口。从 httpMessage.port 或 reqPort 中提取,具体取决于日志格式。 |
httpMessage.protocol |
不适用 | 供解析器用于确定协议。 |
httpMessage.query |
不适用 | 在解析器逻辑中使用,以在存在时附加到 httpMessage.path 。 |
httpMessage.requestId |
network.session_id |
请求 ID。从 httpMessage.requestId 或 reqId 中提取,具体取决于日志格式。 |
httpMessage.requestHeaders ,AkamaiSiemRequestHeaders |
additional.fields |
请求标头。从 httpMessage.requestHeaders 或 AkamaiSiemRequestHeaders 中提取,具体取决于日志格式。已添加到 additional.fields ,键为“AkamaiSiemRequestHeaders”。 |
httpMessage.responseHeaders ,AkamaiSiemResponseHeaders |
additional.fields |
响应标头。从 httpMessage.responseHeaders 或 AkamaiSiemResponseHeaders 中提取,具体取决于日志格式。已添加到 additional.fields ,键为“AkamaiSiemResponseHeaders”。 |
httpMessage.status 、AkamaiSiemResponseStatus 、network_http_response_code 、statusCode |
network.http.response_code |
HTTP 响应代码。从 httpMessage.status 或 AkamaiSiemResponseStatus 或 network_http_response_code 或 statusCode 中提取,具体取决于日志格式。 |
httpMessage.tls 、AkamaiSiemTLSVersion 、tlsVersion |
network.tls.version |
TLS 版本。从 httpMessage.tls 或 AkamaiSiemTLSVersion 或 tlsVersion 中提取,具体取决于日志格式。 |
httpMessage.useragent 、network_http_user_agent 、UA 、useragent |
network.http.user_agent |
用户代理。从 httpMessage.useragent 或 network_http_user_agent 或 UA 或 useragent 中提取,具体取决于日志格式。 |
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.hostname ,target.asset.hostname |
请求主机。提取自 reqHost 。 |
reqId |
metadata.product_log_id ,network.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_name ,security_result.about.resource.attribute.labels |
安全规则。提取自 securityRules 。第一部分映射到 rule_name ,其余部分作为标签添加,键分别为“non_deny_rules”和“deny_rule_format”。 |
statusCode |
network.http.response_code |
状态代码。提取自 statusCode 。 |
state |
principal.location.state ,target.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_version ,principal.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”;对于包含 eventId 或 eventData 字段的事件,请设置为“GENERIC_EVENT”;对于包含 cli_ip 或 p_ip 但不包含 reqHost 的事件,请设置为“STATUS_UPDATE”。 |
需要更多帮助?从社区成员和 Google SecOps 专业人士那里获得解答。