如何将AWS WAF日志同时发送到CloudWatch日志组和S3

1 分钟阅读
内容级别:中级
1

启用AWS WAF日志时, 您可以选择将WAF日志发送到CloudWatch日志或S3存储桶, 但无法同时选择两者。这篇文章提供了解决方案。

简要说明

启用AWS WAF日志时,您可以选择将WAF日志发送到CloudWatch日志或S3存储桶,但无法同时选择两者。

解决方案

要将AWS WAF日志同时发送到CloudWatch日志日志组和S3存储桶,您需要执行以下步骤:

  1. 配置WAF将日志发送到CloudWatch日志
  2. 创建Amazon Data Firehose流, 并将流目标设置为S3存储桶
  3. 配置CloudWatch日志订阅,将日志流式传输到Amazon Data Firehose流

配置WAF将发送日志到CloudWatch日志的日志组:

  1. 在CloudWatch控制台中,进入日志组选项卡
  2. 创建一个以"aws-waf-logs"为前缀的日志组(如果没有此前缀,您将无法在下一步中选择它)
  3. 在WAF&Shield控制台中, 进入AWS WAF下的Web ACL选项卡
  4. 选择您要启用日志记录的webACL, 然后进入日志记录和指标选项卡
  5. 在日志记录部分, 单击编辑
  6. 选择您刚刚创建的日志组

Enter image description here

创建Amazon Data Firehose流并将目标设置为S3

  1. 在Amazon Data Firehose控制台中,在Firehose流下,单击创建流。
  2. 选择源和目标
  3. 源选择Direct PUT
  4. 目标选择Amazon S3
  5. Firehose流名称为<your stream name>
  6. 勾选解压缩:来自Amazon CloudWatch Logs的源记录(打开)
  7. 选择您希望放置日志的S3存储桶s3://<your bucket>
  8. 其余设置保留默认值

Enter image description here

配置CloudWatch日志订阅将日志流式传输到Amazon Data Firehose流

  1. 转到IAM控制台
  2. 创建新策略PermissionsForCWL,切换到JSON视图,在指定权限下粘贴以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "firehose:PutRecord",
"Resource": "arn:aws:firehose:*:037578582681:deliverystream/*"
}
]
}
  1. 创建一个新角色
  2. 在选择受信任的实体下, 选择自定义信任策略, 粘贴以下内容:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logs.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  1. 选择下一步
  2. 选择您刚才创建的PermissionsForCWL权限
  3. 选择下一步
  4. 为新角色命名CWLtoKinesisFirehoseRole
  5. 转到CloudWatch控制台, 进入日志组选项卡
  6. 选择waf日志组
  7. 选择订阅筛选器选项卡
  8. 在创建下拉菜单中,选择创建Data Firehose订阅筛选器
  9. 在Amazon Data Firehose流下,选择该流
  10. 在授予权限下, 选择IAM角色CWLtoKinesisFirehoseRole
  11. 在配置日志格式和筛选器下, 选择日志格式JSON和订阅筛选器模式, 粘贴:

{$.action = * }

此模式匹配action字段包含任何值的任何日志事件。 或者,您可以仅通过使用以下模式来流式传输已阻止的请求:

{$.action = "BLOCK"}

  1. 单击开始流式传输

Enter image description here

参考文档:https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#DestinationKinesisExample

没有评论