如何启用 AWS WAF 日志记录并将日志发送到 CloudWatch、Amazon S3 或 Firehose?
我想启用 AWS WAF 日志记录并将日志发送到 Amazon CloudWatch、Amazon Simple Storage Service (Amazon S3) 或 Amazon Data Firehose。
简短描述
首先,为您的 AWS WAF Web 访问控制列表 (Web ACL) 选择支持的目标。您必须设置必要的权限才能启用 AWS WAF 日志。AWS WAF 支持以下日志目标:
然后,为您的目标启用 AWS WAF 日志。
解决方法
先决条件:
- 日志组名称必须以 aws-waf-logs- 前缀开头。
- 日志组必须与您的 Web ACL 位于相同的 AWS 账户和 AWS 区域中。对于与 Amazon CloudFront 关联的全球 Web ACL,日志组必须位于**美国东部(弗吉尼亚州北部)**区域。
- 查看 CloudWatch Logs 日志组和 Firehose 配额,您必须遵守这些配额。
为 CloudWatch Logs 日志组配置权限
要么创建新的日志组,要么使用现有的日志组。使用 CloudWatch Logs Insights 分析您的 AWS WAF 日志。
对在日志组中创建的日志流使用 Region_web-acl-name_log-stream-number 格式。
配置向 CloudWatch Logs 发布日志所需的权限。当您的用户拥有所需的权限时,CloudWatch 会自动向日志组添加以下基于资源的策略,允许 AWS WAF 向其发送日志:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite20150319", "Effect": "Allow", "Principal": { "Service": ["delivery.logs.amazonaws.com"] }, "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": ["arn:aws:logs:us-east-1:0123456789:log-group:my-log-group:log-stream:*"], "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } } ] }
**注意:**将 SourceAccount 替换为您的账号,将 SourceARN 替换为您的 Amazon 资源名称 (ARN)。
如果您在日志组中看不到日志,请使用 DescribeResourcePolicies API 来验证基于资源的策略是否具有必要的权限。要编辑您的基于资源的策略,请使用 PutResourcePolicy API。
有关日志记录权限的详细信息,请参阅启用来自 AWS 服务的日志记录。
为 Amazon S3 存储桶配置权限
当您将 AWS WAF 日志发送到 S3 存储桶时,您可以使用 Amazon Athena 分析您的 AWS WAF 日志。
配置向 S3 存储桶发布日志的所需的权限。当您的用户拥有所需的权限时,AWS 会自动向存储桶添加以下策略,允许 AWS WAF 向其传输日志:
{ "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-bucket/AWSLogs/account-ID/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } } ] }
**注意:**将 SourceAccount 替换为您的账号,将 SourceARN 替换为您的 ARN。
如果您未看到存储桶中的日志,请使用 GetBucketPolicy API 验证您的存储桶策略是否具有必要的权限。要编辑您的存储桶策略,请使用 PutBucketPolicy API。
要将日志发送到其他账户或区域,请参阅如何将 AWS WAF 日志发送到位于集中式日志账户的 Amazon S3 存储桶中?
为 Firehose 配置权限
配置 Firehose 传输流。保持 Data transformation(数据转换)和 Record format conversion(记录格式转换)选项处于关闭状态。要配置传输流的目标,请参阅配置目标设置。有关详细信息,请参阅从控制台创建 Firehose 流。
**注意:**一个 AWS WAF 日志等同于一条 Firehose 记录。
配置向 Firehose 传输流发布日志所需的权限。有关服务相关角色和 iam:CreateServiceLinkedRole 权限的信息,请参阅将服务相关角色用于 AWS WAF。
启用 AWS WAF 日志
完成以下步骤:
- 打开 AWS WAF 控制台。
- 在导航窗格中的 AWS WAF 下,选择 Resources & protection packs(资源和保护包)。
- 找到您的保护包,然后选择 Logging(日志记录)旁边的 View and edit(查看和编辑)。
- 在 Logging(日志记录)下,选择 Activate(激活)。
- 选择 Logging Destination(日志记录目标)。
- 在 Logging destination(日志记录目标)的右侧窗格中,选择您的目标。
- 对于 Redacted fields(删除的字段),请选择要从日志中删除的字段。
- 对于 Filter logs(筛选日志),为要存储的请求添加筛选条件。
- 选择 Save(保存)。
相关内容
AWS 官方已更新 3 年前
