跳至内容

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

2 分钟阅读
0

我想启用 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 日志

完成以下步骤:

  1. 打开 AWS WAF 控制台
  2. 在导航窗格中的 AWS WAF 下,选择 Resources & protection packs(资源和保护包)。
  3. 找到您的保护包,然后选择 Logging(日志记录)旁边的 View and edit(查看和编辑)。
  4. Logging(日志记录)下,选择 Activate(激活)。
  5. 选择 Logging Destination(日志记录目标)。
  6. Logging destination(日志记录目标)的右侧窗格中,选择您的目标。
  7. 对于 Redacted fields(删除的字段),请选择要从日志中删除的字段。
  8. 对于 Filter logs(筛选日志),为要存储的请求添加筛选条件。
  9. 选择 Save(保存)。
AWS 官方已更新 10 个月前