

**引入全新的主机体验 AWS WAF**

现在，您可以使用更新的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息，请参阅[使用控制台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# AWS WAF 登录目的地
<a name="logging-destinations"></a>

本部分将介绍您可以从日志中选择的 AWS WAF 日志记录选项。每个部分都提供了配置日志记录的指导，包括有关目标类型特定行为的信息。配置日志记录目标后，就可以向保护包（web ACL）日志配置提供其规范，以开始向其记录日志。

**Topics**
+ [CloudWatch 日志](logging-cw-logs.md)
+ [Amazon S3](logging-s3.md)
+ [Firehose](logging-kinesis.md)

# 向 Amazon 日志组发送保护包 (Web ACL) 流量 CloudWatch 日志
<a name="logging-cw-logs"></a>

本主题提供有关将保护包 (Web ACL) 流量日志发送到 CloudWatch 日志组的信息。

**注意**  
除了 AWS WAF使用费用外，您还需要支付登录费用。有关信息，请参阅[日志记录保护包（web ACL）流量信息的定价](logging-pricing.md)。

要向 Amazon CloudWatch Logs 发送日志，您需要创建一个 CloudWatch 日志日志组。启用登录功能时 AWS WAF，您需要提供日志组 ARN。为保护包 (Web ACL) 启用日志记录后，将日志 AWS WAF 传送到 CloudWatch 日志流中的日志日志组。

使用 CloudWatch 日志时，可以在 AWS WAF 控制台中浏览保护包 (Web ACL) 的日志。在保护包（web ACL）页面中，选择**日志记录见解**选项卡。此选项是对通过 CloudWatch 控制台为日志提供的 CloudWatch 日志见解的补充。

为 AWS WAF 保护包 (Web ACL) 日志配置日志组，该日志与保护包位于同一区域 (Web ACL)，并使用与管理保护包 (Web ACL) 相同的帐户。有关配置 CloudWatch 日志组的信息，请参阅[使用日志组和日志流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

## CloudWatch 日志日志组的配额
<a name="logging-cw-logs-quotas"></a>

CloudWatch 日志具有默认的最大吞吐量配额，该配额在区域内的所有日志组中共享，您可以请求增加该配额。如果您的日志要求太高而不适应当前的吞吐量设置，则会看到您账户的 `PutLogEvents` 节流指标。要在 Service Quotas 控制台中查看限制并申请提高配额，请参阅[CloudWatch 日志 PutLogEvents 配额](https://console.aws.amazon.com/servicequotas/home/services/logs/quotas/L-7E1FAE88)。

## 日志组命名
<a name="logging-cw-logs-naming"></a>

您的日志组名称必须以 `aws-waf-logs-` 开头，但可以按照您的喜好以任何后缀结尾，例如 `aws-waf-logs-testLogGroup2`。

所产生的 ARN 格式如下所示：

```
arn:aws:logs:Region:account-id:log-group:aws-waf-logs-log-group-suffix
```

日志流的命名格式如下所示：

```
Region_web-acl-name_log-stream-number
```

以下显示 `us-east-1` 区域中保护包（web ACL）`TestWebACL` 的日志流示例。

```
us-east-1_TestWebACL_0
```

## 将日志发布到 CloudWatch 日志所需的权限
<a name="logging-cw-logs-permissions"></a>

为日志组配置保护包 (Web ACL) 流量 CloudWatch 日志记录需要本节所述的权限设置。这些权限是在您使用 AWS WAF 完全访问托管策略之一时为您设置的，`AWSWAFConsoleFullAccess`或`AWSWAFFullAccess`。如果您想更精细地管理对日志和 AWS WAF 资源的访问权限，则可以自己设置权限。有关管理权限的信息，请参阅 *IAM 用户指南*中的[AWS 资源访问管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。有关 AWS WAF 托管策略的信息，请参阅 [AWS 的托管策略 AWS WAF](security-iam-awsmanpol.md)。

这些权限允许您更改保护包 (Web ACL) 日志配置，为 CloudWatch 日志配置日志传输，以及检索有关您的日志组的信息。这些权限必须附加到您用来管理 AWS WAF的用户。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "wafv2:PutLoggingConfiguration",
                "wafv2:DeleteLoggingConfiguration"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow",
            "Sid": "LoggingConfigurationAPI"
        },
        {
            "Sid": "WebACLLoggingCWL",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

如果允许对所有 AWS 资源执行操作，则会在策略中进行指示，并`"Resource"`设置为`"*"`。这意味着允许对*每个操作支持的所有 AWS 资源执行这些操作*。例如，只有 `wafv2` 日志记录配置资源支持操作 `wafv2:PutLoggingConfiguration`。

# 向 Amazon Simple Storage Service 存储桶发送保护包（web ACL）流量
<a name="logging-s3"></a>

本主题提供有关将保护包（web ACL）流量日志发送到 Amazon S3 存储桶的信息。

**注意**  
除了 AWS WAF使用费用外，您还需要支付登录费用。有关信息，请参阅[日志记录保护包（web ACL）流量信息的定价](logging-pricing.md)。

要将保护包（web ACL）流量日志发送到 Amazon S3，您需要使用与管理保护包（web ACL）相同的账户设置 Amazon S3 存储桶，并以 `aws-waf-logs-` 开头命名该存储桶。启用登录功能时 AWS WAF，您需要提供存储桶名称。有关创建日志记录桶的信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[创建桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)。

您可以使用Amazon Athena 交互式查询服务访问和分析您的 Amazon S3 日志。Athena 可让您轻松地使用标准 SQL 直接分析 Amazon S3 中的数据。只需在中执行一些操作 AWS 管理控制台，您就可以将 Athena 指向存储在 Amazon S3 中的数据，然后快速开始使用标准 SQL 来运行临时查询并获得结果。有关更多信息，请参阅 *Amazon Athen* a 用户指南中的[查询 AWS WAF 日志](https://docs.aws.amazon.com/athena/latest/ug/waf-logs.html)。有关其他亚马逊 Athena 查询示例，[请参阅网站上的 a waf-log-sample-athena ws-samples/-](https://github.com/aws-samples/waf-log-sample-athena-queries) queries。 GitHub 

**注意**  
AWS WAF 支持使用亚马逊 S3 存储桶对密钥类型亚马逊 S3 密钥 (SSE-S3) 和 AWS Key Management Service (SSE-KMS) 进行加密。 AWS KMS keys AWS WAF 不支持对由管理的 AWS Key Management Service 密钥进行加密 AWS。

保护包（web ACL）中的日志文件每隔 5 分钟将日志文件发布到 Amazon S3 存储桶。每个日志文件都包含前 5 分钟记录的流量日志记录。

日志文件的最大文件大小为 75 MB。如果日志文件在 5 分钟期间内达到文件大小限制，流日志会停止向它添加流日志记录，将它发布到 Amazon S3 存储桶，然后创建一个新的日志文件。

日志文件是压缩文件。如果使用 Amazon S3 控制台打开文件，Amazon S3 会解压日志记录并显示它们。如果您下载日志文件，则必须对其进行解压才能查看记录。

单个日志文件包含包含多条记录的交错条目。要查看保护包（web ACL）的所有日志文件，请查找按保护包（web ACL）名称、区域和账户 ID 汇总的条目。

## 命名要求和语法
<a name="logging-s3-naming"></a>

用于 AWS WAF 记录的存储桶名称必须以您想要的任何后缀开头，`aws-waf-logs-`并且可以以任何后缀结尾。例如 `aws-waf-logs-LOGGING-BUCKET-SUFFIX`。

**存储桶位置**  
存储桶位置使用以下语法：

```
s3://aws-waf-logs-LOGGING-BUCKET-SUFFIX/
```

**存储桶 ARN**  
存储桶的 Amazon 资源名称（ARN） 格式如下：

```
arn:aws:s3:::aws-waf-logs-LOGGING-BUCKET-SUFFIX
```

**带有前缀的存储桶位置**  
如果您在对象键名称中使用前缀来组织存储在存储桶中的数据，则可以在日志存储桶名称中提供前缀。

**注意**  
此选项在控制台中不可用。使用 AWS WAF APIs、CLI 或 AWS CloudFormation。

有关在 Amazon S3 中使用前缀的信息，请参阅 *Amazon Simple Storage Service 用户指南*中的[使用前缀组织对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)。

带有前缀的存储桶位置使用以下语法：

```
s3://aws-waf-logs-LOGGING-BUCKET-SUFFIX/KEY-NAME-PREFIX/
```

**存储桶文件夹和文件名**  
在存储桶中，按照您提供的任何前缀，您的 AWS WAF 日志将写入一个文件夹结构，该结构由您的账户 ID、区域、保护包 (Web ACL) 名称以及日期和时间决定。

```
AWSLogs/account-id/WAFLogs/Region/web-acl-name/YYYY/MM/dd/HH/mm
```

在文件夹中，日志文件名遵循类似的格式：

```
account-id_waflogs_Region_web-acl-name_timestamp_hash.log.gz
```

文件夹结构和日志文件名中使用的时间规范符合时间戳格式规范 `YYYYMMddTHHmmZ`。

下面显示了 Amazon S3 存储桶中名为 `aws-waf-logs-LOGGING-BUCKET-SUFFIX` 的存储桶的示例日志文件。那 AWS 账户 是`11111111111`。保护包（web ACL）是 `TEST-WEBACL`，区域是 `us-east-1`。

```
s3://aws-waf-logs-LOGGING-BUCKET-SUFFIX/AWSLogs/11111111111/WAFLogs/us-east-1/TEST-WEBACL/2021/10/28/19/50/11111111111_waflogs_us-east-1_TEST-WEBACL_20211028T1950Z_e0ca43b5.log.gz
```

**注意**  
用于 AWS WAF 记录的存储桶名称必须以您想要的任何后缀开头，`aws-waf-logs-`并且可以以任何后缀结尾。

## 向 Amazon S3 存储桶发布日志的所需的权限
<a name="logging-s3-permissions"></a>

为 Amazon S3 存储桶配置保护包（web ACL）流量日志需要以下权限设置。这些权限是在您使用 AWS WAF 完全访问托管策略 `AWSWAFConsoleFullAccess` 或 `AWSWAFFullAccess` 时为您设置的。如果您想进一步管理对日志记录和 AWS WAF 资源的访问权限，可以自己设置这些权限。有关管理权限的信息，请参阅*IAM 用户指南*中的 [AWS 资源的访问权限管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。有关 AWS WAF 托管策略的信息，请参阅[AWS 的托管策略 AWS WAF](security-iam-awsmanpol.md)。

以下权限允许您更改保护包（web ACL）日志配置，并配置向 Amazon S3 存储桶的日志传输。这些权限必须附加到您用来管理 AWS WAF的用户。

**注意**  
当你设置下面列出的权限时，你可能会在 AWS CloudTrail 日志中看到错误，表明访问被拒绝，但 AWS WAF 记录权限是正确的。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Action":[
            "wafv2:PutLoggingConfiguration",
            "wafv2:DeleteLoggingConfiguration"
         ],
         "Resource":[
            "*"
         ],
         "Effect":"Allow",
         "Sid":"LoggingConfigurationAPI"
      },
    {                                                                                                                                                                
       "Sid":"WebACLLogDelivery",                                                                                                                                    
       "Action":[                                                                                                                                                    
          "logs:CreateLogDelivery",                                                                                                                                  
          "logs:DeleteLogDelivery"                                                                                                                                   
       ],                                                                                                                                                            
       "Resource": "*",                                                                                                                                              
       "Effect":"Allow"                                                                                                                                              
    },  
      {
         "Sid":"WebACLLoggingS3",
         "Action":[
            "s3:PutBucketPolicy",
            "s3:GetBucketPolicy"
         ],
         "Resource": [
         "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix"
         ],
         "Effect":"Allow"
      }
   ]
}
```

------

如果允许对所有 AWS 资源执行操作，则会在策略中进行指示，并`"Resource"`设置为`"*"`。这意味着允许对*每个操作支持的所有 AWS 资源执行这些操作*。例如，只有 `wafv2` 日志记录配置资源支持操作 `wafv2:PutLoggingConfiguration`。

默认情况下，Amazon S3 存储桶以及其中包含的对象都是私有的。只有存储桶拥有者才能访问存储桶和其中存储的对象。不过，存储桶拥有者可以通过编写访问策略来向其他资源和用户授予访问权限。

如果创建日志的用户拥有存储桶，服务会自动向存储桶附加以下策略，以授予日志将日志发布到存储桶的权限。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AWSLogDeliveryWrite",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix/AWSLogs/123456789012/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control",
          "aws:SourceAccount": ["123456789012"]
        },
        "ArnLike": {
        "aws:SourceArn": ["arn:aws:logs:us-east-2:123456789012:*"]
        }
      }
    },
    {
      "Sid": "AWSLogDeliveryAclCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix",
      "Condition": {
        "StringEquals": {
        "aws:SourceAccount": ["123456789012"]
        },
        "ArnLike": {
        "aws:SourceArn": ["arn:aws:logs:us-east-2:123456789012:*"]
        }
      }
    }
  ]
}
```

------

**注意**  
用于 AWS WAF 记录的存储桶名称必须以您想要的任何后缀开头，`aws-waf-logs-`并且可以以任何后缀结尾。

如果创建日志的用户不拥有存储桶，也没有存储桶的 `GetBucketPolicy` 和 `PutBucketPolicy` 权限，日志创建操作会失败。在这种情况下，存储桶拥有者必须手动将上述策略添加到存储桶，并指定日志创建者的 AWS 账户 ID。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南* 中的[如何添加 S3 存储桶策略？](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html) 如果存储桶从多个账户接收日志，则将 `Resource` 元素条目添加到每个账户的 `AWSLogDeliveryWrite` 策略语句。

例如，以下存储桶策略允许 AWS 账户 `111122223333`向名为的存储桶发布日志`aws-waf-logs-LOGGING-BUCKET-SUFFIX`：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "AWSLogDeliveryWrite20150319",
    "Statement": [
        {
            "Sid": "AWSLogDeliveryWrite",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix/AWSLogs/111122223333/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control",
                    "aws:SourceAccount": ["111122223333"]
                },
                "ArnLike": {
                    "aws:SourceArn": ["arn:aws:logs:us-east-1:111122223333:*"]
                }
            }
        },
        {
            "Sid": "AWSLogDeliveryAclCheck",
            "Effect": "Allow",
            "Principal": {
                "Service": "delivery.logs.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::aws-waf-logs-amzn-s3-demo-destination-bucket-suffix",
            "Condition": {
                "StringEquals": {
                "aws:SourceAccount": ["111122223333"]
                },
                "ArnLike": {
                "aws:SourceArn": ["arn:aws:logs:us-east-1:111122223333:*"]
                }
            }
        }
    ]
}
```

------

**注意**  
某些情况下，如果未向 `delivery.logs.amazonaws.com` 授予 `s3:ListBucket` 权限，可能会在 AWS CloudTrail 中看到 `AccessDenied` 错误。为避免 CloudTrail 日志中出现这些错误，您必须向授予`s3:ListBucket`权限，`delivery.logs.amazonaws.com`并且必须包含在前面的存储桶策略中设置的`s3:GetBucketAcl `权限中显示的`Condition`参数。为方便起见，可直接将 `AWSLogDeliveryAclCheck` 更新为 `“Action”: [“s3:GetBucketAcl”, “s3:ListBucket”]`，而不是创建新的 `Statement`。

## 与 KMS 密钥 AWS Key Management Service 配合使用的权限
<a name="logging-s3-permissions-encrypt-kms"></a>

如果您的登录目标使用服务器端加密，密钥存储在 AWS Key Management Service (SSE-KMS) 中，并且您使用客户托管密钥（KMS 密钥），则必须授予使用您的 KMS 密钥的 AWS WAF 权限。为此，您需要为所选目标的 KMS 密钥添加密钥政策。这允许 AWS WAF 日志记录将您的日志文件写入您的目标。

将以下密钥策略添加到您的 KMS 密钥中，以允许登录 AWS WAF 到您的 Amazon S3 存储桶。

```
{
    "Sid": "Allow AWS WAF to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": [
            "delivery.logs.amazonaws.com"
        ]
    },
    "Action": "kms:GenerateDataKey*",
    "Resource": "*"
}
```

## 访问 Amazon S3 日志文件所需的权限
<a name="logging-s3-log-file-access"></a>

Amazon S3 使用访问控制列表 (ACLs) 来管理对由日志创建的 AWS WAF 日志文件的访问权限。默认情况下，存储桶拥有者对每个日志文件具有 `FULL_CONTROL` 权限。如果日志传输拥有者与存储桶拥有者不同，则没有权限。日志传输账户具有 `READ` 和 `WRITE` 权限。有关更多信息，请参阅 *Amazon Simple Storage Service 用户指南* 中的[访问控制列表 (ACL) 概述](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

# 将保护包（web ACL）流量日志发送到 Amazon Data Firehose 传输流
<a name="logging-kinesis"></a>

本节提供将保护包（web ACL）流量日志发送到 Amazon Data Firehose 传输流的信息。

**注意**  
除了 AWS WAF使用费用外，您还需要支付登录费用。有关信息，请参阅[日志记录保护包（web ACL）流量信息的定价](logging-pricing.md)。

要将日志发送到 Amazon Data Firehose，请将保护包（web ACL）中的日志发送到您在 Firehose 中配置的 Amazon Data Firehose 传输流。启用日志记录后，通过 Firehose 的 HTTPS 端点将日志 AWS WAF 传送到您的存储目标。

一个 AWS WAF 日志等同于一个 Firehose 记录。如果您通常每秒接收 1 万个请求并启用了完整日志，您的 Firehose 中应具有每秒 1 万个记录的设置。如果您未正确配置 Firehose，则 AWS WAF 不会记录所有日志。有关更多信息，请参阅 [Amazon Kinesis Data Firehose 限额](https://docs.aws.amazon.com/firehose/latest/dev/limits.html)。

有关如何使用 Amazon Data Firehose 传输流以及如何查看存储的日志的信息，请参阅[什么是 Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) 

有关创建传输流的信息，请参阅[创建 Amazon Data Firehose 传输流](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html)。

## 为保护包（web ACL）配置 Amazon Data Firehose 传输流
<a name="logging-kinesis-configuration"></a>

如下所示，为保护包（web ACL）配置 Amazon Data Firehose 传输流。
+ 使用与管理保护包（web ACL）相同的账户以进行创建。
+ 将其创建在与保护包（web ACL）相同的区域中。如果您要为 Amazon 捕获日志 CloudFront，请在美国东部（弗吉尼亚北部）地区创建 firehose。`us-east-1`
+ 为数据消防队指定一个以前缀 `aws-waf-logs-` 开头的名称。例如 `aws-waf-logs-us-east-2-analytics`。
+ 将其配置为直接放置，这样应用程序就可以直接访问传送流。在 [Amazon Data Firehose 控制台](https://console.aws.amazon.com/firehose)中，对于传输流**来源**设置，选择 **Direct PUT 或其他来源**。通过 API，将传送流属性 `DeliveryStreamType` 设置 为 `DirectPut`。
**注意**  
请勿使用 `Kinesis stream` 作为来源。

## 将日志发布到 Amazon Data Firehose 传输流所需的权限
<a name="logging-kinesis-permissions"></a>

要了解 Kinesis Data Firehose 配置所需的权限，[请参阅 使用 Amazon Kinesis Data Firehose 控制访问](https://docs.aws.amazon.com/firehose/latest/dev/controlling-access.html)。

您必须拥有以下权限才能成功启用 Amazon Data Firehose 传输流的保护包（web ACL）日志。
+ `iam:CreateServiceLinkedRole`
+ `firehose:ListDeliveryStreams`
+ `wafv2:PutLoggingConfiguration`

有关服务相关角色以及 `iam:CreateServiceLinkedRole` 权限的信息，请参阅 [将服务相关角色用于 AWS WAF](using-service-linked-roles.md)。