

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

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

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

# 保护包 (Web ACL) 流量的数据 AWS WAF 保护和日志记录
<a name="waf-data-protection-and-logging"></a>

本节介绍可与之配合使用的数据记录、收集和保护选项 AWS WAF。这些选项如下所示：
+ **日志记录**：您可以配置保护包（web ACL），以将 web 请求流量的日志发送到您选择的日志记录目标。您可以为此选项配置字段编辑和筛选。日志记录使用在应用任何数据保护设置后可用的数据。

  有关此选项的更多信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。
+ **请求采样**：可以将保护包（web ACL）配置为对其评估的 web 请求进行采样，以便了解应用程序正在接收的流量类型。请求采样使用在应用任何数据保护设置后可用的数据。

  有关此选项的更多信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。
+ **Amazon Security Lake**：可以配置 Security Lake 来收集保护包（web ACL）数据。Security Lake 从各种 AWS 来源收集日志和事件数据，用于标准化、分析和管理。Security Lake 从应用任何数据保护设置后的可用数据中进行收集。

  有关此选项的信息，请参阅[什么是 Amazon 安全湖？](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html) 以及 *Amazon Security Lake 用户指南*中的[从 AWS 服务中收集数据](https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html)。

  AWS WAF 不会向您收取使用此选项的费用。有关定价信息，请参阅《Amazon Security Lake 用户指南》**中的 [Security Lake 定价](https://aws.amazon.com/security-lake/pricing/)和[如何确定 Amazon Security Lake 的定价](https://docs.aws.amazon.com/security-lake/latest/userguide/estimating-costs.html)。
+ **数据保护**：您可以在两个级别上为 web 流量数据配置数据保护：
  + **保护包（web ACL）的数据保护**：您可以为每个保护包（web ACL）配置数据保护，以便您将特定 web 流量数据替换为静态字符串或加密哈希。此级别的数据保护可集中配置，同时适用于所有日志记录和数据收集选项。

    有关此选项的更多信息，请参阅 [数据保护](data-protection-masking.md)。
  + **日志记录编辑和筛选**：仅限于日志记录，您可以配置一些 web 流量数据，以便从日志中进行修改，也可以对记录的数据进行筛选。此选项是您配置的任何数据保护设置的补充，它仅影响 AWS WAF 发送到已配置的日志记录目标的数据。

**Topics**
+ [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)
+ [数据保护](data-protection-masking.md)

# 记录 AWS WAF 保护包 (Web ACL) 流量
<a name="logging"></a>

本节介绍 AWS WAF 保护包 (Web ACLs) 的日志记录选项。

您可以启用日志记录，以获取有关 web ACL 对流量进行分析的详细信息。记录的信息包括从您的 AWS 资源 AWS WAF 收到网络请求的时间、有关该请求的详细信息以及请求匹配的规则的详细信息。您可以将保护包 (Web ACL) 日志发送到亚马逊 CloudWatch 日志组、亚马逊简单存储服务 (Amazon S3) 存储桶或亚马逊 Data Firehose 传输流。

除了可以为保护包 (Web ACLs) 启用的日志外， AWS 还使用所处理的网站或应用程序流量的服务日志 AWS WAF 为 AWS 客户和服务提供支持并保护其安全。

**注意**  
保护包 (Web ACL) 日志配置仅影响日 AWS WAF 志。特别是，经过编辑的日志字段配置对请求采样或 Security Lake 数据收集没有影响。您可以通过配置保护包（web ACL）数据保护，将字段排除在收集或采样之外。除数据保护以外，Security Lake 数据收集完全通过 Security Lake 服务进行配置。

**Topics**
+ [日志记录保护包（web ACL）流量信息的定价](logging-pricing.md)
+ [AWS WAF 登录目的地](logging-destinations.md)
+ [为保护包（web ACL）配置日志记录](logging-management-configure.md)
+ [查找保护包（web ACL）记录](logging-management.md)
+ [保护包（web ACL）流量的日志字段](logging-fields.md)
+ [保护包（web ACL）流量的日志示例](logging-examples.md)

**其他数据收集和分析选项**  
除了日志记录之外，还可以启用以下数据收集和分析选项：
+ **Amazon Security Lake**：可以配置 Security Lake 来收集保护包（web ACL）数据。Security Lake 会从各种 来源收集日志和事件数据进行标准化、分析和管理。有关此选项的信息，请参阅[什么是 Amazon Security Lake？](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html) 以及 *Amazon Security Lake 用户指南*中的[从 AWS 服务中收集数据](https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html)。

  AWS WAF 不会向您收取使用此选项的费用。有关定价信息，请参阅《Amazon Security Lake 用户指南》**中的 [Security Lake 定价](https://aws.amazon.com/security-lake/pricing/)和[如何确定 Amazon Security Lake 的定价](https://docs.aws.amazon.com/security-lake/latest/userguide/estimating-costs.html)。
+ **请求采样**：可以将保护包（web ACL）配置为对其评估的 web 请求进行采样，以便了解应用程序正在接收的流量类型。有关此选项的更多信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

# 日志记录保护包（web ACL）流量信息的定价
<a name="logging-pricing"></a>

本节介绍使用保护包（web ACL）流量日志的定价注意事项。

根据与每种日志目标类型相关的费用，您需要为记录保护包（web ACL）流量信息付费。这些费用是对 AWS WAF使用费的补充。您的费用可能会有所不同，具体取决于您选择的目标类型和记录的数据量等因素。

以下提供了指向每种日志记录目标类型的定价信息的链接：
+ **CloudWatch 日志**-费用适用于已售日志传输。参见 [Amazon CloudWatch 日志定价](https://aws.amazon.com/cloudwatch/pricing/)。在 “**付费套餐**” 下，选择 “**日志**” 选项卡，然后在 “**Vended** Logs” 下，查看** CloudWatch 日志传送**信息。
+ **Amazon S3 存储桶** — Amazon S3 费用是向亚马逊 S3 存储桶交付日志和使用 Amazon S3 存储桶的合并费用。 CloudWatch 
  + 有关 Amazon S3，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。
  + 有关 CloudWatch 向 Amazon S3 发送日志的信息，请参阅 Ama [zon CloudWatch 日志定价](https://aws.amazon.com/cloudwatch/pricing/)。在**付费套餐**下，选择**日志**选项卡，然后在**提供的日志**下，查看**传输到 S3**的信息
+ **Firehose**：请参阅 [Amazon Data Firehose 定价](https://aws.amazon.com/kinesis/data-firehose/pricing/)。

有关 AWS WAF 定价的信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

# 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)。

# 为保护包（web ACL）配置日志记录
<a name="logging-management-configure"></a>

本节提供为保护包（web ACL）配置数据保护的说明。

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

要为保护包（web ACL）启用日志记录，您必须已配置将要使用的日志记录目标。有关您的目标选择和每个目标的要求的信息，请参阅 [AWS WAF 登录目的地](logging-destinations.md)。

**为保护包（web ACL）配置日志记录**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/wafv2/homev](https://console.aws.amazon.com/wafv2/homev2) 2 上打开主 AWS WAF 机。

1. 在导航窗格中，选择**保护包 (Web ACLs)**。

1. 选择您要启用日志记录的保护包（web ACL）名称。控制台会将您转到保护包（web ACL）的描述，您可以在其中对其进行编辑。

1. 在**日志记录和指标**选项卡上，选择**启用日志记录**。

1. 选择日志记录目标类型，然后选择您配置的日志记录目标。必须选择名称以 `aws-waf-logs-` 开头的日志记录目标。

1. （可选）如果您不希望某些字段包含在日志中，请对其进行编辑。选择要编辑的字段，然后选择**添加**。根据需要重复操作来编辑其他字段。编辑后的字段在日志中显示为 `xxx`。
**注意**  
此设置对请求采样无影响。您可以通过配置保护包（web ACL）数据保护或禁用保护包（web ACL）的采样，将字段排除在请求采样之外。

1. （可选）如果您不想向日志发送所有请求，请添加您的筛选条件和行为。在**筛选日志**下，对于要应用的每个筛选器，选择**添加筛选条件**，然后选择您的筛选条件并指定是要保留还是删除符合条件的请求。添加完筛选条件后，如果需要，可以修改**默认日志记录行为**。
**注意**  
如果添加多个过滤器，则从顶部开始对其 AWS WAF 进行评估。

1. 选择**启用日志记录**。
**注意**  
成功启用日志记录后， AWS WAF 将创建一个服务相关角色，该角色具有将日志写入日志目标所需的权限。有关更多信息，请参阅 [将服务相关角色用于 AWS WAF](using-service-linked-roles.md)。

# 查找保护包（web ACL）记录
<a name="logging-management"></a>

本节介绍如何查找保护包（web ACL）记录。

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

**如果在日志中找不到日志记录**  
在极少数情况下， AWS WAF 日志传输可能会降至100％以下，而日志的交付会尽力而为。该 AWS WAF 架构优先考虑应用程序的安全性，而不是所有其他考虑因素。某些情况下，例如，当日志流遇到流量节流时，这可能会导致记录被丢弃。这不应该影响多个记录。如果您注意到一些丢失的日志条目，请与 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)联系。

在保护包 (Web ACL) 的日志配置中，您可以自定义 AWS WAF 发送到日志的内容。
+ **字段密文**：对于使用相应匹配设置的规则，您可以从日志记录中删除以下字段：**URI 路径**、**查询字符串**、**单标头**和 **HTTP 方法**。编辑后的字段在日志中显示为 `REDACTED`。例如，如果您在日志中编辑**查询字符串**字段，则该字段将与使用**查询字符串**匹配组件设置的所有规则的 `REDACTED` 一样列出。编辑仅适用于您在规则中指定匹配的请求组件，因此**单个标头**组件的编辑不适用于在**标头**上匹配的规则。有关日志字段的列表，请参阅 [保护包（web ACL）流量的日志字段](logging-fields.md)。
**注意**  
此设置对请求采样无影响。您可以通过配置保护包（web ACL）数据保护或禁用保护包（web ACL）的采样，将字段排除在请求采样之外。
+ **日志筛选** – 您可以添加筛选功能以指定哪些 Web 请求保留在日志中，哪些将丢弃的筛选。您可以根据在 Web 请求评估期间 AWS WAF 适用的设置进行筛选。您可以按以下设置进行筛选：
  + **完全限定的标签**：完全限定的标签具有前缀、可选命名空间和标签名称。前缀用于标识添加标签的规则的规则组或保护包（web ACL）上下文。有关标签的信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。
  + **规则操作**：您可以根据任何普通规则操作设置进行筛选，也可以根据规则组规则的旧版 `EXCLUDED_AS_COUNT` 覆盖选项进行筛选。有关规则操作设置的信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。有关规则组规则的当前和旧规则操作覆盖的信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。
    + 普通规则操作筛选器适用于在规则中配置的操作，也适用于使用当前选项配置的用于覆盖规则组规则操作的操作。
    + `EXCLUDED_AS_COUNT` 日志筛选器与 `Count` 操作日志筛选器重叠。`EXCLUDED_AS_COUNT` 筛选当前和旧版选项，用于将规则组规则操作覆盖为 Count。

# 保护包（web ACL）流量的日志字段
<a name="logging-fields"></a>

以下列表介绍了可能的日志字段。

**action**  
 AWS WAF 应用于请求的终止操作。这表示允许、阻止、验证码或质询。当 web 请求不包含有效令牌时，CAPTCHA 和 Challenge 操作将终止。

**args**  
查询字符串。

**captchaResponse**  
请求的 CAPTCHA 操作状态，在对请求应用 CAPTCHA 操作时填充。无论是 CAPTCHA 终止操作还是非终止操作，都将填充此字段。如果请求多次应用 CAPTCHA 操作，则从上次应用此操作时填充此字段。  
当请求不包含令牌或者令牌无效或已过期时，该 CAPTCHA 操作将终止 web 请求检查。如果 CAPTCHA 操作为终止操作，此字段包括响应代码和失败原因。如果操作为非终止操作，则此字段包含一个验算时间戳。要区分终止操作和非终止操作，可以在此字段中筛选非空 `failureReason` 属性。

**cfDistributionTenant我是**  
与 Web 请求关联的 CloudFront 分发租户的标识符。此字段为可选字段，仅适用于与 CloudFront 分发租户关联的保护包 (Web ACLs)。

**challengeResponses**  
请求的质询操作状态，在对请求应用 Challenge 操作时填充。无论是 Challenge 终止操作还是非终止操作，都将填充此字段。如果请求多次应用 Challenge 操作，则从上次应用此操作时填充此字段。  
当请求不包含令牌或者令牌无效或已过期时，该 Challenge 操作将终止 web 请求检查。如果 Challenge 操作为终止操作，此字段包括响应代码和失败原因。如果操作为非终止操作，则此字段包含一个验算时间戳。要区分终止操作和非终止操作，可以在此字段中筛选非空 `failureReason` 属性。

**clientAsn**  
自治系统编号（ASN），与 web 请求来源的 IP 地址相关联。  
只有在使用 AS@@ **N 匹配语句时，才会将 Clien** tAsn 登录到 AWS WAF 日志中。否则不会记录此字段。

**clientIp**  
发送请求的客户端 IP 地址。

**country**  
请求的源国家/地区。 AWS WAF 如果无法确定原产国，则会将此字段设置为`-`。

**country**  
请求的源国家/地区。 AWS WAF 如果无法确定原产国，则会将此字段设置为`-`。

**excludedRules**  
仅用于规则组规则。规则组中您排除的规则列表。这些规则的操作设置为 Count。  
如果您使用覆盖规则操作选项覆盖要计数的规则，则此处不会列出匹配项。它们被列为操作对 `action` 和 `overriddenAction`.    
exclusionType  
一种类型，指示排除的规则具有操作 Count。  
ruleId  
规则组中排除的规则 ID。

**formatVersion**  
日志的格式版本。

**forwardedAsn**  
自治系统编号（ASN），与转发 web 请求的实体的 IP 地址相关联。

**headers**  
标头的列表。

**httpMethod**  
请求中的 HTTP 方法。

**httpRequest**  
关于请求的元数据。

**httpSourceId**  
关联资源的ID。  
+ 对于 Amazon CloudFront 分配，编号为 ARN `distribution-id` 语法：

  `arn:partitioncloudfront::account-id:distribution/distribution-id` 
+ 对于应用程序负载均衡器，ID 是 `load-balancer-id`，采用 ARN 语法：

  `arn:partition:elasticloadbalancing:region:account-id:loadbalancer/app/load-balancer-name/load-balancer-id`
+ 对于 Amazon API Gateway REST API，ID 是 `api-id`，采用 ARN 语法：

  `arn:partition:apigateway:region::/restapis/api-id/stages/stage-name`
+ 对于 AWS AppSync GraphQL API，编号是 ARN 语法`GraphQLApiId`中的：

  `arn:partition:appsync:region:account-id:apis/GraphQLApiId`
+ 对于 Amazon Cognito 用户群体，ID 是 `user-pool-id`，采用 ARN 语法：

  `arn:partition:cognito-idp:region:account-id:userpool/user-pool-id`
+ 对于 AWS App Runner 服务，ID 是 ARN 语法`apprunner-service-id`中的：

  `arn:partition:apprunner:region:account-id:service/apprunner-service-name/apprunner-service-id`

**httpSourceName**  
请求的源。可能`CF`的值：亚马逊 CloudFront、`APIGW`亚马逊 API Gateway、应用程序负载均衡器、`ALB` Amazon Cognito AWS AppSync、`COGNITOIDP` Amazon Cognito、`APPRUNNER` App Runner 以及经过验证`VERIFIED_ACCESS`的访问权限。`APPSYNC`

**httpVersion**  
HTTP 版本。

**ja3Fingerprint**  
请求的 JA3 指纹。  
JA3 指纹检查仅适用于 Amazon CloudFront 分配和应用程序负载均衡器。
指 JA3 纹是一个 32 个字符的哈希值，源自传入请求的 TLS 客户端 Hello。此指纹用作客户端 TLS 配置的唯一标识符。 AWS WAF 计算并记录每个具有足够的 TLS Client Hello 信息用于计算的请求的此指纹。  
当您在保护包 (Web ACL) 规则中配置 JA3 指纹匹配时，您需要提供此值。有关创建 JA3指纹匹配项的信息，请参阅 for a r [在中请求组件 AWS WAF](waf-rule-statement-fields-list.md) ule 语句[JA3 指纹](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja3-fingerprint)中的。

**ja4Fingerprint**  
请求的 JA4 指纹。  
JA4 指纹检查仅适用于 Amazon CloudFront 分配和应用程序负载均衡器。
指 JA4 纹是一个 36 个字符的哈希值，源自传入请求的 TLS 客户端 Hello。此指纹用作客户端 TLS 配置的唯一标识符。 AWS WAF 计算并记录每个具有足够的 TLS Client Hello 信息用于计算的请求的此指纹。  
当您在保护包 (Web ACL) 规则中配置 JA4 指纹匹配时，您需要提供此值。有关创建 JA4指纹匹配项的信息，请参阅 for a r [在中请求组件 AWS WAF](waf-rule-statement-fields-list.md) ule 语句[JA4 指纹](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja4-fingerprint)中的。

**标签**  
web 请求上的标签。这些标签是由用来评估请求的规则应用的。 AWS WAF 记录前 100 个标签。

**nonTerminatingMatching规则**  
与请求匹配的非终止规则的列表。列表中每个项目都包含以下信息。    
action  
 AWS WAF 应用于请求的操作。这表示计数、验证码或质询。当 web 请求包含有效令牌时，CAPTCHA 和 Challenge 不会终止。  
ruleId  
与请求匹配并且为非终止规则的 ID。  
ruleMatchDetails  
有关与请求匹配的规则的详细信息。此字段仅适用于 SQL 注入和跨站脚本攻击（XSS）匹配规则语句。匹配规则可能需要匹配多个检查条件，因此这些匹配详细信息以匹配条件的形式提供。
为每条规则提供的任何其他信息会因规则配置、规则匹配类型和匹配详细信息等因素而不同。例如，对于带有 CAPTCHA 或 Challenge 操作的规则，将列出 `captchaResponse` 或 `challengeResponse`。如果匹配的规则位于某个规则组中，而您覆盖了其配置的规则操作，则 `overriddenAction` 中将提供配置的操作。

**oversizeFields**  
Web 请求中经过保护包 (Web ACL) 检查且超出 AWS WAF 检查限制的字段列表。如果字段过大，但保护包（web ACL）未对其进行检查，则不会在此处列出该字段。  
此列表可以包含以下零个或多个值：`REQUEST_BODY`、`REQUEST_JSON_BODY`、`REQUEST_HEADERS` 和 `REQUEST_COOKIES`。有关超大字段的更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

**rateBasedRule名单**  
对请求执行操作的基于速率的规则列表。有关基于速率的规则的更多信息，请参阅 [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)。    
rateBasedRule我是  
作用于请求的基于速率的规则的 ID。如果这已终止请求，则 `rateBasedRuleId` 的 ID 与 `terminatingRuleId` 的 ID 相同。  
rateBasedRule名称  
作用于请求的基于速率的规则的名称。  
limitKey  
规则使用的聚合类型。可能的值包括：对于 web 请求来源为 `IP`，请求标头中转发的 IP 为`FORWARDED_IP`，自定义聚合键设置为 `CUSTOMKEYS`，将所有请求合并计数（不进行聚合）为 `CONSTANT`。  
limitValue  
仅在按单个 IP 地址类型限制速率时使用。如果请求包含无效的 IP 地址，则 `limitvalue` 为 `INVALID`。  
maxRateAllowed  
特定聚合实例在指定时间窗口内允许的最大请求数。该聚合实例由 `limitKey` 和您在基于速率的规则配置中提供的任何其他密钥规范定义。  
evaluationWindowSec  
请求中 AWS WAF 包含的时间长度，以秒为单位。  
customValue  
请求中基于速率的规则标识的唯一值。对于字符串值，日志会打印字符串值的前 32 个字符。根据密钥类型，这些值可能仅用于密钥，例如 HTTP 方法或查询字符串，也可能用于密钥和名称，例如标头和标头名称。

**requestHeadersInserted**  
为处理自定义请求而插入的标头列表。

**requestId**  
请求的 ID，由底层主机服务生成。对于应用程序负载均衡器，这是跟踪 ID。对于所有其他人，这是请求 ID。

**responseCodeSent**  
与自定义响应一起发送的响应代码。

**ruleGroupId**  
规则组的 ID。如果规则阻止了请求，则 `ruleGroupID` 的 ID 与 `terminatingRuleId` 的 ID 相同。

**ruleGroupList**  
对该请求进行操作的规则组列表，包含匹配信息。

**terminatingRule**  
终止请求的规则。如果存在，则包含以下信息。    
action  
 AWS WAF 应用于请求的终止操作。这表示允许、阻止、验证码或质询。当 web 请求不包含有效令牌时，CAPTCHA 和 Challenge 操作将终止。  
ruleId  
匹配请求的规则的 ID。  
ruleMatchDetails  
有关与请求匹配的规则的详细信息。此字段仅适用于 SQL 注入和跨站脚本攻击（XSS）匹配规则语句。匹配规则可能需要匹配多个检查条件，因此这些匹配详细信息以匹配条件的形式提供。
为每条规则提供的任何其他信息会因规则配置、规则匹配类型和匹配详细信息等因素而不同。例如，对于带有 CAPTCHA 或 Challenge 操作的规则，将列出 `captchaResponse` 或 `challengeResponse`。如果匹配的规则位于某个规则组中，而您覆盖了其配置的规则操作，则 `overriddenAction` 中将提供配置的操作。

**terminatingRuleId**  
终止请求的规则的 ID。如果没有任何情况会终止请求，则值为 `Default_Action`。

**terminatingRuleMatch详情**  
有关与请求匹配的终止规则的详细信息。终止规则具有针对 web 请求结束检查过程的操作。终止规则可能的操作包括Allow、Block、CAPTCHA 和 Challenge。在检查 Web 请求期间，在与请求匹配且具有终止操作的第一条规则处， AWS WAF 停止检查并应用操作。除了日志中报告的匹配终止规则的威胁外，web 请求可能还包含其他威胁。  
这仅适用于 SQL 注入和跨站脚本攻击（XSS）匹配规则语句。匹配规则可能需要匹配多个检查条件，因此这些匹配详细信息以匹配条件的形式提供。

**terminatingRuleType**  
终止请求的规则的类型。可能的值：RATE\$1BASED、REGULAR、GROUP 和 MANAGED\$1RULE\$1GROUP。

**timestamp**  
时间戳，以毫秒为单位。

**uri**  
请求的 URI。

**fragment**  
紧接“\$1”符号的 URL 部分，提供有关资源的其他信息，例如 \$1section2。

**webaclId**  
保护包（web ACL）的 GUID。

# 保护包（web ACL）流量的日志示例
<a name="logging-examples"></a>

本节提供对保护包（web ACL）流量进行日志记录的示例。

**Example 基于速率的规则 1：使用一个键配置规则，设置为 `Header:dogname`**  

```
    {
      "Name": "RateBasedRule",
      "Priority": 1,
      "Statement": {
        "RateBasedStatement": {
          "Limit": 100,
          "AggregateKeyType": "CUSTOM_KEYS",
          "CustomKeys": [
            {
              "Header": {
                "Name": "dogname",
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "RateBasedRule"
      }
    }
```

**Example 基于速率的规则 1：被基于速率的规则阻止的请求的日志条目**  

```
{
   "timestamp":1683355579981,
   "formatVersion":1,
   "webaclId": ...,
   "terminatingRuleId":"RateBasedRule",
   "terminatingRuleType":"RATE_BASED",
   "action":"BLOCK",
   "terminatingRuleMatchDetails":[
      
   ],
   "httpSourceName":"APIGW",
   "httpSourceId":"EXAMPLE11:rjvegx5guh:CanaryTest",
   "ruleGroupList":[
      
   ],
   "rateBasedRuleList":[
      {
         "rateBasedRuleId": ...,
         "rateBasedRuleName":"RateBasedRule",
         "limitKey":"CUSTOMKEYS",
         "maxRateAllowed":100,
         "evaluationWindowSec":"120",
         "customValues":[
            {
               "key":"HEADER",
               "name":"dogname",
               "value":"ella"
            }
         ]
      }
   ],
   "nonTerminatingMatchingRules":[
      
   ],
   "requestHeadersInserted":null,
   "responseCodeSent":null,
   "httpRequest":{
      "clientIp":"52.46.82.45",
      "country":"FR",
      "headers":[
         {
            "name":"X-Forwarded-For",
            "value":"52.46.82.45"
         },
         {
            "name":"X-Forwarded-Proto",
            "value":"https"
         },
         {
            "name":"X-Forwarded-Port",
            "value":"443"
         },
         {
            "name":"Host",
            "value":"rjvegx5guh.execute-api.eu-west-3.amazonaws.com"
         },
         {
            "name":"X-Amzn-Trace-Id",
            "value":"Root=1-645566cf-7cb058b04d9bb3ee01dc4036"
         },
         {
            "name":"dogname",
            "value":"ella"
         },
         {
            "name":"User-Agent",
            "value":"RateBasedRuleTestKoipOneKeyModulePV2"
         },
         {
            "name":"Accept-Encoding",
            "value":"gzip,deflate"
         }
      ],
      "uri":"/CanaryTest",
      "args":"",
      "httpVersion":"HTTP/1.1",
      "httpMethod":"GET",
      "requestId":"Ed0AiHF_CGYF-DA="
   }
}
```

**Example 基于速率的规则 2：使用两个键进行规则配置，设置为 `Header:dogname` 和 `Header:catname`**  

```
    {
      "Name": "RateBasedRule",
      "Priority": 1,
      "Statement": {
        "RateBasedStatement": {
          "Limit": 100,
          "AggregateKeyType": "CUSTOM_KEYS",
          "CustomKeys": [
            {
              "Header": {
                "Name": "dogname",
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            },
            {
              "Header": {
                "Name": "catname",
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "RateBasedRule"
      }
    }
```

**Example 基于速率的规则 2：被基于速率的规则阻止的请求的日志条目**  

```
{
   "timestamp":1633322211194,
   "formatVersion":1,
   "webaclId":...,
   "terminatingRuleId":"RateBasedRule",
   "terminatingRuleType":"RATE_BASED",
   "action":"BLOCK",
   "terminatingRuleMatchDetails":[
      
   ],
   "httpSourceName":"APIGW",
   "httpSourceId":"EXAMPLE11:rjvegx5guh:CanaryTest",
   "ruleGroupList":[
      
   ],
   "rateBasedRuleList":[
      {
         "rateBasedRuleId":...,
         "rateBasedRuleName":"RateBasedRule",
         "limitKey":"CUSTOMKEYS",
         "maxRateAllowed":100,
         "evaluationWindowSec":"120",
         "customValues":[
            {
               "key":"HEADER",
               "name":"dogname",
               "value":"ella"
            },
            {
               "key":"HEADER",
               "name":"catname",
               "value":"goofie"
            }
         ]
      }
   ],
   "nonTerminatingMatchingRules":[
      
   ],
   "requestHeadersInserted":null,
   "responseCodeSent":null,
   "httpRequest":{
      "clientIp":"52.46.82.35",
      "country":"FR",
      "headers":[
         {
            "name":"X-Forwarded-For",
            "value":"52.46.82.35"
         },
         {
            "name":"X-Forwarded-Proto",
            "value":"https"
         },
         {
            "name":"X-Forwarded-Port",
            "value":"443"
         },
         {
            "name":"Host",
            "value":"23llbyn8v3.execute-api.eu-west-3.amazonaws.com"
         },
         {
            "name":"X-Amzn-Trace-Id",
            "value":"Root=1-64556629-17ac754c2ed9f0620e0f2a0c"
         },
         {
            "name":"catname",
            "value":"goofie"
         },
         {
            "name":"dogname",
            "value":"ella"
         },
         {
            "name":"User-Agent",
            "value":"Apache-HttpClient/UNAVAILABLE (Java/11.0.19)"
         },
         {
            "name":"Accept-Encoding",
            "value":"gzip,deflate"
         }
      ],
      "uri":"/CanaryTest",
      "args":"",
      "httpVersion":"HTTP/1.1",
      "httpMethod":"GET",
      "requestId":"EdzmlH5OCGYF1vQ="
   }
}
```

**Example SQLi 检测时触发（终止）的规则的日志输出**  

```
{
    "timestamp": 1576280412771,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE",
    "terminatingRuleId": "STMTest_SQLi_XSS",
    "terminatingRuleType": "REGULAR",
    "action": "BLOCK",
    "terminatingRuleMatchDetails": [
        {
            "conditionType": "SQL_INJECTION",
            "sensitivityLevel": "HIGH",
            "location": "HEADER",
            "matchedData": [
                "10",
                "AND",
                "1"
            ]
        }
    ],
    "httpSourceName": "-",
    "httpSourceId": "-",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [],
    "httpRequest": {
        "clientIp": "1.1.1.1",
        "country": "AU",
        "headers": [
            {
                "name": "Host",
                "value": "localhost:1989"
            },
            {
                "name": "User-Agent",
                "value": "curl/7.61.1"
            },
            {
                "name": "Accept",
                "value": "*/*"
            },
            {
                "name": "x-stm-test",
                "value": "10 AND 1=1"
            }
        ],
        "uri": "/myUri",
        "args": "",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "rid"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example SQLi 检测时触发的规则的日志输出（非终止）**  

```
{
    "timestamp":1592357192516
    ,"formatVersion":1
    ,"webaclId":"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hello-world/5933d6d9-9dde-js82-v8aw-9ck28nv9"
    ,"terminatingRuleId":"Default_Action"
    ,"terminatingRuleType":"REGULAR"
    ,"action":"ALLOW"
    ,"terminatingRuleMatchDetails":[]
    ,"httpSourceName":"-"
    ,"httpSourceId":"-"
    ,"ruleGroupList":[]
    ,"rateBasedRuleList":[]
    ,"nonTerminatingMatchingRules":
    [{
        "ruleId":"TestRule"
        ,"action":"COUNT"
        ,"ruleMatchDetails":
        [{
            "conditionType":"SQL_INJECTION"
            ,"sensitivityLevel": "HIGH"
            ,"location":"HEADER"
            ,"matchedData":[
                "10"
                ,"and"
                ,"1"]
            }]
    }]
    ,"httpRequest":{
        "clientIp":"3.3.3.3"
        ,"country":"US"
        ,"headers":[
            {"name":"Host","value":"localhost:1989"}
            ,{"name":"User-Agent","value":"curl/7.61.1"}
            ,{"name":"Accept","value":"*/*"}
            ,{"name":"myHeader","myValue":"10 AND 1=1"}
            ]
            ,"uri":"/myUri","args":""
            ,"httpVersion":"HTTP/1.1"
            ,"httpMethod":"GET"
            ,"requestId":"rid"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example 在规则组内触发的多个规则的日志输出（RuleA-XSS 正在终止，Rule-B 未终止）**  

```
{
    "timestamp":1592361810888,
    "formatVersion":1,
    "webaclId":"arn:aws:wafv2:us-east-1:123456789012:global/webacl/hello-world/5933d6d9-9dde-js82-v8aw-9ck28nv9"
    ,"terminatingRuleId":"RG-Reference"
    ,"terminatingRuleType":"GROUP"
    ,"action":"BLOCK",
    "terminatingRuleMatchDetails":
    [{
        "conditionType":"XSS"
        ,"location":"HEADER"
        ,"matchedData":["<","frameset"]
    }]
    ,"httpSourceName":"-"
    ,"httpSourceId":"-"
    ,"ruleGroupList":
    [{
        "ruleGroupId":"arn:aws:wafv2:us-east-1:123456789012:global/rulegroup/hello-world/c05lb698-1f11-4m41-aef4-99a506d53f4b"
        ,"terminatingRule":{
            "ruleId":"RuleA-XSS"
            ,"action":"BLOCK"
            ,"ruleMatchDetails":null
            }
        ,"nonTerminatingMatchingRules":
        [{
            "ruleId":"RuleB-SQLi"
            ,"action":"COUNT"
            ,"ruleMatchDetails":
            [{
                "conditionType":"SQL_INJECTION"
                ,"sensitivityLevel": "LOW"
                ,"location":"HEADER"
                ,"matchedData":[
                    "10"
                    ,"and"
                    ,"1"]
            }]
        }]
        ,"excludedRules":null
    }]
    ,"rateBasedRuleList":[]
    ,"nonTerminatingMatchingRules":[]
    ,"httpRequest":{
        "clientIp":"3.3.3.3"
        ,"country":"US"
        ,"headers":
        [
            {"name":"Host","value":"localhost:1989"}
            ,{"name":"User-Agent","value":"curl/7.61.1"}
            ,{"name":"Accept","value":"*/*"}
            ,{"name":"myHeader1","value":"<frameset onload=alert(1)>"}
            ,{"name":"myHeader2","value":"10 AND 1=1"}
            ]
        ,"uri":"/myUri"
        ,"args":""
        ,"httpVersion":"HTTP/1.1"
        ,"httpMethod":"GET"
        ,"requestId":"rid"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example 为检查内容类型为 JSON 的请求正文而触发的规则的日志输出**  
AWS WAF 目前将 JSON 身体检查的位置报告为`UNKNOWN`。  

```
{
    "timestamp": 1576280412771,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:ap-southeast-2:123456789012:regional/webacl/test/111",
    "terminatingRuleId": "STMTest_SQLi_XSS",
    "terminatingRuleType": "REGULAR",
    "action": "BLOCK",
    "terminatingRuleMatchDetails": [
        {
            "conditionType": "SQL_INJECTION",
            "sensitivityLevel": "LOW",
            "location": "UNKNOWN",
            "matchedData": [
                "10",
                "AND",
                "1"
            ]
        }
    ],
    "httpSourceName": "ALB",
    "httpSourceId": "alb",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [],
    "requestHeadersInserted":null,
    "responseCodeSent":null,
    "httpRequest": {
        "clientIp": "1.1.1.1",
        "country": "AU",
        "headers": [],
        "uri": "",
        "args": "",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "POST",
        "requestId": "null"
    },
    "labels": [
        {
            "name": "value"
        }
    ]
}
```

**Example 使用有效的、未过期的验证码令牌记录针对 web 请求的验证码规则的输出**  
以下日志列表适用于将规则与 CAPTCHA 操作相匹配的 web 请求。Web 请求具有有效且未过期的 CAPTCHA 令牌，并且仅被标记为验证码匹配 AWS WAF，类似于操作的行为。Count此验证码匹配在 `nonTerminatingMatchingRules` 标记。  

```
{
  "timestamp": 1632420429309,
  "formatVersion": 1,
  "webaclId": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/captcha-web-acl/585e38b5-afce-4d2a-b417-14fb08b66c67",
  "terminatingRuleId": "Default_Action",
  "terminatingRuleType": "REGULAR",
  "action": "ALLOW",
  "terminatingRuleMatchDetails": [],
  "httpSourceName": "APIGW",
  "httpSourceId": "123456789012:b34myvfw0b:pen-test",
  "ruleGroupList": [],
  "rateBasedRuleList": [],
  "nonTerminatingMatchingRules": [
    {
      "ruleId": "captcha-rule",
      "action": "CAPTCHA",
      "ruleMatchDetails": [],
      "captchaResponse": {
        "responseCode": 0,
        "solveTimestamp": 1632420429
      }
    }
  ],
  "requestHeadersInserted": [
    {
      "name": "x-amzn-waf-test-header-name",
      "value": "test-header-value"
    }
  ],
  "responseCodeSent": null,
  "httpRequest": {
    "clientIp": "72.21.198.65",
    "country": "US",
    "headers": [
      {
        "name": "X-Forwarded-For",
        "value": "72.21.198.65"
      },
      {
        "name": "X-Forwarded-Proto",
        "value": "https"
      },
      {
        "name": "X-Forwarded-Port",
        "value": "443"
      },
      {
        "name": "Host",
        "value": "b34myvfw0b.gamma.execute-api.us-east-1.amazonaws.com"
      },
      {
        "name": "X-Amzn-Trace-Id",
        "value": "Root=1-614cc24d-5ad89a09181910c43917a888"
      },
      {
        "name": "cache-control",
        "value": "max-age=0"
      },
      {
        "name": "sec-ch-ua",
        "value": "\"Chromium\";v=\"94\", \"Google Chrome\";v=\"94\", \";Not A Brand\";v=\"99\""
      },
      {
        "name": "sec-ch-ua-mobile",
        "value": "?0"
      },
      {
        "name": "sec-ch-ua-platform",
        "value": "\"Windows\""
      },
      {
        "name": "upgrade-insecure-requests",
        "value": "1"
      },
      {
        "name": "user-agent",
        "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
      },
      {
        "name": "accept",
        "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
      },
      {
        "name": "sec-fetch-site",
        "value": "same-origin"
      },
      {
        "name": "sec-fetch-mode",
        "value": "navigate"
      },
      {
        "name": "sec-fetch-user",
        "value": "?1"
      },
      {
        "name": "sec-fetch-dest",
        "value": "document"
      },
      {
        "name": "referer",
        "value": "https://b34myvfw0b.gamma.execute-api.us-east-1.amazonaws.com/pen-test/pets"
      },
      {
        "name": "accept-encoding",
        "value": "gzip, deflate, br"
      },
      {
        "name": "accept-language",
        "value": "en-US,en;q=0.9"
      },
      {
        "name": "cookie",
        "value": "aws-waf-token=51c71352-41f5-4f6d-b676-c24907bdf819:EQoAZ/J+AAQAAAAA:t9wvxbw042wva7E2Y6lgud/bS6YG0CJKVAJqaRqDZ140ythKW0Zj9wKB2O8lSkYDRqf1yONcVBFo5u0eYi0tvT4rtQCXsu+KanAardW8go4QSLw4yoED59lgV7oAhGyCalAzE7ra29j+RvvZPsQyoQuDCrtoY/TvQyMTXIXzGPDC/rKBbg=="
      }
    ],
    "uri": "/pen-test/pets",
    "args": "",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "GET",
    "requestId": "GINMHHUgoAMFxug="
  }
}
```

**Example 针对没有 验证码令牌的 web 请求记录验证码规则的输出**  
以下日志列表适用于将规则与 CAPTCHA 操作相匹配的 web 请求。网络请求没有验证码令牌，已被屏蔽。 AWS WAF  

```
{
  "timestamp": 1632420416512,
  "formatVersion": 1,
  "webaclId": "arn:aws:wafv2:us-east-1:123456789012:regional/webacl/captcha-web-acl/585e38b5-afce-4d2a-b417-14fb08b66c67",
  "terminatingRuleId": "captcha-rule",
  "terminatingRuleType": "REGULAR",
  "action": "CAPTCHA",
  "terminatingRuleMatchDetails": [],
  "httpSourceName": "APIGW",
  "httpSourceId": "123456789012:b34myvfw0b:pen-test",
  "ruleGroupList": [],
  "rateBasedRuleList": [],
  "nonTerminatingMatchingRules": [],
  "requestHeadersInserted": null,
  "responseCodeSent": 405,
  "httpRequest": {
    "clientIp": "72.21.198.65",
    "country": "US",
    "headers": [
      {
        "name": "X-Forwarded-For",
        "value": "72.21.198.65"
      },
      {
        "name": "X-Forwarded-Proto",
        "value": "https"
      },
      {
        "name": "X-Forwarded-Port",
        "value": "443"
      },
      {
        "name": "Host",
        "value": "b34myvfw0b.gamma.execute-api.us-east-1.amazonaws.com"
      },
      {
        "name": "X-Amzn-Trace-Id",
        "value": "Root=1-614cc240-18b57ff33c10e5c016b508c5"
      },
      {
        "name": "sec-ch-ua",
        "value": "\"Chromium\";v=\"94\", \"Google Chrome\";v=\"94\", \";Not A Brand\";v=\"99\""
      },
      {
        "name": "sec-ch-ua-mobile",
        "value": "?0"
      },
      {
        "name": "sec-ch-ua-platform",
        "value": "\"Windows\""
      },
      {
        "name": "upgrade-insecure-requests",
        "value": "1"
      },
      {
        "name": "user-agent",
        "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
      },
      {
        "name": "accept",
        "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
      },
      {
        "name": "sec-fetch-site",
        "value": "cross-site"
      },
      {
        "name": "sec-fetch-mode",
        "value": "navigate"
      },
      {
        "name": "sec-fetch-user",
        "value": "?1"
      },
      {
        "name": "sec-fetch-dest",
        "value": "document"
      },
      {
        "name": "accept-encoding",
        "value": "gzip, deflate, br"
      },
      {
        "name": "accept-language",
        "value": "en-US,en;q=0.9"
      }
    ],
    "uri": "/pen-test/pets",
    "args": "",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "GET",
    "requestId": "GINKHEssoAMFsrg="
  },
  "captchaResponse": {
    "responseCode": 405,
    "solveTimestamp": 0,
    "failureReason": "TOKEN_MISSING"
  }
}
```

# 数据保护
<a name="data-protection-masking"></a>

AWS WAF 数据保护设置允许您对标头、参数和正文内容等特定数据字段的敏感信息（密码、API 密钥、身份验证令牌和其他机密数据）实施定制和精细的保护。

可通过以下任一方式配置数据保护：
+ 保护包（web ACL）级别，适用于所有输出目标。
+ 仅记录日志，这仅影响 AWS WAF 发送到配置的日志记录目标的数据。

数据保护可以指定为替换或哈希。

替换是指用单词 `REDACTED` 替换内容。

 哈希是指替换内容，从字符串到 SHA-256 二进制再到 Base64：

1. 首先，算法根据账号和内容构建字符串。

1. 然后，算法应用 SHA-256 生成二进制哈希。

1. 最后，算法使用 Base64 对这些字节进行编码。

**提示**  
 选择适当的数据保护方法之前，应查看 SHA-256 哈希的特性，以确定是否符合要求。如果您打算实现等同于加密或令牌化的结果，我们不建议依赖 SHA-256 哈希。

**Topics**
+ [启用数据保护](enable-protection.md)
+ [数据保护例外情况](data-protection-exceptions.md)
+ [数据保护限制](data-protection-limitations.md)
+ [数据保护示例](data-protection-examples.md)
+ [为保护包（web ACL）配置数据保护](data-protection-configure.md)

# 启用数据保护
<a name="enable-protection"></a>

本节介绍可从控制台中选择的数据保护和日志配置选项。通过对某些字段启用数据保护，您可以保护日志中显示的数据。数据保护可以用于转换多种输出类型的敏感信息，包括完整日志、示例请求和 Security Lake。

**在 AWS WAF 控制台中启用数据保护**

导航到控制台中的**保护包 (Web ACLs)** 页面以**启用保护设置**。要启用日志的数据保护，请选择将其应用于所有日志还是应用于特定的日志记录目标。有关信息，请参阅[保护包（web ACL）流量的日志字段](logging-fields.md)。

**注意**  
无需启用日志记录，即可对所有日志记录应用数据保护。无论是否启用日志记录，均可对所有输出目标应用数据保护。

在**启用保护设置**页面的底部，选择**数据保护字段**面板上的**添加字段**按钮。从下拉菜单中选择字段类型。有关如何使用数据保护以保护每个字段的数据的信息，请参阅下表。


| 字段类型 | Details | 
| --- | --- | 
|  `Single header`  |  根据指定的选项（哈希或替换）永久转换指定的标头键值。转换后的值也将反映在完整的日志中。  | 
|  `Body`  |  永久转换正文值。仅适用于日志中的 `RuleMatchDetails`。  | 
|  `Query string`  |  根据指定的选项（哈希或替换）永久转换查询字符串。转换后的值也将反映在完整的日志中。  | 
|  `Single query argument`  |  根据指定的选项（哈希或替换）永久转换指定的查询参数值。转换后的值也将反映在完整的日志中。  | 
|  `Single cookie`  |  根据指定的选项（哈希或替换）永久转换 cookie 值。转换后的值也将反映在完整的日志中。  | 

# 数据保护例外情况
<a name="data-protection-exceptions"></a>

启用后，数据保护将应用于已启用数据保护的字段，包括 `RuleMatchDetails` 和 `rateBasedRuleList`。但在某些情况下，出于故障排除和可见性目的，您可能希望在 `RuleMatchDetails` 和 `rateBasedRuleList` 中包含受保护的数据及内容。在这些情况下，可为该字段指定数据保护的例外情况。
+ **`ExcludeRuleMatchDetails`**：如果您为特定字段指定此例外情况，`RuleMatchDetails` 将显示该字段的值，且不在数据保护范围内。
+ **`ExcludeRateBasedDetails`**：如果您为特定字段指定此例外情况，`rateBasedRuleList` 将显示该字段的值，且不在数据保护范围内。

  示例：在“dogname”的 **SINGLE\$1HEADER** 和 **HEADER\$1NAME** 上启用 `ExcludeRateBasedDetails` 规则。

  如果规则未应使用案例外情况，则“dogname”的值将显示为 `REDACTED`。

  ```
  "rateBasedRuleList":[ {"rateBasedRuleId": ...,
                          "rateBasedRuleName":"RateBasedRule", "limitKey":"CUSTOMKEYS",
                          "maxRateAllowed":100, "evaluationWindowSec":"120", "customValues":[
                          {"key":"HEADER", "name":"dogname", "value":"REDACTED" } ] } ]
  ```

  如果规则上已启使用案例外情况，则“dogname”值将出现在日志中。

  ```
   "rateBasedRuleList":[ {"rateBasedRuleId": ...,
                          "rateBasedRuleName":"RateBasedRule", "limitKey":"CUSTOMKEYS",
                          "maxRateAllowed":100, "evaluationWindowSec":"120", "customValues":[
                          {"key":"HEADER", "name":"dogname", "value":"ELLA" } ] } ]
  ```

**警告**  
数据保护功能可能会影响故障排除 AWS WAF 功能。这些设置可能导致意外的检测和缓解行为。将特定参数的数据保护限制为仅限绝对必要的参数。

# 数据保护限制
<a name="data-protection-limitations"></a>

以下是使用数据保护时需考虑的限制。

## QueryString 和 SingleQueryArg
<a name="queries"></a>

**QueryString 保护**
+ 根据指定的设置，数据保护功能`QueryString`适用于所有查询参数， substituting/hashing 包括键和值。

**QueryString 在`RuleMatch`详细信息和`RateBased`规则列表中**
+ 如果对单查询参数应用数据保护，则整个查询字符串将在 substituted/hashed 完整日志的`RuleMatchDetails`和`RateBasedRule`部分中。
+ 如果在多个单一查询参数中指定不同的保护方法（替换和哈希），则更严格的方法（即替换）将应用于完整日志中 `RuleMatchDetails` 和 `RateBasedRule` 部分的整个查询字符串。

## Cookie
<a name="cookies"></a>

**注意**  
 仅当单个标头 cookie 受到保护时，数据保护才适用于 cookie 的值。

** `RuleMatchDetails` 和 `RateBasedRule` 列表中的单个 cookie**
+ 如果对单个 Cookie 应用数据保护，则整个 cookie 标头将 substituted/hashed 位于完整日志的`RuleMatchDetails`和`RateBasedRule`部分中。
+ 如果指定不同的保护方法（替换和哈希），则更严格的方法（即替换）将应用于完整日志中 `RuleMatchDetails` 和 `RateBasedRule` 部分的整个 cookie。

# 数据保护示例
<a name="data-protection-examples"></a>

本节提供保护包（web ACL）流量的数据保护日志记录的日志示例。

## DataProtection 哈希
<a name="dataprotection-hashing"></a>

Webacl 配置

```
"data_protection_config": {
            "data_protections": [
                {
                    "field": {
                        "field_type": "SINGLE_QUERY_ARGUMENT",
                        "field_keys": [
                            "hoppy"
                        ]
                    },
                    "action": "HASH",
                    "exclude_rule_match_details": false,
                    "exclude_rate_based_details": false
                }
             ]
           }
```

示例 DataProtection 哈希：保护 SingleQuery 参数 “hoppy” 的日志条目。

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionhashACL/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [{
        "ruleId": "ProtectedSQLIHeadersVisibleInSTM",
        "action": "COUNT",
        "ruleMatchDetails": [{
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "SINGLE_QUERY_ARG",
                "matchedData": [ "z6hpYAFaMYdtiTeHhxnN5ydgRE5E1WgyVIdgqH0D3iM=" ],
                "matchedFieldName": "hoppy"
        }]
    }],
"requestHeadersInserted": null,
"responseCodeSent": null,
"httpRequest": {
    "clientIp": "54.239.98.137",
    "country": "US",
    "headers": [{
        "name": "X-Forwarded-For",
        "value": "54.239.98.137"
    }, {
        "name": "X-Forwarded-Proto",
        "value": "https"
    }, {
        "name": "X-Forwarded-Port",
        "value": "443"
    }, {
        "name": "Host",
        "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
    }, {
        "name": "X-Amzn-Trace-Id",
        "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
    }, {
        "name": "Accept-Encoding",
        "value": "gzip"
    }, {
        "name": "User-Agent",
        "value": "okhttp/3.12.1"
    }],
    "uri": "/CanaryTest",
    "args": "hoppy=z6hpYAFaMYdtiTeHhxnN5ydgRE5E1WgyVIdgqH0D3iM=&yellow=hello&x-hoppy-extra=generic-%3Cwords%3E-in-angle-brackets",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "GET",
    "requestId": "FepO0F8fIAMEqoQ="
},
"labels": [{
    "name": "awswaf:forwardedip:geo:country:US"
}, {
    "name": "awswaf:forwardedip:geo:region:US-VA"
}]
}
```

## DataProtection 替代
<a name="dataprotection-substitution"></a>

Webacl 配置

```
"data_protection_config": {
            "data_protections": [
                {
                    "field": {
                        "field_type": "SINGLE_QUERY_ARGUMENT",
                        "field_keys": [
                            "hoppy"
                        ]
                    },
                    "action": "SUBSTITUTION",
                    "exclude_rule_match_details": false,
                    "exclude_rate_based_details": false
                }
             ]
           }
```

 DataProtection 替换示例：保护单个查询参数 “hoppy” 的日志条目

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionhashACL/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": []
"requestHeadersInserted": null,
"responseCodeSent": null,
"httpRequest": {
    "clientIp": "54.239.98.137",
    "country": "US",
    "headers": [{
        "name": "X-Forwarded-For",
        "value": "54.239.98.137"
    }, {
        "name": "X-Forwarded-Proto",
        "value": "https"
    }, {
        "name": "X-Forwarded-Port",
        "value": "443"
    }, {
        "name": "Host",
        "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
    }, {
        "name": "X-Amzn-Trace-Id",
        "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
    }, {
        "name": "Accept-Encoding",
        "value": "gzip"
    }, {
        "name": "User-Agent",
        "value": "okhttp/3.12.1"
    }],
    "uri": "/CanaryTest",
    "args": "hoppy=REDACTED&yellow=hello&x-hoppy-extra=generic-%3Cwords%3E-in-angle-brackets",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "GET",
    "requestId": "FepO0F8fIAMEqoQ="
},
"labels": [{
    "name": "awswaf:forwardedip:geo:country:US"
}, {
    "name": "awswaf:forwardedip:geo:region:US-VA"
}]
}
```

## 将数据保留在 RuleMatchDetails
<a name="rulematchdetails-retain-data"></a>

Webacl 配置

```
"data_protection_config": {
            "data_protections": [
                {
                    "field": {
                        "field_type": "SINGLE_HEADER",
                        "field_keys": [
                            "hoppy"
                        ]
                    },
                    "action": "HASH",
                    "exclude_rule_match_details": true,
                    "exclude_rate_based_details": false
                }
             ]
           }
```

在中保留数据的示例 RuleMatchDetails：保护单个 `Header` “hoppy” 但该值仅保留在中的`RuleMatchDetails`日志条目。

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionhashACL/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [{
        "ruleId": "ProtectedSQLIHeadersVisibleInSTM",
        "action": "COUNT",
        "ruleMatchDetails": [{
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "HEADER",
                "matchedData": [ "10", "AND", "1" ],
                "matchedFieldName": "hoppy"
        }]
    }],
"requestHeadersInserted": null,
"responseCodeSent": null,
"httpRequest": {
    "clientIp": "54.239.98.137",
    "country": "US",
    "headers": [{
        "name": "X-Forwarded-For",
        "value": "54.239.98.137"
    }, {
        "name": "X-Forwarded-Proto",
        "value": "https"
    }, {
        "name": "X-Forwarded-Port",
        "value": "443"
    }, {
        "name": "Host",
        "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
    }, {
        "name": "X-Amzn-Trace-Id",
        "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
    }, {
        "name": "hoppy",
        "value": "zuomr2mxQxofg6EI6f7hMNGaJhhPxt0rFVAXog6FLxE="
    }, {
        "name": "Accept-Encoding",
        "value": "gzip"
    }, {
        "name": "User-Agent",
        "value": "okhttp/3.12.1"
    }, {
        "name": "hoppy",
        "value": "z6hpYAFaMYdtiTeHhxnN5ydgRE5E1WgyVIdgqH0D3iM="
    }],
    "uri": "/CanaryTest",
    "args": "happy=true",
    "httpVersion": "HTTP/1.1",
    "httpMethod": "GET",
    "requestId": "FepO0F8fIAMEqoQ="
},
"labels": [{
    "name": "awswaf:forwardedip:geo:country:US"
}, {
    "name": "awswaf:forwardedip:geo:region:US-VA"
}]
}
```

## 将数据保留在 rateBasedRule
<a name="ratebasedrule-retain-data"></a>

```
 "data_protection_config": {
            "data_protections": [
                {
                    "field": {
                        "field_type": "SINGLE_HEADER",
                        "field_keys": [
                            "hoppy"
                        ]
                    },
                    "action": "HASH",
                    "exclude_rule_match_details": false,
                    "exclude_rate_based_details": true
                }
             ]
           }
```

示例：在 rateBasedRule列表中保留数据：使用单个 `Header` “hoppy” 保护但该值仅保留在 `rateBasedRuleList`

```
{
    "timestamp": 1683355579981,
    "formatVersion": 1,
    "webaclId": ...,
    "terminatingRuleId": "RateBasedRule",
    "terminatingRuleType": "RATE_BASED",
    "action": "BLOCK",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "EXAMPLE11:rjvegx5guh:CanaryTest",
    "ruleGroupList": [],
    "rateBasedRuleList": [{
        "rateBasedRuleId": ...,
        "rateBasedRuleName": "RateBasedRule",
        "limitKey": "CUSTOMKEYS",
        "maxRateAllowed": 100,
        "evaluationWindowSec": "120",
        "customValues": [{
            "key": "HEADER",
            "name": "hoppy",
            "value": "ella"
        }]
    }],
    "nonTerminatingMatchingRules": [],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "52.46.82.45",
        "country": "FR",
        "headers": [{
            "name": "X-Forwarded-For",
            "value": "52.46.82.45"
        }, {
            "name": "X-Forwarded-Proto",
            "value": "https"
        }, {
            "name": "X-Forwarded-Port",
            "value": "443"
        }, {
            "name": "Host",
            "value": "rjvegx5guh.execute-api.eu-west-3.amazonaws.com"
        }, {
            "name": "X-Amzn-Trace-Id",
            "value": "Root=1-645566cf-7cb058b04d9bb3ee01dc4036"
        }, {
            "name": "hoppy",
            "value": "zuomr2mxQxofg6EI6f7hMNGaJhhPxt0rFVAXog6FLxE="
        }, {
            "name": "User-Agent",
            "value": "RateBasedRuleTestKoipOneKeyModulePV2"
        }, {
            "name": "Accept-Encoding",
            "value": "gzip,deflate"
        }],
        "uri": "/CanaryTest",
        "args": "",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "Ed0AiHF_CGYF-DA="
    }
}
```

## 正文的数据保护
<a name="dataprotection-body"></a>

AWS WAF 只记录 Body 的子集。`RuleMatchDetails`

Webacl 配置

```
 "data_protection_config": {
            "data_protections": [
                {
                    "field": {
                        "field_type": "BODY"
                    },
                    "action": "SUBSTITUTE",
                    "exclude_rule_match_details": false,
                    "exclude_rate_based_details": false
                }
             ]
           }
```

Body 示例 DataProtection ：使用替换正文的日志条目。`ruleMatchDetails`

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionhashACL/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [{
        "ruleId": "ProtectedSQLIBody",
        "action": "COUNT",
        "ruleMatchDetails": [{
            "conditionType": "SQL_INJECTION",
            "sensitivityLevel": "HIGH",
            "location": "BODY",
            "matchedData": ["REDACTED"]
        }]
    }],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "54.239.98.137",
        "country": "US",
        "headers": [{
            "name": "X-Forwarded-For",
            "value": "54.239.98.137"
        }, {
            "name": "X-Forwarded-Proto",
            "value": "https"
        }, {
            "name": "X-Forwarded-Port",
            "value": "443"
        }, {
            "name": "Host",
            "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
        }, {
            "name": "X-Amzn-Trace-Id",
            "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
        }, {
            "name": "Accept-Encoding",
            "value": "gzip"
        }, {
            "name": "User-Agent",
            "value": "okhttp/3.12.1"
        }, {
            "name": "cookie",
            "value": "hoppy=dog;"
        }],
        "uri": "/CanaryTest",
        "args": "baloo=abc&hoppy-query=xyz&x-hoppy-extra=generic-%3Cwords%3E-in-angle-brackets",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "FepO0F8fIAMEqoQ="
    },
    "labels": [{
        "name": "awswaf:forwardedip:geo:country:US"
    }, {
        "name": "awswaf:forwardedip:geo:region:US-VA"
    }]
}
```

## `SINGLE_COOKIE` 的数据保护
<a name="single-cookie-data-protection"></a>

Webacl 配置

```
 "data_protection_config": {
            "data_protections": [
                {
                    "field": {
                        "field_type": "SINGLE_COOKIE",
                        "field_keys": [
                            "MILO"
                        ]
                    },
                    "action": "HASH",
                    "exclude_rule_match_details": false,
                    "exclude_rate_based_details": false
                }
             ]
           }
```

示例 DataProtection `SINGLE_COOKIE`：受`SINGLE_COOKIE`命名为 “MILO” 保护的日志条目。

完整的日志显示名为 MILO 的 Cookie 在 `ruleMatchDetails` 和 cookie 标头中受到保护。仅 cookie 值受到保护，密钥名称不包含在内。

**注意**  
所有受保护的字段（单一标头、cookie、查询参数）均不区分大小写。因此，对于本示例中，“MILO”与“milo”相当。

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionhashACL/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [{
        "ruleId": "ProtectedSQLIHeadersVisibleInSTM",
        "action": "COUNT",
        "ruleMatchDetails": [{
            "conditionType": "SQL_INJECTION",
            "sensitivityLevel": "HIGH",
            "location": "COOKIE",
            "matchedData": ["zuomr2mxQxofg6EI6f7hMNGaJhhPxt0rFVAXog6FLxE="],
            "matchedFieldName": "milo"
        }]
    }],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "54.239.98.137",
        "country": "US",
        "headers": [{
            "name": "X-Forwarded-For",
            "value": "54.239.98.137"
        }, {
            "name": "X-Forwarded-Proto",
            "value": "https"
        }, {
            "name": "X-Forwarded-Port",
            "value": "443"
        }, {
            "name": "Host",
            "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
        }, {
            "name": "X-Amzn-Trace-Id",
            "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
        }, {
            "name": "Accept-Encoding",
            "value": "gzip"
        }, {
            "name": "User-Agent",
            "value": "okhttp/3.12.1"
        }, {
            "name": "cookie",
            "value": "hoppy=dog;milo=zuomr2mxQxofg6EI6f7hMNGaJhhPxt0rFVAXog6FLxE=;aws-waf-token=51c71352-41f5-4f6d-b676-c24907bdf819:EQoAZ/J+AAQAAAAA:t9wvxbw042wva7E2Y6lgud/bS6YG0CJKVAJqaRqDZ140ythKW0Zj9wKB2O8lSkYDRqf1yONcVBFo5u0eYi0tvT4rtQCXsu+KanAardW8go4QSLw4yoED59lgV7oAhGyCalAzE7ra29j+RvvZPsQyoQuDCrtoY/TvQyMTXIXzGPDC/rKBbg=="
        }],
        "uri": "/CanaryTest",
        "args": "baloo=abc&hoppy-query=xyz&x-hoppy-extra=generic-%3Cwords%3E-in-angle-brackets",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "FepO0F8fIAMEqoQ="
    },
    "labels": [{
        "name": "awswaf:forwardedip:geo:country:US"
    }, {
        "name": "awswaf:forwardedip:geo:region:US-VA"
    }]
}
```

## 所有 cookie 的数据保护
<a name="all-cookies-data-protection"></a>

您可以使用 `SINGLE_HEADER`，为 cookie 配置数据保护。仅 cookie 值受到保护，密钥名称不包含在内。

```
"DataProtectionConfig": {
    "DataProtections": [
        {
            "Field": {
                "FieldType": "SINGLE_HEADER",
                "FieldKeys": ["cookie"]
            },
            "Action": "SUBSTITUTION",
            "ExcludeRuleMatchDetails": false,
            "ExcludeRateBasedDetails": false
        }
    ]
}
```

`header `“COOKIE” 的示例 DataProtection ：保护了 cookie 标头的日志条目。

**注意**  
cookie 名称 `AWS-WAF-TOKEN` 不在数据保护范围内。

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionhashACL/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "54.239.98.137",
        "country": "US",
        "headers": [{
            "name": "X-Forwarded-For",
            "value": "54.239.98.137"
        }, {
            "name": "X-Forwarded-Proto",
            "value": "https"
        }, {
            "name": "X-Forwarded-Port",
            "value": "443"
        }, {
            "name": "Host",
            "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
        }, {
            "name": "X-Amzn-Trace-Id",
            "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
        }, {
            "name": "Accept-Encoding",
            "value": "gzip"
        }, {
            "name": "User-Agent",
            "value": "okhttp/3.12.1"
        }, {
            "name": "cookie",
            "value": "hoppy=REDACTED;milo=REDACTED;aws-waf-token=51c71352-41f5-4f6d-b676-c24907bdf819:EQoAZ/J+AAQAAAAA:t9wvxbw042wva7E2Y6lgud/bS6YG0CJKVAJqaRqDZ140ythKW0Zj9wKB2O8lSkYDRqf1yONcVBFo5u0eYi0tvT4rtQCXsu+KanAardW8go4QSLw4yoED59lgV7oAhGyCalAzE7ra29j+RvvZPsQyoQuDCrtoY/TvQyMTXIXzGPDC/rKBbg=="
        }],
        "uri": "/CanaryTest",
        "args": "baloo=xyz=&hoppy-query=abc&x-hoppy-extra=abc",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "FepO0F8fIAMEqoQ="
    },
    "labels": [{
        "name": "awswaf:forwardedip:geo:country:US"
    }, {
        "name": "awswaf:forwardedip:geo:region:US-VA"
    }]
}
```

## 单一查询参数的数据保护
<a name="single-query-argument"></a>

您可以使用 `SINGLE_QUERY_ARGUMENT`，为查询字符串配置数据保护。这会影响所有查询参数的键和值。在以下示例中，原始查询字符串是 `baloo=10 AND 1=1&hoppy=10 AND 1=1&x-hoppy-extra=generic-%3Cwords`。

Webacl 配置

```
"DataProtectionConfig": {
   "DataProtections": [
        {
            "Field": {
                "FieldType": "SINGLE_QUERY_ARGUMENT",
                "FieldKeys": ["hoppy"]
            },
            "Action": "SUBSTITUTION",
            "ExcludeRuleMatchDetails": false,
            "ExcludeRateBasedDetails": false
        }
    ]
}
```

示例 DataProtection `SINGLE_QUERY_ARGUEMENT`：带有 “hoppy” 查询字符串的日志条目受替换保护。

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionSubstituteQueryString/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [
      {
        "ruleId": "ProtectedHoppyQueryArg",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "SINGLE_QUERY_ARG",
                "matchedData": ["REDACTED"],
                "matchedFieldName": "hoppy"
            }]
      },
      {
        "ruleId": "FullQueryStringInspectionWhichDetectsTheFirstFieldWithSQLi_Baloo_IsAlsoMaskedMasked",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "QUERY_ARGS",
                "matchedData": ["REDACTED"],
            }]
      },
      {
        "ruleId": "ProtectedBalooQueryArg",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "SINGLE_QUERY_ARG",
                "matchedData": [ "10", "AND", "1" ],
                "matchedFieldName": "baloo"
            }]
      }
    ],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "54.239.98.137",
        "country": "US",
        "headers": [{
            "name": "X-Forwarded-For",
            "value": "54.239.98.137"
        }, {
            "name": "X-Forwarded-Proto",
            "value": "https"
        }, {
            "name": "X-Forwarded-Port",
            "value": "443"
        }, {
            "name": "Host",
            "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
        }, {
            "name": "X-Amzn-Trace-Id",
            "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
        }, {
            "name": "Accept-Encoding",
            "value": "gzip"
        }, {
            "name": "User-Agent",
            "value": "okhttp/3.12.1"
        }],
        "uri": "/CanaryTest",
        "args": "baloo=10 AND 1=1&hoppy=REDACTED&x-hoppy-extra=generic-%3Cwords",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "FepO0F8fIAMEqoQ="
    },
    "labels": [{
        "name": "awswaf:forwardedip:geo:country:US"
    }, {
        "name": "awswaf:forwardedip:geo:region:US-VA"
    }]
}
```

## 查询字符串的数据保护
<a name="data-protection-query-string"></a>

您可以使用 `QUERY_STRING`，为查询字符串配置数据保护。这会影响所有查询参数的键和值。在以下示例中，原始查询字符串是 `baloo=10 AND 1=1&hoppy-query=10 AND 1=1&x-hoppy-extra=generic-%3Cwords`。

Webacl 配置

```
"DataProtectionConfig": {
 "DataProtections": [
 {
 "Field": {
 "FieldType": "QUERY_STRING"
 },
 "Action": "SUBSTITUTION",
 "ExcludeRuleMatchDetails": false,
 "ExcludeRateBasedDetails": false
 }
 ]
}
```

示例 DataProtection `QUERY_STRING`：带有受替换保护的查询字符串的日志条目。

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionSubstituteQueryString/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [
      {
        "ruleId": "ProtectedHoppyQueryArg",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "QUERY_STRING",
                "matchedData": ["REDACTED"]
            }]
      },
      {
        "ruleId": "ProtectedBalooQueryArg",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "SINGLE_QUERY_ARG",
                "matchedData": [ "REDACTED" ],
                "matchedFieldName": "REDACTED"
            }]
      }
    ],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "54.239.98.137",
        "country": "US",
        "headers": [{
            "name": "X-Forwarded-For",
            "value": "54.239.98.137"
        }, {
            "name": "X-Forwarded-Proto",
            "value": "https"
        }, {
            "name": "X-Forwarded-Port",
            "value": "443"
        }, {
            "name": "Host",
            "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
        }, {
            "name": "X-Amzn-Trace-Id",
            "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
        }, {
            "name": "Accept-Encoding",
            "value": "gzip"
        }, {
            "name": "User-Agent",
            "value": "okhttp/3.12.1"
        }],
        "uri": "/CanaryTest",
        "args": "REDACTED",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "FepO0F8fIAMEqoQ="
    },
    "labels": [{
        "name": "awswaf:forwardedip:geo:country:US"
    }, {
        "name": "awswaf:forwardedip:geo:region:US-VA"
    }]
}
```

## 多个查询参数的数据保护
<a name="data-protection-multiple-query-arguments"></a>

您可以使用 `SINGLE_QUERY_ARGUMENT`，为单个查询参数配置数据保护。报告本地信息时，我们使用本地保护。但是，查询字符串和 cookie 标头中匹配的字符串包含多个可能适用的保护配置。简单来说，即使所选数据范围与匹配的特定数据范围不完全重合，也会对 `RuleMatchDetails` 应用最严格的保护。

在以下示例中，原始查询字符串是 `baloo=is_a_good_boy&hoppy=likes_to_sleep&x-hoppy-extra=10 AND 1=1`。

```
"DataProtectionConfig": {
    "DataProtections": [
        {
            "Field": {
                "FieldType": "SINGLE_QUERY_ARGUMENT",
                "FieldKeys": ["hoppy"]
            },
            "Action": "SUBSTITUTION",
            "ExcludeRuleMatchDetails": false,
            "ExcludeRateBasedDetails": false
        },
        {
            "Field": {
                "FieldType": "SINGLE_QUERY_ARGUMENT",
                "FieldKeys": ["baloo"]
            },
            "Action": "HASH",
            "ExcludeRuleMatchDetails": false,
            "ExcludeRateBasedDetails": false
        }
    ]
}
```

多个 DataProtection 查询参数的示例。

```
{
    "timestamp": 1738705092889,
    "formatVersion": 1,
    "webaclId": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/DataProtectionSubstituteQueryString/4eede063-e611-44f5-b357-ffc9d7b7fed5",
    "terminatingRuleId": "Default_Action",
    "terminatingRuleType": "REGULAR",
    "action": "ALLOW",
    "terminatingRuleMatchDetails": [],
    "httpSourceName": "APIGW",
    "httpSourceId": "746533260405:xt7v59bhn7:ABC",
    "ruleGroupList": [],
    "rateBasedRuleList": [],
    "nonTerminatingMatchingRules": [
      {
        "ruleId": "ProtectedHoppyQueryArg",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "SINGLE_QUERY_ARG",
                "matchedData": ["REDACTED"],
                "matchedFieldName": "hoppy"
            }]
      },
      {
        "ruleId": "ProtectedBalooQueryArg",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "SINGLE_QUERY_ARG",
                "matchedData": ["zuomr2mxQxofg6EI6f7hMNGaJhhPxt0rFVAXog6FLxE="],
                "matchedFieldName": "baloo"
            }]
      },
      {
        "ruleId": "FullQueryStringDetects_x-hoppy-extra_IsSubstituted",
        "action": "COUNT",
        "ruleMatchDetails": [
            {
                "conditionType": "SQL_INJECTION",
                "sensitivityLevel": "HIGH",
                "location": "QUERY_ARGS",
                "matchedData": ["REDACTED"],  // Harshest of Protection Config
            }]
      }
    ],
    "requestHeadersInserted": null,
    "responseCodeSent": null,
    "httpRequest": {
        "clientIp": "54.239.98.137",
        "country": "US",
        "headers": [{
            "name": "X-Forwarded-For",
            "value": "54.239.98.137"
        }, {
            "name": "X-Forwarded-Proto",
            "value": "https"
        }, {
            "name": "X-Forwarded-Port",
            "value": "443"
        }, {
            "name": "Host",
            "value": "xt7xxx9bhn7.gamma.execute-api.us-east-1.amazonaws.com"
        }, {
            "name": "X-Amzn-Trace-Id",
            "value": "Root=1-67a288c4-27acb3cd5795dd8456b7e3c3"
        }, {
            "name": "Accept-Encoding",
            "value": "gzip"
        }, {
            "name": "User-Agent",
            "value": "okhttp/3.12.1"
        }],
        "uri": "/CanaryTest",
        "args": "baloo=zuomr2mxQxofg6EI6f7hMNGaJhhPxt0rFVAXog6FLxE=&hoppy=REDACTED&x-hoppy-extra=10 AND 1=1",
        "httpVersion": "HTTP/1.1",
        "httpMethod": "GET",
        "requestId": "FepO0F8fIAMEqoQ="
    },
    "labels": [{
        "name": "awswaf:forwardedip:geo:country:US"
    }, {
        "name": "awswaf:forwardedip:geo:region:US-VA"
    }]
}
```

**注意**  
不能在同一 Web **QueryString ACL** 中同时指定掩码和**单查询参数掩**码。

# 为保护包（web ACL）配置数据保护
<a name="data-protection-configure"></a>

本节提供为保护包（web ACL）配置数据保护的说明。

**为保护包（web ACL）配置数据保护**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/wafv2/homev](https://console.aws.amazon.com/wafv2/homev2) 2 上打开主 AWS WAF 机。

1. 在导航窗格中，选择**保护包 (Web ACLs)**。

1. 选择希望为其启用数据保护的保护包（web ACL）名称。控制台会将您转到保护包（web ACL）的描述，您可以在其中对其进行编辑。

1. 在**日志记录和指标**选项卡上，**数据保护设置**窗格中，选择**启用**或**编辑**。

1. 选择**全局**范围，然后选择字段数据保护选项。对于每个字段数据保护配置，还可以指定要从保护行为中排除的例外情况。

1. 当您完成选择后，请选择**保存**。界面返回到**日志记录和指标**选项卡，其中已汇总您的选择。