如何将AWS WAF日志同时发送到CloudWatch日志组和S3
1 分钟阅读
内容级别:中级
1
启用AWS WAF日志时, 您可以选择将WAF日志发送到CloudWatch日志或S3存储桶, 但无法同时选择两者。这篇文章提供了解决方案。
简要说明
启用AWS WAF日志时,您可以选择将WAF日志发送到CloudWatch日志或S3存储桶,但无法同时选择两者。
解决方案
要将AWS WAF日志同时发送到CloudWatch日志日志组和S3存储桶,您需要执行以下步骤:
- 配置WAF将日志发送到CloudWatch日志
- 创建Amazon Data Firehose流, 并将流目标设置为S3存储桶
- 配置CloudWatch日志订阅,将日志流式传输到Amazon Data Firehose流
配置WAF将发送日志到CloudWatch日志的日志组:
- 在CloudWatch控制台中,进入日志组选项卡
- 创建一个以"aws-waf-logs"为前缀的日志组(如果没有此前缀,您将无法在下一步中选择它)
- 在WAF&Shield控制台中, 进入AWS WAF下的Web ACL选项卡
- 选择您要启用日志记录的webACL, 然后进入日志记录和指标选项卡
- 在日志记录部分, 单击编辑
- 选择您刚刚创建的日志组
创建Amazon Data Firehose流并将目标设置为S3
- 在Amazon Data Firehose控制台中,在Firehose流下,单击创建流。
- 选择源和目标
- 源选择Direct PUT
- 目标选择Amazon S3
- Firehose流名称为<your stream name>
- 勾选解压缩:来自Amazon CloudWatch Logs的源记录(打开)
- 选择您希望放置日志的S3存储桶s3://<your bucket>
- 其余设置保留默认值
配置CloudWatch日志订阅将日志流式传输到Amazon Data Firehose流
- 转到IAM控制台
- 创建新策略PermissionsForCWL,切换到JSON视图,在指定权限下粘贴以下权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "firehose:PutRecord", "Resource": "arn:aws:firehose:*:037578582681:deliverystream/*" } ] }
- 创建一个新角色
- 在选择受信任的实体下, 选择自定义信任策略, 粘贴以下内容:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
- 选择下一步
- 选择您刚才创建的PermissionsForCWL权限
- 选择下一步
- 为新角色命名CWLtoKinesisFirehoseRole
- 转到CloudWatch控制台, 进入日志组选项卡
- 选择waf日志组
- 选择订阅筛选器选项卡
- 在创建下拉菜单中,选择创建Data Firehose订阅筛选器
- 在Amazon Data Firehose流下,选择该流
- 在授予权限下, 选择IAM角色CWLtoKinesisFirehoseRole
- 在配置日志格式和筛选器下, 选择日志格式JSON和订阅筛选器模式, 粘贴:
{$.action = * }
此模式匹配action字段包含任何值的任何日志事件。 或者,您可以仅通过使用以下模式来流式传输已阻止的请求:
{$.action = "BLOCK"}
- 单击开始流式传输
没有评论