如何启用 AWS WAF 日志记录并将日志发送到 CloudWatch、Amazon S3 或 Kinesis Data Firehose?

3 分钟阅读
0

我想启用 AWS WAF 日志记录并将日志发送到 Amazon CloudWatch、Amazon Simple Storage Service(Amazon S3)或 Amazon Kinesis Data Firehose。如何启用 AWS WAF 日志,需要哪些权限?

简述

首先,为您的 AWS WAF Web ACL 选择支持的目标。AWS WAF 支持以下日志目标:

请确保您拥有启用 AWS WAF 日志所需的资源权限。然后,使用您选择的目标启用 AWS WAF 日志。

解决方案

支持在以下目标中存储您的 AWS WAF 日志:

Amazon CloudWatch Logs

要将日志发送到 CloudWatch 日志组,请在启用 AWS WAF 日志时选择 CloudWatch Logs 日志组作为目标。

要么创建新的日志组,要么使用现有的日志组。启用后,AWS WAF 日志将发送到日志流中的日志组。您可以使用 Logs Insights 分析这些日志。有关更多信息,请参阅在分析存储在 CloudWatch 或 Amazon S3 中的 AWS WAF 日志时,我有哪些选项?

使用 CloudWatch Logs 时,请留意以下几点:

  • 日志组名称必须以 aws-waf-logs- 前缀开头。
  • 日志组必须与您的 Web ACL 位于相同的 AWS 账户和区域中。对于与 CloudFront 关联的全球 Web ACL,日志组必须位于**美国东部(弗吉尼亚州北部)**区域。
  • 日志组有存储日志的日志组配额
  • 在日志组中创建的日志流采用以下格式:
Region_web-acl-name_log-stream-number

必要的权限

使用 CloudWatch Logs 日志组启用 AWS WAF 日志的账户必须具有以下权限:

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • logs:PutResourcePolicy
  • logs:DescribeResourcePolicies
  • logs:DescribeLogGroups

这些权限是更改 Web ACL 日志记录配置、配置日志传输以及检索和编辑日志组权限所必需的。这些权限必须附加到管理 AWS WAF 的用户。

分配这些权限后,AWS 会自动在 CloudWatch Logs 的 resource-based policies 中添加以下策略。这允许传输服务将日志推送到 CloudWatch Logs 日志组。
**注意:**根据以下策略,账号和 Amazon 资源名称(ARN)将特定于您的账户。

{
  "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:*"]
        }
      }
    }
  ]
}

如果您在日志组中看不到日志,请使用 DescribeResourcePolicies API 检查是否已将上述必要权限添加到日志组的基于资源的策略中。您可以使用 PutResourcePolicy 编辑日志服务的基于资源的策略。

有关日志组权限的更多信息,请参阅启用特定AWS服务的日志记录

Amazon S3 桶

要将日志发送到 Amazon S3 桶,请在启用 AWS WAF 日志时选择 S3 桶作为目标。

Web ACL 每隔五分钟将日志文件发布到 S3 桶。最大文件大小为 75 兆字节(MB)。如果文件大小超过最大值,则会生成一个新日志文件。启用日志后,您可以使用 Amazon Athena 对其进行分析。有关更多信息,请参阅Querying AWS WAF logs

AWS WAF 日志记录的 S3 桶名称必须以前缀 aws-waf-logs- 开头。

必要的权限

使用 S3 桶启用 AWS WAF 日志的账户必须具有以下权限:

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • logs:CreateLogDelivery
  • logs:DeleteLogDelivery
  • s3:PutBucketPolicy
  • s3:GetBucketPolicy

这些权限是启用 AWS WAF 日志记录和为 S3 桶配置日志传输所必需的。在检索和编辑桶策略以允许将 AWS WAF 日志传输到 S3 桶时也需要这些权限。

分配这些权限后,以下示例策略将自动添加到桶策略中,以允许将日志传输到 S3 桶:
**注意:**根据以下策略,账号和 Amazon 资源名称(ARN)特定于您的账户。

{
  "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:*"
          ]
        }
      }
    }
  ]
}

如果您在 S3 桶中看不到 AWS WAF 日志,请使用 GetBucketPolicy API 检查桶策略中是否添加了必要的权限。您可以使用 PutBucketPolicy API 编辑桶策略。

要将日志发送到其他 AWS 账户或区域,请参阅如何将 AWS WAF 日志发送到位于集中式日志账户的 Amazon S3 桶中?

Amazon Kinesis Data Firehose

要将 AWS WAF 日志发送到 Kinesis Data Firehose 流,您必须创建一个传输流。传输流有不同的存储日志目标

使用 Kinesis Data Firehose 时,请留意以下几点:

  • Kinesis Data Firehose 名称必须以前缀 aws-waf-logs- 开头。
  • Kinesis Data Firehose 传输流必须与您的 Web ACL 位于相同的 AWS 账户和区域。对于与 CloudFront 关联的全球 Web ACL,Kinesis Data Firehose 必须位于**美国东部(弗吉尼亚州北部)**区域。
  • 一个 AWS WAF 日志相当于一个 Kinesis Data Firehose 记录,并且受 Amazon Kinesis Data Firehose 配额的约束。
    **重要信息:**如果您每秒收到的请求超过 10,000 个,则您的数据会受到限制,系统不会记录所有请求。为防止受到限制,您必须申请增加 Kinesis Data Firehose 的配额

必要的权限

使用 Kinesis Data Firehose 目标启用 AWS WAF 日志的账户必须具有以下权限:

  • wafv2:PutLoggingConfiguration
  • wafv2:DeleteLoggingConfiguration
  • iam:CreateServiceLinkedRole
  • firehose:ListDeliveryStreams

有关服务相关角色和 iam:CreateServiceLinkedRole 权限的信息,请参阅Using service-linked roles for AWS WAF

要创建 Kinesis Data Firehose 传输流,请按照以下步骤操作:

  1. 打开 Amazon Kinesis 控制台
  2. 对于区域,选择创建 Web ACL 的 AWS 区域。
    注意:如果您为 Amazon CloudFront 设置了 Web ACL,请选择全球
  3. 在导航窗格中,选择传输流
  4. 选择创建传输流
  5. 对于来源,选择 Direct PUT
  6. 对于目标,从 Kinesis Firehose 的可用目标中选择。
  7. 传输流名称中,输入以 aws-waf-logs- 开头的传输流名称。
  8. 确认数据转换记录格式转换已禁用
  9. 根据您在第 6 步中选择的目标方法输入目标设置
  10. (可选)对于缓冲区提示、压缩和加密,请根据您的规格进行配置或保留默认设置。
  11. (可选)对于高级设置,请根据您的规格进行配置或保留默认设置。
  12. 查看传输流的设置。如果设置符合您的规格,请选择创建传输流

启用 AWS WAF 日志

在您决定要将 AWS WAF 日志发送到的目标后,请执行以下操作启用 AWS WAF 日志记录:

  1. 打开 AWS WAF 控制台
  2. 对于区域,选择创建 Web ACL 的 AWS 区域。
    注意:如果您为 Amazon CloudFront 设置了 Web ACL,请选择全球
  3. 选择您的 Web ACL。
  4. 选择日志记录和指标,然后选择启用
  5. 从支持的目标中选择您要存储 AWS WAF 日志的目标
  6. 对于删除的字段,请选择要从日志中删除的字段。
  7. 对于筛选日志,添加过滤器以选择要存储的请求。
  8. 选择保存
AWS 官方
AWS 官方已更新 2 年前