

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

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

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

# AWS WAF
<a name="waf-chapter"></a>

AWS WAF 是一个 Web 应用程序防火墙，允许您监控转发到受保护的 Web 应用程序资源的 HTTP (S) 请求。您可以保护以下资源类型：
+ 亚马逊 CloudFront 配送
+ Amazon API Gateway REST API
+ 应用程序负载均衡器
+ AWS AppSync GraphQL API
+ Amazon Cognito 用户池
+ AWS App Runner 服务
+ AWS 已验证访问实例
+ AWS Amplify

AWS WAF 允许您控制对内容的访问权限。根据指定的规则（如请求源自的 IP 地址或查询字符串的值），与受保护资源相关的服务会使用所请求的内容或者使用 HTTP 状态代码 403（禁止）或自定义响应来响应请求。

**注意**  
您还可以使用 AWS WAF 保护托管在亚马逊弹性容器服务 (Amazon ECS) 容器中的应用程序。Amazon ECS 是一项高度可扩展的快速容器管理服务，它可轻松运行、停止和管理集群上的 Docker 容器。要使用此选项，您需要将 Amazon ECS 配置为使用启用的 Application Load Balancer AWS WAF 来路由和保护服务中任务的 HTTP (S) 第 7 层流量。有关更多信息，请参阅 *Amazon Elastic Container Service 开发人员指南*中的[服务负载均衡](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html)。

**Topics**
+ [开始使用 AWS WAF](getting-started.md)
+ [如何 AWS WAF 运作](how-aws-waf-works.md)
+ [在中配置保护 AWS WAF](web-acl.md)
+ [AWS WAF 规则](waf-rules.md)
+ [AWS WAF 规则组](waf-rule-groups.md)
+ [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md)
+ [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)
+ [中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)
+ [中的 IP 集和正则表达式模式集 AWS WAF](waf-referenced-set-managing.md)
+ [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)
+ [在 Web 请求中添加标签 AWS WAF](waf-labels.md)
+ [中的智能威胁缓解 AWS WAF](waf-managed-protections.md)
+ [保护包 (Web ACL) 流量的数据 AWS WAF 保护和日志记录](waf-data-protection-and-logging.md)
+ [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)
+ [在 Amazon AWS WAF 上使用 CloudFront](cloudfront-features.md)
+ [您使用 AWS WAF 服务的安全性](security.md)
+ [AWS WAF 配额](limits.md)
+ [将您的 AWS WAF 经典资源迁移到 AWS WAF](waf-migrating-from-classic.md)

# 开始使用 AWS WAF
<a name="getting-started"></a>

 入门 AWS WAF 取决于你使用的主机体验。两种体验都提供对相同核心 AWS WAF 功能的访问权限，但在配置和管理 Web 应用程序保护的方式上有所不同。

 AWS WAF 提供了两个使用控制台的选项：

 **新控制台**旨在简化标准控制台工作流程所需的 web ACL 配置过程。您可以使用指导式工作流程，通过保护包简化 web ACL 的创建和管理过程。保护包可以更轻松地在控制台 ACLs 中使用和管理 Web，但在功能上与 Web ACL 并无区别。除改进的保护配置过程以外，新控制台还通过安全控制面板增强对保护的可见性，从而可以更轻松地在 AWS WAF 控制台中监控您的安全状况。

 **标准 AWS WAF 控制台**提供了一种使用 Web 配置 Web 应用程序防火墙保护的传统方法 ACLs。它提供对单个规则和规则组的精细控制，现有 AWS WAF 用户很熟悉。使用此控制台，您可以详细控制保护配置，以便精确地自定义安全设置。

**提示**  
 选择最适合您需求的控制台体验。如果您不熟悉 AWS WAF 或想开始根据 AWS 建议配置保护，我们建议您从全新的主机体验开始。但是，您始终可以通过控制台的导航窗格打开标准体验。

 以下各节提供两种控制台体验的入门指南。查看每种方法，并选择与安全要求和操作偏好最相符的方法：

**Topics**
+ [开始 AWS WAF 使用全新的主机体验](setup-iap-console.md)
+ [开始 AWS WAF 使用标准主机体验](setup-existing-console.md)

# 开始 AWS WAF 使用全新的主机体验
<a name="setup-iap-console"></a>

本节将指导您 AWS WAF 使用新的控制台体验进行设置，该体验提供了简化的配置工作流程和增强的安全管理功能。

## 访问新的控制台体验
<a name="accessing-iap-console"></a>

要访问全新的 AWS WAF 主机体验，请执行以下操作：

登录新版 AWS 管理控制台 并通过 [https://console.aws.amazon.com/waf](https://console.aws.amazon.com/wafv2-pro) v2-pro 打开 AWS WAF 控制台。
+ 在导航窗格中，查找并选择**尝试新体验**。

**注意**  
您可随时通过导航窗格中的链接在不同控制台体验之间切换。

## 开始使用保护包（web ACL）
<a name="getting-started-protection-packs"></a>

本教程向您展示如何创建和配置保护包（web ACL）以保护您的应用程序。保护包 (Web ACLs) 提供针对特定工作负载类型量身定制的预配置安全规则。

在本教程中，您将学习如何：
+ 创建保护包（web ACL）
+ 配置特定于应用程序的保护设置
+ 添加要保护的 AWS 资源
+ 选择和自定义规则
+ 配置日志记录和监控

**注意**  
AWS 对于您在本教程中创建的资源，每天向您收取的费用通常少于 0.25 美元。完成后，建议您删除资源以防止产生不必要的费用。

### 第 1 步：设置 AWS WAF
<a name="getting-started-prerequisites"></a>

如果您尚未按照 [设置您的账户以使用服务](setting-up-waf.md) 中的常规设置步骤操作，请立即执行操作。

### 步骤 2：创建保护包（web ACL）
<a name="getting-started-create-protection-pack"></a>

在此步骤中，您将创建保护包（web ACL），并配置其基本设置，以匹配您的应用程序类型。

1. 登录新版 AWS 管理控制台 并通过 [https://console.aws.amazon.com/waf](https://console.aws.amazon.com/wafv2-pro) v2-pro 打开 AWS WAF 控制台。

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

1. 在**资源和保护包 (Web ACLs)** 页面上，选择**添加保护包 (Web ACL)**。

1. 在**向我们介绍您的应用程序**下，对于**应用程序类别**，选择一个或多个最能描述您应用程序的应用程序类别。

1. 对于**流量来源**，选择应用程序处理的流量类型：
   + **API**：适用于仅限 API 的应用程序
   + **Web**：适用于仅限 web 的应用程序
   + **API 和 Web**：适用于同时处理这两种流量的应用程序

### 步骤 3：添加要保护的资源
<a name="getting-started-add-resources"></a>

现在，您将指定要使用保护包（Web ACL）保护哪些 AWS 资源。

1. 在**要保护的资源**下，选择**添加资源**。

1. 选择要与此保护包关联的 AWS 资源类别（Web ACL）：
   + 亚马逊配 CloudFront 送
   + 区域性资源

   有关资源类型的更多信息，请参阅 [将保护与资源关联 AWS](web-acl-associating.md)。

### 步骤 4：选择初始保护
<a name="getting-started-configure-protection"></a>

在此步骤中，您将为保护包（web ACL）选择规则。对于首次使用的用户，我们建议选择**推荐**选项。

AWS WAF 根据您在 “向**我们介绍您的应用程序” 部分中所做的选择，为您**生成 “**推荐**”。这些包为您的应用程序类型实施安全性最佳实践。
+  选择**下一步**，继续设置保护包（web ACL）。

**注意**  
如果您有兴趣创建自定义规则或使用**自行构建**选项，我们建议您先积累使用预配置选项的经验。有关创建自定义保护包 (Web ACLs) 和规则的更多信息，请参阅[在中创建保护包 (Web ACL) AWS WAF](web-acl-creating.md)。

### 步骤 5：自定义保护包（web ACL）设置
<a name="getting-started-customize-settings"></a>

现在，您将配置其他设置，例如默认操作、速率限制和日志记录。

1. 在**名称和描述**下，为您的保护包（web ACL）输入名称。（可选）输入描述。
**注意**  
保护包（web ACL）在创建之后无法更改名称。

1. 在**自定义保护包（web ACL）**下，配置以下设置：

   1. 在**默认规则操作**下，选择不匹配任何规则的请求默认操作。有关更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

   1. 在**规则配置**下，自定义以下设置：
      + **默认速率限制**-设置限制以防御 DDo S 攻击
      + **IP 地址**-配置 IP allow/block 列表
      + **国家/地区特定来源**：按国家/地区管理访问权限

   1. 在**日志记录目标**中，配置要存储日志的位置。有关更多信息，请参阅 [AWS WAF 登录目的地](logging-destinations.md)。

1. 查看您的设置，并选择**添加保护包（web AC）**。

### 步骤 6：清除资源
<a name="getting-started-clean-up"></a>

现在您已成功完成了教程。为了防止您的账户产生额外 AWS WAF 费用，您应该删除您创建的保护包 (Web ACL)，或者对其进行修改以满足您的生产需求。

**删除您的保护包（web ACL）**

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

1. 选择您创建的保护包（web ACL）。

1. 选择垃圾桶图标，然后键入“删除”确认删除。

**注意**  
如果您计划在生产环境中使用此保护包（web ACL），则应查看并调整保护设置，而不是将其删除，以满足应用程序的安全要求。

# 开始 AWS WAF 使用标准主机体验
<a name="setup-existing-console"></a>

 AWS WAF 控制台将指导您完成配置过程， AWS WAF 以根据您指定的标准（例如请求来源的 IP 地址或请求中的值）阻止或允许 Web 请求。在此步骤中，您将创建一个保护包（web ACL）。有关 AWS WAF 保护包 (Web ACLs) 的更多信息，请参阅[在中配置保护 AWS WAF](web-acl.md)。

本教程介绍如何使用 AWS WAF 来执行以下任务：
+ 设置 AWS WAF。
+ 使用控制 AWS WAF 台中的向导创建 Web 访问控制列表 (Web ACL)。

**创建 web ACL**

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

  1. 在 AWS WAF 主页上，选择**创建 Web ACL**。

  1. 对于 **名称**，输入要用于标识此 web ACL 的名称。
**注意**  
web ACL 在创建之后无法更改名称。

  1. （可选）对于 **描述 - 可选**，如果需要，请输入 web ACL 的较长描述。

  1. 对于 **CloudWatch metric name (CloudWatch 指标名称)**，更改默认名称（如果适用）。按照控制台上的指导进行有效字符操作。该名称不能包含为 AWS WAF保留的特殊字符、空格或指标名称，包括“All”和“Default\$1Action”。
**注意**  
创建 Web ACL 后，您无法更改 CloudWatch 指标名称。

  1. 对于**资源类型**，选择**CloudFront分配**。**区域**会自动填充到 Gl **obal (CloudFront)** 以进行 CloudFront 分配。

  1. （可选）对于**关联 AWS 资源-可选**，选择**添加 AWS 资源**。在对话框中，选择要关联的资源，然后选择**添加**。 AWS WAF 返回到**描述 web ACL 和关联的 AWS 资源**页面。

  1. 选择**下一步**。

**注意**  
AWS 对于您在本教程中创建的资源，每天向您收取的费用通常少于 0.25 美元。当您完成本教程时，建议您删除资源以避免产生不必要的费用。

## 第 1 步：设置 AWS WAF
<a name="getting-started-aws-account"></a>

如果您尚未按照 [设置您的账户以使用服务](setting-up-waf.md) 中的常规设置步骤操作，请立即执行操作。

## 步骤 2：创建 web ACL
<a name="getting-started-wizard-create-web-acl"></a>

 AWS WAF 控制台将指导您完成配置过程， AWS WAF 以根据您指定的标准（例如请求来源的 IP 地址或请求中的值）阻止或允许 Web 请求。在此步骤中，您将创建一个 web ACL。有关 AWS WAF Web 的更多信息 ACLs，请参阅[在中配置保护 AWS WAF](web-acl.md)。

**创建 web ACL**

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

1. 在 AWS WAF 主页上，选择**创建 Web ACL**。

1. 对于 **名称**，输入要用于标识此 web ACL 的名称。
**注意**  
web ACL 在创建之后无法更改名称。

1. （可选）对于 **描述 - 可选**，如果需要，请输入 web ACL 的较长描述。

1. 对于 **CloudWatch metric name (CloudWatch 指标名称)**，更改默认名称（如果适用）。按照控制台上的指导进行有效字符操作。该名称不能包含为 AWS WAF保留的特殊字符、空格或指标名称，包括“All”和“Default\$1Action”。
**注意**  
创建 Web ACL 后，您无法更改 CloudWatch 指标名称。

1. 对于**资源类型**，选择**CloudFront分配**。**区域**会自动填充到 Gl **obal (CloudFront)** 以进行 CloudFront 分配。

1. （可选）对于**关联 AWS 资源-可选**，选择**添加 AWS 资源**。在对话框中，选择要关联的资源，然后选择**添加**。 AWS WAF 返回到**描述 web ACL 和关联的 AWS 资源**页面。

1. 选择**下一步**。

## 步骤 3：添加字符串匹配规则
<a name="getting-started-wizard-create-string-condition"></a>

在此步骤中，您将使用字符串匹配语句创建规则，并指示如何处理匹配请求。字符串匹配规则语句标识您希望 AWS WAF 在请求中搜索的字符串。字符串通常由可打印 ASCII 字符组成，但您可以指定从十六进制 0x00 到 0xFF（十进制 0 到 255）的任何字符。除了指定要搜索的字符串外，您还可以指定要搜索的 web 请求组件，例如标头、查询字符串或请求正文。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理它们。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

有关 AWS WAF 规则的更多信息，请参阅[AWS WAF 规则](waf-rules.md)。

**创建字符串匹配规则语句**

1. 在 **添加规则和规则组** 页面上，选择 **添加规则**、**添加我自己的规则和规则组**、**规则生成器**，然后选择 **规则可视化编辑器**。
**注意**  
控制台提供 **规则可视化编辑器** 和 **规则 JSON 编辑器**。JSON 编辑器使您可以轻松地在 Web ACLs 之间复制配置，对于更复杂的规则集（例如具有多个嵌套级别的规则集）来说，这是必需的。  
此过程使用 **规则可视化编辑器**。

1. 对于 **名称**，输入要用于标识此规则的名称。

1. 对于 **类型**，选择 **常规规则**。

1. 对于 **如果请求**，选择 **与语句匹配**。

   其他选项适用于逻辑规则语句类型。您可以使用它们来组合或否定其他规则语句的结果。

1. 在 St **at** ement 中，对于 **Inspect**，打开下拉列表并选择 AWS WAF 要检查的 Web 请求组件。对于此示例，选择**单个标头**。

   选择**单个标头**时，还可以指定希望 AWS WAF 检查的标头。输入 **User-Agent**。此值不区分大小写。

1. 对于 **匹配类型**，选择指定的字符串必须出现在 `User-Agent` 标头中的位置。

   在此示例中，选择 **完全匹配字符串**。这表示 AWS WAF 检查每个 Web 请求中的用户代理标头，寻找与您指定的字符串相同的字符串。

1. 对于 **要匹配的字符串**，请指定希望 AWS WAF 搜索的字符串。**要匹配的字符串** 的最大长度是 200 个字符。如果您要指定 base64 编码值，您可以指定最多 200 个字符（编码前）。

   对于此示例，请输入**MyAgent**。 AWS WAF 将检查 Web 请求中的`User-Agent`标头以获取值`MyAgent`。

1. 将 **文本转换** 保留设置为 **无**。

1. 对于**操作**，选择您希望规则在与 web 请求匹配时执行的操作。在此示例中，选择**计数**，其他选项保持不变。计数操作会为与规则匹配的 web 请求创建指标，但不会影响请求是允许还是阻止。有关操作选择的更多信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md) 和 [设置规则优先级](web-acl-processing-order.md)。

1. 选择**添加规则**。

## 步骤 4：添加 AWS 托管规则规则组
<a name="getting-started-wizard-add-rule-group"></a>

AWS 托管规则提供了一组托管规则组供您使用，其中大部分对 AWS WAF 客户免费。有关规则组的更多信息，请参阅 [AWS WAF 规则组](waf-rule-groups.md)。我们将向此 Web ACL 添加 AWS 托管规则组。

**添加 AWS 托管规则规则组**

1. 在 **添加规则和规则组** 页面上，选择 **添加规则**，然后选择 **添加托管规则组**。

1. 在**添加托管规则组**页面上，展开 **AWS 托管规则组**。（您还将看到为 AWS Marketplace 卖家提供的商品。 您可以订阅他们的产品，然后按照与 AWS 托管规则组相同的方式使用它们。）

1. 对要添加的每个规则组执行以下操作：

   1. 在**操作**列中，打开**添加到 web ACL**切换选项。

   1. 选择**编辑**，然后在规则组的**规则**列表中打开**覆盖所有规则操作**下拉列表并选择 **Count**。这会将规则组中所有规则的操作设置为仅计数。这样，您就可以在使用规则组中的所有规则之前，查看其中的任何规则其对 web 请求的行为。

   1. 选择**保存规则**。

1. 选择**添加规则**，然后选择 **添加托管规则组**。这样，您将返回到**添加规则和规则组**页面。

## 步骤 5：完成 web ACL 配置
<a name="getting-started-wizard-finish-webacl-options"></a>

完成向 web ACL 配置中添加规则和规则组后，通过管理 web ACL 中规则的优先级并配置诸如指标、标记和日志记录之类的设置来结束。

**完成 web ACL 配置**

1. 在 **添加规则和规则组** 页面上，选择 **下一步**。

1. 在**设置规则优先级**页面上，您可以看到 Web ACL 中规则和规则组的处理顺序。 AWS WAF 从列表顶部开始处理它们。您可以通过上下移动规则来更改处理顺序。要执行此操作，请在列表中选择一个，然后选择 **上移** 或 **下移**。有关规则优先级的更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

1. 选择**下一步**。

1. 在**配置指标**页面上，对于**亚马逊 CloudWatch指标**，您可以查看规则和规则组的计划指标，也可以查看网络请求采样选项。有关查看采样请求的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。有关 Amazon CloudWatch 指标的信息，请参阅[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。

   您可以在 AWS WAF 控制台的 Web ACL 页面的 “流量**概述” 选项卡下访问 Web 流量**指标摘要。控制台控制面板提供网络 ACL 的 Amazon CloudWatch 指标的近乎实时的摘要。有关更多信息，请参阅 [保护包的流量概述仪表板 (Web ACLs)](web-acl-dashboards.md)。

1. 选择**下一步**。

1. 在 **审核和创建 web ACL** 页面上，查看您的设置，然后选择 **创建 web ACL**。

该向导将返回到 **web ACL** 页面，其中列出了您的新 web ACL。

## 步骤 6：清除资源
<a name="getting-started-wizard-clean-up"></a>

现在您已成功完成了教程。为防止您的账户产生额外 AWS WAF 费用，请清理您创建的 AWS WAF 对象。或者，您可以更改配置以匹配您真正想要管理的 Web 请求 AWS WAF。

**注意**  
AWS 对于您在本教程中创建的资源，每天向您收取的费用通常少于 0.25 美元。完成后，建议您删除资源以防止产生不必要的费用。

**删除 AWS WAF 收取费用的对象**

1. 在 **web ACL** 页面中，从列表中选择您的 web ACL，然后选择**编辑**。

1. 在**关联 AWS 资源**选项卡上，对于每个关联的资源，选择资源名称旁边的单选按钮，然后选择**取消关联**。这会断开 Web ACL 与您的 AWS 资源的关联。

1. 在以下每个屏幕中，选择**下一步**，直到您返回到 **web ACL** 页面。

   在 **web ACL** 页面中，从列表中选择您的 web ACL，然后选择**删除**。

规则和规则语句不存在于规则组和 web ACL 定义之外。如果您删除某个 web ACL，则会删除您在该 web ACL 中定义的所有单独规则。从 web ACL 中删除规则组时，您只需删除对它的引用即可。

# 如何 AWS WAF 运作
<a name="how-aws-waf-works"></a>

您可以使用 AWS WAF 控制受保护的资源如何响应 HTTP (S) Web 请求。为此，您可以定义 web 访问控制列表（web ACL），然后将其与要保护的一个或多个 web 应用程序资源相关联。关联的资源会将传入的请求转发给，以便 Web ACL AWS WAF 进行检查。

**新控制台**简化了 web ACL 的配置过程。该控制台引入了保护包，以简化设置，同时保持对安全规则的完全控制。

保护包是 Web 的新位置，可简 ACLs 化控制台中的 Web ACL 管理，但它们不会更改底层 Web ACL 功能。使用标准控制台或 API 时，您仍然可以直接使用 Web ACLs。

在保护包（web ACL）中，您可以创建规则以定义要在请求中查找的流量模式，并指定要对匹配的请求执行哪些操作。操作选择包括以下内容：
+ 允许请求转到受保护的资源以进行处理和响应。
+ 阻止请求。
+ 计算请求数量。
+ 运行验证码或对请求进行质询检查，以验证人类用户和标准浏览器的使用情况。

**AWS WAF 组件**  
以下是以下内容的核心组成部分 AWS WAF：
+ **web ACLs** — 使用 Web 访问控制列表 (Web ACL) 来保护一组 AWS 资源。您可以创建 web ACL 并通过添加规则来定义其保护策略。规则可定义检查 web 请求的条件，并指定对符合条件的请求采取的行动。您还可以为 web ACL 设置默认操作，指示是阻止还是允许通过规则尚未阻止或允许的任何请求。有关 Web 的更多信息 ACLs，请参阅[在中配置保护 AWS WAF](web-acl.md)。

  Web ACL 是一种 AWS WAF 资源。
+ **保护包 (Web ACL)**-在新控制台中，保护包是您的 Web 的新位置 ACLs。在设置过程中，您需要提供有关您的应用程序和资源的信息。 AWS WAF 推荐根据您的场景量身定制的保护包，然后创建一个 Web ACL，其中包含由您选择的保护包 (Web ACL) 定义的规则、规则组和操作。有关保护包 (Web ACLs) 的更多信息，请参阅[在中配置保护 AWS WAF](web-acl.md)。

  保护包 (Web ACL) 是一种 AWS WAF 资源。
+ **规则**：每条规则都包含定义检查条件的语句，还包含在 web 请求满足条件时要执行的操作。当 web 请求满足条件时，这是一个匹配。您可以配置规则来阻止匹配请求、允许请求通过、对请求进行计数，或者对使用验证码拼图或静默客户端浏览器质询的请求运行机器人控制功能。有关规则的更多信息，请参阅 [AWS WAF 规则](waf-rules.md)。

  规则不是 AWS WAF 资源。规则仅存在于保护包（web ACL）或规则组的上下文中。
+ **规则组**-您可以直接在保护包（Web ACL）中或在可重复使用的规则组中定义规则。 AWS 托管规则和 AWS Marketplace 卖家提供托管规则组供您使用。您还可以定义自己的规则组。有关规则组的更多信息，请参阅 [AWS WAF 规则组](waf-rule-groups.md)。

  规则组是一种 AWS WAF 资源。
+ **Web ACL 容量单位 (WCUs)** — AWS WAF 用于 WCUs 计算和控制运行规则、规则组、保护包 (Web ACLs) 或 Web 所需的操作资源 ACLs。

  WCU 不是 AWS WAF 资源。WCU 仅存在于保护包（web ACL）、规则或规则组的上下文中。

# 你可以用来保护的资源 AWS WAF
<a name="how-aws-waf-works-resources"></a>

您可以使用 AWS WAF 保护包 (Web ACL) 来保护全球或区域资源类型。为此，您可以将保护包（web ACL）与要保护的资源关联起来。保护包（Web ACL）及其使用的任何 AWS WAF 资源都必须位于关联资源所在的区域。对于 Amazon CloudFront 分配，设置为美国东部（弗吉尼亚北部）。

**亚马逊配 CloudFront 送**  
您可以使用 AWS WAF 控制台或将 AWS WAF 保护包 (Web ACL) 与 CloudFront 发行版相关联 APIs。在创建或更新 CloudFront 分发本身时，也可以将保护包 (Web ACL) 与发行版相关联。要在中配置关联 AWS CloudFormation，必须使用 CloudFront 分发配置。有关亚马逊的信息 CloudFront，请参阅《*亚马逊 CloudFront 开发者指南》*中的 “[使用 AWS WAF 来控制对您的内容的访问权限](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html)”。

AWS WAF 可在全球范围内 CloudFront 分发，但您必须使用美国东部区域（弗吉尼亚北部）来创建您的保护包（Web ACL）以及保护包中使用的任何资源（Web ACL），例如规则组、IP 集和正则表达式模式集。有些接口提供 “Global (CloudFront)” 的区域选择。选择此选项等同于选择美国东部（弗吉尼亚州北部）地区或“us-east-1”。

**区域性资源**  
您可以保护所有可用的区域中的区域资源。 AWS WAF 您可以参阅 *Amazon Web Services 一般参考* 中的 [AWS WAF 端点和限额](https://docs.aws.amazon.com/general/latest/gr/waf.html)。

您可以使用 AWS WAF 来保护以下区域资源类型：
+ Amazon API Gateway REST API
+ 应用程序负载均衡器
+ AWS AppSync GraphQL API
+ Amazon Cognito 用户池
+ AWS App Runner 服务
+ AWS 已验证访问实例
+ AWS Amplify

您只能将保护包（web ACL）关联到 AWS 区域中的应用程序负载均衡器。例如，您无法将保护包（web ACL）关联到 AWS Outposts上的应用程序负载均衡器。

您必须创建任何要与全球 CloudFront 区域的 Amplify 应用程序关联的保护包（Web ACL）。您的区域保护包（Web ACL）中可能已经有了 AWS 账户，但它们与 Amplify 不兼容。

保护包（Web ACL）及其使用的任何其他 AWS WAF 资源必须与受保护资源位于同一区域。在监控和管理受保护区域资源的 Web 请求时，请 AWS WAF 将所有数据与受保护资源保存在同一个区域。

**对多重资源关联的限制**  
您可以将单个保护包 (Web ACL) 与一个或多个 AWS 资源关联，但有以下限制：
+ 您只能将每个 AWS 资源与一个保护包（Web ACL）相关联。保护包 (Web ACL) 和 AWS 资源之间的关系是 one-to-many。
+ 您可以将保护包 (Web ACL) 与一个或多个 CloudFront 发行版相关联。您不能将已与 CloudFront 分配关联的保护包 (Web ACL) 与任何其他 AWS 资源类型相关联。

# 使用更新的控制台体验
<a name="working-with-console"></a>

 AWS WAF 提供了两个使用控制台的选项：

 **新控制台**旨在简化标准控制台工作流程所需的 web ACL 配置过程。您可以使用指导式工作流程，通过保护包（web ACL）简化 web ACL 的创建和管理过程。保护包 (Web ACL) 可以更轻松地在控制台 ACLs 中使用和管理 Web，但在功能上与 Web ACL 并无区别。除了改进的保护配置流程外，新的控制台还通过安全仪表板增强了对保护措施的可见性，从而可以更轻松地在 AWS WAF 控制台中监控您的安全状况。

 **标准 AWS WAF 控制台**提供了一种使用 Web 配置 Web 应用程序防火墙保护的传统方法 ACLs。它提供对单个规则和规则组的精细控制，现有 AWS WAF 用户很熟悉。使用此控制台，您可以详细控制保护配置，以便精确地自定义安全设置。

**提示**  
 选择最适合您需求的控制台体验。如果您不熟悉 AWS WAF 或想开始根据 AWS 建议配置保护，我们建议您从全新的主机体验开始。但是，您始终可以通过控制台的导航窗格打开标准体验。

## 新控制台体验和标准控制台体验之间的功能相同
<a name="feature-parity"></a>

新控制台体验在引入新功能的同时，保留了与现有控制台完全相同的功能：
+ 所有现有 AWS WAF 功能仍然可用
+ 通过统一的控制面板增强可见性
+ 简化配置工作流程
+ 新的保护包（web ACL）模板

**重要**  
新的主机体验使用与现有主机 WAFv2 APIs 相同的体验。这意味着在新控制台中创建的保护包将在 API 级别作为标准 WAFv2 Web ACLs 实现。

## 主要区别
<a name="key-differences"></a>


**控制台体验比较**  

| 功能 | 之前 AWS WAF 的主机体验 | 更新的控制台体验 | 
| --- | --- | --- | 
| 配置过程 | 多页工作流程 | 单页界面 | 
| 规则配置 | 创建单个规则 | 预配置保护包的选项 | 
| 监控 | 单独的控制面板 | 统一可见性，包括 AI 流量分析 | 

## 了解新的控制面板
<a name="understanding-new-dashboard"></a>

新推出的控制面板可通过以下可视化方式统一了解您的安全态势：

**流量洞察建议** — AWS 威胁情报会监控您前 2 周的允许流量，分析漏洞，并提供以下信息：  
+ 基于流量的规则建议
+ 特定于应用程序的安全建议
+ 保护优化指导

**摘要**：显示指定时间段内所有流量的请求计数。您可以使用以下标准筛选流量数据：  
+ **规则**：按保护包中的单个规则进行筛选。
+ **操作**：显示对流量采取的特定操作（例如“允许”、“阻止”、“验证码”和“质询”）计数。
+ **流量类型**-仅显示特定流量类型（例如反 DDo S或机器人）的计数。
+ **时间范围**：从预定义的时间范围中进行选择，也可以设置自定义范围。
+ **当地时间或 UTC 时间**：您可以设置首选的时间格式。

**AI 流量分析** — 提供对 AI 机器人和代理活动的全面可见性：  
+ **机器人识别**-机器人名称、组织和验证状态。
+ **意图分析** — AI 代理的目的和行为模式。
+ **访问模式**-最常访问 URLs 和端点。
+ **时间趋势**-按时间和历史趋势（0-14 天）划分的活动模式。
+ **流量特征** — AI 流量的流量、分布和异常检测。

**保护活动**：可视化显示您的保护规则及其顺序如何影响终止操作。  
+ **通过规则的流量**：显示通过规则的流量。从**顺序规则视图**切换到**非顺序规则视图**，查看规则顺序如何影响结果。
+ **规则操作及其结果**：显示规则在指定时间段内对流量采取的终止操作。

**操作总计**：一张图表，可视化显示指定时间范围内对请求采取的总操作次数。使用**叠加过去 3 小时**选项，将当前时间段与之前 3 小时的时间窗口进行比较。可按如下条件筛选数据：  
+ **允许操作**
+ **操作总数**
+ **验证码操作**
+ **质询操作**
+ **阻断操作**

**所有规则**：一张图表，可视化显示保护包中所有规则的指标。  
+  使用**叠加过去 3 小时**选项，将当前时间段与之前 3 小时的时间窗口进行比较。

**概述控制面板**：提供安全状态的全面、图形化视图，包括以下内容：  
+ **流量特征**：按来源、攻击类型或发送请求的客户端设备类型查看流量概览。
+ **规则特征**：按十大最常见规则及终止操作对攻击进行的分类。
+ **机器人**：可视化显示机器人活动、检测、类别及机器人相关信号标签。
+ **Ant DDo i-S** — 检测到并缓解的第 7 层 DDo S 活动概述。

# 在中配置保护 AWS WAF
<a name="web-acl"></a>

本页说明了什么是保护包（网络 ACLs）以及它们的工作原理。

 保护包（web ACL）可让您对受保护资源响应的所有 HTTP(S) web 请求进行精细控制。你可以保护亚马逊 CloudFront、亚马逊 API Gateway、Application Load Balancer AWS AppSync、、Amazon Cognito AWS App Runner、、 CloudWatch、A AWS Amplify mazon 和 AWS 已验证访问资源。

您可以使用如下条件来允许或阻止请求：
+ 请求的 IP 地址源
+ 请求的源国家/地区
+ 部分请求中的字符串匹配或正则表达式匹配
+ 请求特定部分的大小
+ 检测恶意 SQL 代码或脚本 

您还可以针对这些条件的任何组合进行测试。您可以阻止或统计不仅满足指定条件，还在一分钟内超过指定请求数的 web 请求。您可以使用逻辑运算符组合条件。您还可以根据请求运行验证码拼图和静默客户端会话质询。

您在 AWS WAF 规则语句中提供匹配条件和对匹配项采取的操作。您可以直接在保护包（web ACL）中定义规则语句，也可以在可重复使用的规则组（您在保护包（web ACL）中使用的规则组）中进行定义。有关选项的完整列表，请参阅 [在中使用规则语句 AWS WAF](waf-rule-statements.md) 和 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

创建保护包（web ACL）时，您可以指定要使用它的资源类型。有关信息，请参阅[在中创建保护包 (Web ACL) AWS WAF](web-acl-creating.md)。定义保护包（web ACL）后，您可以将其与资源相关联，以开始为资源提供保护。有关更多信息，请参阅 [将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

**注意**  
在某些情况下， AWS WAF 可能会遇到内部错误，从而延迟对相关 AWS 资源的响应，以决定是允许还是阻止请求。在这些情况下， CloudFront 通常会允许请求或提供内容，而区域服务通常会拒绝请求并且不提供内容。

**生产流量风险**  
在保护包（web ACL）中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

**Topics**
+ [在中创建保护包 (Web ACL) AWS WAF](web-acl-creating.md)
+ [在中编辑保护包 (Web ACL) AWS WAF](web-acl-editing.md)
+ [管理规则组行为](web-acl-rule-group-settings.md)
+ [将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)
+ [使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)
+ [在中设置保护包 (Web ACL) 的默认操作 AWS WAF](web-acl-default-action.md)
+ [管理人体检查的注意事项 AWS WAF](web-acl-setting-body-inspection-limit.md)
+ [在中配置验证码、挑战和令牌 AWS WAF](web-acl-captcha-challenge-token-domains.md)
+ [在中查看 Web 流量指标 AWS WAF](web-acl-working-with.md)
+ [删除保护包（web ACL）](web-acl-deleting.md)

# 在中创建保护包 (Web ACL) AWS WAF
<a name="web-acl-creating"></a>

------
#### [ Using the new console ]

本节提供通过新 AWS 控制台创建保护包 (Web ACLs) 的过程。

要创建新的保护包（web ACL），请按照本页上的步骤使用保护包（web ACL）创建向导。

**生产流量风险**  
在保护包（web ACL）中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

1. 登录新版 AWS 管理控制台 并通过 [https://console.aws.amazon.com/waf](https://console.aws.amazon.com/wafv2-pro) v2-pro 打开 AWS WAF 控制台。

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

1. 在**资源和保护包 (Web ACLs)** 页面上，选择**添加保护包 (Web ACL)**。

1. 在**向我们介绍您的应用程序**下，对于**应用程序类别**，选择一个或多个应用程序类别。

1. 对于**流量源**，选择应用程序使用的流量类型：**API**、**Web** 或 **API 和 Web 兼具**。

1. 在**要保护的资源**下，选择**添加资源**。

1. 选择您要与该保护包关联的 AWS 资源类别（Web ACL），可以是 Amazon CloudFront 发行版或区域资源。有关更多信息，请参阅 [将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

1. 在**选择初始保护**下，选择您的首选保护级别：**推荐**、**基本**或**自行构建**。

1. （可选）如果选择**自行构建**，请构建您的规则。

   1. （可选）如果要添加您自己的规则，请在**添加规则**页面上，选择**自定义规则**，然后选择**下一步**。

      1. 选择规则类型。

      1. 对于**操作**，选择您希望规则在与 web 请求匹配时执行的操作。有关您的选择的信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)和 [使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)。

         如果您使用的是 **CAPTCHA** 或 **Challenge** 操作，请根据规则需要调整**免疫时间**配置。如果您未指定设置，则规则将从此保护包（web ACL）继承设置。要修改保护包（web ACL）免疫时间设置，请在创建保护包（web ACL）后对其进行编辑。有关免疫时间的更多信息，请参阅 [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。
**注意**  
当您在其中一个规则中使用 CAPTCHA 或 Challenge 规则操作或在规则组中将其作为规则操作覆盖时，您需要支付额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

         如果您想自定义请求或响应，请选择相应选项并填写自定义的详细信息。有关更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

         如果您想让您的规则为匹配的 web 请求添加标签，请选择相应选项并填写标签详细信息。有关更多信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

      1. 对于 **名称**，输入要用于标识此规则的名称。不要使用以 `AWS`、`Shield`、`PreFM` 或 `PostFM` 开头的名称。这些字符串要么是保留字符串，要么可能与其他服务所管理的规则组混淆。

      1. 根据您的需求输入您的规则定义。您可以在逻辑 `AND` 和 `OR` 规则语句中组合规则。该向导将根据上下文指导您学习每个规则的选项。有关规则选项的信息，请参阅 [AWS WAF 规则](waf-rules.md)。

      1. 选择 **Create rule**（创建规则）。
**注意**  
如果您向保护包 (Web ACL) 中添加多个规则，则 AWS WAF 会按照这些规则在保护包 (Web ACL) 中列出的顺序对这些规则进行评估。有关更多信息，请参阅 [使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)。

   1. （可选）如果要添加托管规则组，请在**添加规则**页面上，选择 **AWS托管规则组**或 **AWS Marketplace 规则组**，然后选择**下一步**。对要添加的每个托管规则组执行以下操作：

      1. 在**添加规则**页面上，展开 AWS 托管规则组或 AWS Marketplace 卖家的列表。

      1. 选择规则组的版本。

      1. 要自定义保护包（web ACL）使用规则组的方式，请选择**编辑**。以下是常见的自定义设置：
         + 通过在**检查**部分添加范围缩小语句，缩小规则组检查的 web 请求范围。有关此选项的更多信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。
         + 在**规则覆盖**中，覆盖部分或全部规则的规则操作。如果您没有为规则定义覆盖操作，则评估将使用规则组中定义的规则操作。有关此选项的更多信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。
         + 某些托管规则组要求您提供其他配置。请参阅您的托管规则组提供程序所提供的文档。有关 AWS 托管规则组的特定信息，请参阅[AWS 的托管规则 AWS WAF](aws-managed-rule-groups.md)。

      1. 选择**下一步**。

   1. （可选）如果要添加您自己的规则组，请在**添加规则**页面上，选择**自定义规则组**，然后选择**下一步**。对要添加的每个规则组执行以下操作：

      1. 在**名称**中，输入要用于此保护包（web ACL）中规则组规则的名称。不要使用以 `AWS`、`Shield`、`PreFM` 或 `PostFM` 开头的名称。这些字符串要么是保留字符串，要么可能与其他服务所管理的规则组混淆。请参阅[识别其他服务提供的规则组](waf-service-owned-rule-groups.md)。

      1. 从列表中选择您的规则组。

      1. （可选）在**规则配置**下，选择**规则覆盖**。您可以将规则操作改写为任何有效的操作设置，这与托管规则组的操作相同。

      1. （可选）在**添加标签**下，选择**添加标签**，然后输入要添加到匹配规则的请求的任何标签。稍后在同一保护包（web ACL）中评估的规则可以引用此规则添加的标签。

      1. 选择 **Create rule**（创建规则）。

1. 在**名称和描述**下，为您的保护包（web ACL）输入名称。（可选）输入描述。
**注意**  
保护包（web ACL）在创建之后无法更改名称。

1. （可选）在**自定义保护包（web ACL）**下，配置默认规则操作、配置和日志记录目标：

   1. （可选）在**默认规则操作**下，选择保护包（web ACL）的默认操作。这是当保护包 (Web ACL) 中的规则未明确采取操作时对请求采取的操作。 AWS WAF 有关更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

   1. （可选）在“规则配置”下，自定义保护包（web ACL）中规则的设置：
      + **默认速率限制**：设置速率限制，以阻止可能影响可用性、危及安全性或消耗过多资源的阻断服务（DoS）攻击。此规则速率会阻止超过应用程序允许速率的每个 IP 地址的请求。有关更多信息，请参阅 [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)。
      + **IP 地址**：输入要阻止或允许的 IP 地址。此设置会覆盖其他规则。
      + **国家/地区特定来源**：阻止特定国家/地区的请求或计数所有流量。

   1. 在**日志记录目标**中，配置日志记录目标类型和存储日志的位置。有关更多信息，请参阅 [AWS WAF 登录目的地](logging-destinations.md)。

1. 查看您的设置，并选择**添加保护包（web AC）**。

------
#### [ Using the standard console ]

本节提供 ACLs 通过 AWS 控制台创建 Web 的过程。

要创建新的 web ACL，请按照本页上的步骤使用 web ACL 创建向导。

**生产流量风险**  
在 web ACL 中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**创建 web ACL**

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

1. 在导航窗格 ACLs中选择 **Web**，然后选择**创建 Web ACL**。

1. 对于 **名称**，输入要用于标识此 web ACL 的名称。
**注意**  
web ACL 在创建之后无法更改名称。

1. （可选）对于 **描述 - 可选**，如果需要，请输入 web ACL 的较长描述。

1. 对于 **CloudWatch metric name (CloudWatch 指标名称)**，更改默认名称（如果适用）。按照控制台上的指导进行有效字符操作。名称不能包含为其保留的特殊字符、空格或指标名称 AWS WAF，包括 “全部” 和 “Default\$1Action”。
**注意**  
创建 Web ACL 后，您无法更改 CloudWatch 指标名称。

1. 在 “**资源类型**” 下，选择要与此 Web ACL 关联的 AWS 资源类别，即 Amazon CloudFront 分配或区域资源。有关更多信息，请参阅 [将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

1. 对于**区域**，如果您选择了区域资源类型，请选择 AWS WAF 要存储 Web ACL 的区域。

   您只需要为区域资源类型选择此选项。对于 CloudFront 分发，对于全球 () 应用程序，区域被硬编码为美国东部（弗吉尼亚北部CloudFront）区域。`us-east-1`

1. （CloudFront、API Gateway、Amazon Cognito、App Runner 和已验证访问权限）对于 **Web 请求检查大小限制-可选**，如果您想指定不同的身体检查大小限制，请选择该限制。如果检查正文大小是否超过默认值 16 KB，可能会产生额外费用。有关此选项的更多信息，请参阅 [管理人体检查的注意事项 AWS WAF](web-acl-setting-body-inspection-limit.md)。

1. （可选）对于**关联 AWS 资源-可选**，如果您想立即指定资源，请选择**添加 AWS 资源**。在对话框中，选择要关联的资源，然后选择**添加**。 AWS WAF 返回到**描述 Web ACL 和关联 AWS 资源**页面。
**注意**  
当您选择将 Application Load Balancer 与 Web ACL 关联时，将**启用资源级 DDo S 保护**。有关更多信息，请参阅 [AWS WAF 分布式拒绝服务防护 DDo](waf-anti-ddos.md)。

1. 选择**下一步**。

1. （可选）如果要添加托管规则组，请在 **添加规则和规则组** 页面上，选择 **添加规则**，然后选择 **添加托管规则组**。对要添加的每个托管规则组执行以下操作：

   1. 在**添加托管规则组**页面上，展开 AWS 托管规则组或您选择的 AWS Marketplace 卖家的列表。

   1. 对于要添加的规则组，在**操作**列中，打开**添加到 web ACL**切换选项。

      要自定义 web ACL 使用规则组的方式，请选择**编辑**。以下是常见的自定义设置：
      + 覆盖部分或全部规则的规则操作。如果您没有为规则定义覆盖操作，则评估将使用规则组中定义的规则操作。有关此选项的更多信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。
      + 通过添加范围缩小语句，缩小规则组检查的 web 请求的范围。有关此选项的更多信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。
      + 某些托管规则组要求您提供其他配置。请参阅您的托管规则组提供程序所提供的文档。有关 AWS 托管规则组的特定信息，请参阅[AWS 的托管规则 AWS WAF](aws-managed-rule-groups.md)。

      完成设置后，选择**保存规则**。

   选择 **添加规则** 以完成托管规则的添加，然后返回 **添加规则和规则组** 页面。
**注意**  
如果您向 Web ACL 添加多个规则，则 AWS WAF 会按照 Web ACL 中列出的顺序对这些规则进行评估。有关更多信息，请参阅 [使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)。

1. （可选）如果要添加您自己的托管规则组，请在 **添加规则和规则组** 页面上，选择 **添加规则**，然后选择 **添加我自己的规则和规则组**。对要添加的每个规则组执行以下操作：

   1. 在 **添加我自己的规则和规则组** 页面上，选择 **规则组**。

   1. 在**名称**中，输入要用于此 web ACL 中的规则组规则的名称。不要使用以 `AWS`、`Shield`、`PreFM` 或 `PostFM` 开头的名称。这些字符串要么是保留字符串，要么可能与其他服务所管理的规则组混淆。请参阅[识别其他服务提供的规则组](waf-service-owned-rule-groups.md)。

   1. 从列表中选择您的规则组。
**注意**  
如果您要覆盖自己的规则组的规则操作，请先将其保存到 web ACL 中，然后在 web ACL 的规则列表中编辑 web ACL 和规则组参考语句。您可以将规则操作改写为任何有效的操作设置，这与托管规则组的操作相同。

   1. 选择**添加规则**。

1. （可选）如果要添加您自己的规则，请在 **添加规则和规则组** 页面上，依次选择 **添加规则**、**添加我自己的规则和规则组**、**规则生成器**，然后选择 **规则可视化编辑器**。
**注意**  
控制台 **规则可视化编辑器** 支持一个嵌套级别。例如，您可以使用单个逻辑 `AND` 或 `OR` 语句，并在其中嵌套一个级别的其他语句，但不能在逻辑语句中嵌套逻辑语句。要管理更复杂的规则语句，请使用 **规则 JSON 编辑器**。有关规则的所有选项的信息，请参阅 [AWS WAF 规则](waf-rules.md)。  
此过程涵盖 **规则可视化编辑器**。

   1. 对于 **名称**，输入要用于标识此规则的名称。不要使用以 `AWS`、`Shield`、`PreFM` 或 `PostFM` 开头的名称。这些字符串要么是保留字符串，要么可能与其他服务所管理的规则组混淆。

   1. 根据您的需求输入您的规则定义。您可以在逻辑 `AND` 和 `OR` 规则语句中组合规则。该向导将根据上下文指导您学习每个规则的选项。有关规则选项的信息，请参阅 [AWS WAF 规则](waf-rules.md)。

   1. 对于**操作**，选择您希望规则在与 web 请求匹配时执行的操作。有关您的选择的信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)和 [使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)。

      如果您使用的是 **CAPTCHA** 或 **Challenge** 操作，请根据规则需要调整**免疫时间**配置。如果您未指定设置，则规则将从 web ACL 继承设置。要修改 web ACL 免疫时间设置，请在创建 web ACL 后对其进行编辑。有关免疫时间的更多信息，请参阅 [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。
**注意**  
当您在其中一个规则中使用 CAPTCHA 或 Challenge 规则操作或在规则组中将其作为规则操作覆盖时，您需要支付额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

      如果您想自定义请求或响应，请选择相应选项并填写自定义的详细信息。有关更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

      如果您想让您的规则为匹配的 web 请求添加标签，请选择相应选项并填写标签详细信息。有关更多信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

   1. 选择**添加规则**。

1. 选择 web ACL 的默认操作（Block 或 Allow）。当 Web ACL 中的规则未明确允许或阻止请求时，这是对请求采取的操作。 AWS WAF 有关更多信息，请参阅 [在中设置保护包 (Web ACL) 的默认操作 AWS WAF](web-acl-default-action.md)。

   如果您想自定义默认操作，请选择相应选项并填写自定义的详细信息。有关更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

1. 您可以定义**令牌域列表**，以便在受保护的应用程序之间实现令牌共享。当您使用 AWS 托管规则组进行 AWS WAF 欺诈控制账户创建欺诈 (ACFP)、欺诈控制账户接管预防 (ATP) 和 AWS WAF 机器人控制时， AWS WAF 令牌由和Challenge操作以及应用程序集成 SDKs 使用。CAPTCHA

   不允许使用公共后缀。例如，您不能使用 `gov.au` 或 `co.uk` 作为令牌域。

   默认情况下，仅 AWS WAF 接受受保护资源域的令牌。如果您在此列表中添加令牌域，则 AWS WAF 接受列表中所有域和关联资源域的令牌。有关更多信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。

1. 选择**下一步**。

1. 在 “**设置规则优先级**” 页面中，选择您的规则和规则组，然后按照您想要的顺序 AWS WAF 进行处理。 AWS WAF 从列表顶部开始处理规则。保存 web ACL 时， AWS WAF 会按照规则的列出顺序为规则分配数字优先级设置。有关更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

1. 选择**下一步**。

1. 在**配置指标**页面中，查看选项并应用所需的任何更新。您可以通过为多个来源提供相同的**CloudWatch 指标名称**来合并这些指标。

1. 选择**下一步**。

1. 在 **审核和创建 web ACL** 页面中，检查您的定义。如果要更改任何区域，请为该区域选择 **Edit (编辑)**。这将使您返回到 web ACL 向导中的页面。进行任何更改，然后在后续页面中选择 **下一步**，直到您返回 **审核和创建 web ACL** 页面。

1. 选择 **创建 web ACL**。您的新 Web ACL 已在** ACLs网页**中列出。

------

# 在中编辑保护包 (Web ACL) AWS WAF
<a name="web-acl-editing"></a>

------
#### [ Using the new console ]

本节提供通过 AWS 控制台编辑保护包 (Web ACLs) 的过程。

要在保护包（web ACL）中添加或删除规则或更改配置设置，请使用本页面上的步骤访问保护包（web ACL）。更新保护包 (Web ACL) AWS WAF 时，可以持续覆盖与保护包 (Web ACL) 关联的资源。

**生产流量风险**  
在保护包（web ACL）中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**编辑保护包（web ACL）**

1. 登录新版 AWS 管理控制台 并通过 [https://console.aws.amazon.com/waf](https://console.aws.amazon.com/wafv2-pro) v2-pro 打开 AWS WAF 控制台。

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

1. 选择要编辑的保护包（web ACL）。控制台使主保护包（web ACL）卡可编辑，还会打开可在其中编辑详细信息的侧面板。

1. 根据需要编辑保护包（web ACL）。

   以下列出可编辑的保护包（web ACL）配置组件。

   本节提供 ACLs 通过 AWS 控制台编辑 Web 的过程。

   要在 web ACL 中添加或删除规则或更改配置设置，请使用本页面上的步骤访问 web ACL。更新 Web ACL 时 AWS WAF ，可以持续覆盖您与 Web ACL 关联的资源。

**生产流量风险**  
在 web ACL 中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

------
#### [ Using the standard console ]

本节提供 ACLs 通过 AWS 控制台编辑 Web 的过程。

要在 web ACL 中添加或删除规则或更改配置设置，请使用本页面上的步骤访问 web ACL。更新 Web ACL 时 AWS WAF ，可以持续覆盖您与 Web ACL 关联的资源。

**生产流量风险**  
在 web ACL 中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**编辑 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. 根据需要编辑 web ACL。选择您感兴趣的配置区域的选项卡，然后编辑可变设置。对于您编辑的每个设置，当您选择**保存**并返回 web ACL 的描述页面时，控制台会保存您对 web ACL 所做的更改。

   下面列出了包含 web ACL 配置组件的选项卡。
   + **规则**选项卡
     + **在 web ACL 中定义的规则**：您可以编辑和管理在 web ACL 中定义的规则，正如您创建 web ACL 时的操作一样。
**注意**  
请勿更改任何未手动添加到 web ACL 的规则的名称。如果您使用其他服务为您管理规则，则更改其名称可能会取消或削弱他们提供预期保护的能力。 AWS Shield Advanced 并且 AWS Firewall Manager 两者都可以在您的 Web ACL 中创建规则。有关信息，请参阅[识别其他服务提供的规则组](waf-service-owned-rule-groups.md)。
**注意**  
如果您更改了规则的名称，并且希望该规则的指标名称反映更改，则还必须更新该指标名称。 AWS WAF 当您更改规则名称时，不会自动更新规则的指标名称。在控制台中编辑规则时，您可以使用规则 JSON 编辑器更改指标名称。您还可以通过 APIs 和更改用于定义保护包 (Web ACL) 或规则组的任何 JSON 列表中的名称。

       有关规则和规则组设置的信息，请参阅 [AWS WAF 规则](waf-rules.md) 和 [AWS WAF 规则组](waf-rule-groups.md)。
     + **web ACL 规则使用的容量单位**：web ACL 的当前容量使用情况。这一项仅供查看。
     + **与任何规则都不匹配的请求的默认 web ACL 操作**：有关此设置的信息，请参阅 [在中设置保护包 (Web ACL) 的默认操作 AWS WAF](web-acl-default-action.md)。
     + **web ACL 验证码和质询配置**：这些免疫时间决定了验证码或质询令牌在被获取后的有效时间。只有在创建 web ACL 之后，才能在此处修改此设置。有关这些设置的信息，请参阅 [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。
     + **令牌域名列表** — AWS WAF 接受列表中所有域名和关联资源域的令牌。有关更多信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。
   + “**关联 AWS 资源**” 选项卡
     + **Web 请求检查大小限制** — 仅适用于保护 CloudFront 发行版 ACLs 的 Web。车身检查的大小限制决定了车身部件的多少被转 AWS WAF 送到接受检查。有关该设置的更多信息，请参阅 [管理人体检查的注意事项 AWS WAF](web-acl-setting-body-inspection-limit.md)。
     + **关联 AWS 资源**：web ACL 当前关联并保护的资源列表。您可以找到与 web ACL 位于同一区域的资源，并将它们与 web ACL 关联起来。有关更多信息，请参阅 [将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。
   + **自定义响应正文**选项卡
     + 自定义响应正文可供将操作设置为 Block 的 web ACL 规则使用。有关更多信息，请参阅 [发送 Block 操作的自定义响应](customizing-the-response-for-blocked-requests.md)。
   + **日志和指标**选项卡
     + **日志记录**：记录 web ACL 评估的流量。有关信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。
     + **Security Lake 集成**：您在 Amazon Security Lake 中为 web ACL 配置的所有数据收集的状态。有关信息，请参阅 *Amazon Security Lake 用户指南*中的[从 AWS 服务收集数据](https://docs.aws.amazon.com/security-lake/latest/userguide/internal-sources.html)。
     + **采样的请求**：有关与 web 请求匹配的规则的信息。有关查看采样请求的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。
     + **数据保护设置**-您可以为 Web ACL 的所有可用数据以及仅针对 AWS WAF 发送到已配置的 Web ACL 日志记录目标的数据配置 Web 流量数据编辑和筛选。有关数据保护的信息，请参阅 [保护包 (Web ACL) 流量的数据 AWS WAF 保护和日志记录](waf-data-protection-and-logging.md)。
     + **CloudWatch 指标** — Web ACL 中规则的指标。有关 Amazon CloudWatch 指标的信息，请参阅[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

------

# 管理规则组行为
<a name="web-acl-rule-group-settings"></a>

本节介绍修改在保护包（web ACL）中如何使用规则组的选项。此信息适用于所有规则组类型。将规则组添加到保护包（web ACL）后，您可以将规则组中各个规则的操作覆盖为 Count 或任何其他有效的规则操作设置。您也可以将规则组生成的操作覆盖为 Count，这不会影响规则组内规则的评估方式。

有关这些选项的信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。

## 覆盖规则组的规则操作
<a name="web-acl-rule-group-rule-action-override"></a>

对于保护包（web ACL）中的每个规则组，您可以针对部分或全部规则覆盖所含规则的操作。

最常见的使用案例是将规则操作覆盖为 Count 以测试新的或更新的规则。如果您启用了指标，您将收到您覆盖的每条规则的指标。有关测试的更多信息，请参阅 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

可以在将托管规则组添加到保护包（web ACL）时进行这些更改，也可以在编辑保护包（web ACL）时对任何类型的规则组进行更改。这些说明适用于已添加到保护包（web ACL）的规则组。有关此选项的其他信息，请访问 [规则组规则操作的覆盖](web-acl-rule-group-override-options.md#web-acl-rule-group-override-options-rules)。

------
#### [ Using the new console ]

**覆盖规则组的规则操作**

1. 选择要编辑的保护包（web ACL）。控制台使主保护包（web ACL）卡可编辑，还会打开可在其中编辑详细信息的侧面板。

1. 在保护包（web ACL）卡中，选择**规则**旁边的**编辑**链接，以打开**管理规则**面板。

1. 在规则组的**管理规则**部分，选择托管规则以打开其操作设置。
   + **覆盖规则组**：将规则组操作更改为“计数”模式，但保持所有单个规则操作不变。
   + **覆盖所有规则操作**：将规则操作应用于所有规则，覆盖其当前状态。
   + **单个规则覆盖**：将规则操作应用于单个规则。

1. 完成更改后，选择**保存规则**。

------
#### [ Using the standard console ]

**覆盖规则组的规则操作**

1. 编辑 web ACL。

1. 在 web ACL 页面的**规则**选项卡中，选择规则组，然后选择**编辑**。

1. 在规则组的**规则**部分，根据需要管理操作设置。
   + **所有规则**：要为规则组中的所有规则设置覆盖操作，请打开**覆盖所有规则操作**下拉列表并选择覆盖操作。要移除所有规则的覆盖，请选择**移除所有覆盖**。
   + **单一规则**：要为单个规则设置覆盖操作，请打开该规则的下拉列表并选择覆盖操作。要移除规则的覆盖，请打开该规则的下拉列表并选择**移除覆盖**。

1. 完成更改后，选择**保存规则**。规则操作和覆盖操作设置列于规则组页面中。

------

以下 JSON 列表示例显示保护包（web ACL）中的规则组语句，该语句将规则操作覆盖为适用 `CategoryVerifiedSearchEngine` 和 `CategoryVerifiedSocialMedia` 规则的 Count。在 JSON 中，您可以通过为每条规则提供一个 `RuleActionOverrides` 条目来覆盖所有规则操作。

```
{
    "Name": "AWS-AWSBotControl-Example",
   "Priority": 5, 
   "Statement": {
    "ManagedRuleGroupStatement": {
        "VendorName": "AWS",
        "Name": "AWSManagedRulesBotControlRuleSet",
        "RuleActionOverrides": [
          {
            "ActionToUse": {
              "Count": {}
            },
            "Name": "CategoryVerifiedSearchEngine"
          },
          {
            "ActionToUse": {
              "Count": {}
            },
            "Name": "CategoryVerifiedSocialMedia"
          }
        ],
        "ExcludedRules": []
    },
   "VisibilityConfig": {
       "SampledRequestsEnabled": true,
       "CloudWatchMetricsEnabled": true,
       "MetricName": "AWS-AWSBotControl-Example"
   }
}
```

## 将规则组的评估结果覆盖为 Count
<a name="web-acl-rule-group-action-override"></a>

您可以覆盖规则组评估产生的操作，而无需更改规则组中规则的配置或评估方式。此选项并不是常用选项。如果规则组中的任何规则产生了匹配，则此覆盖会将规则组产生的操作设置为 Count。

**注意**  
这种使用案例不常见。大多数操作覆盖都是在规则组内的规则级别完成的，如 [覆盖规则组的规则操作](#web-acl-rule-group-rule-action-override) 中所述。

添加或编辑规则组时，可以在保护包（web ACL）中覆盖规则组生成的操作。在控制台中，打开规则组的**覆盖规则组操作（可选）**窗格并启用覆盖。在 JSON 集 `OverrideAction` 中的规则组语句中，如以下示例列表中所示：

```
{
   "Name": "AWS-AWSBotControl-Example",
   "Priority": 5,  
   "Statement": {
    "ManagedRuleGroupStatement": {
     "VendorName": "AWS",
     "Name": "AWSManagedRulesBotControlRuleSet"
     }
   },
    "OverrideAction": {
       "Count": {}
    },
   "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSBotControl-Example"
   }
}
```

# 将保护与资源关联或取消关联 AWS
<a name="web-acl-associating-aws-resource"></a>

您可以使用 AWS WAF 在保护包 (Web ACLs) 和您的资源之间创建以下关联：
+ 将区域保护包（web ACL）与下面列出的任何区域资源关联。对于此选项，保护包（web ACL）必须与您的资源位于同一区域。
  + Amazon API Gateway REST API
  + 应用程序负载均衡器
  + AWS AppSync GraphQL API
  + Amazon Cognito 用户池
  + AWS App Runner 服务
  + AWS 已验证访问实例
  + AWS Amplify
+ 将全球保护包 (Web ACL) 与 Amazon CloudFront 发行版相关联。全局保护包（web ACL）将具有美国东部（弗吉尼亚州北部）区域的硬编码区域。

在创建或更新 CloudFront 分发本身时，也可以将保护包 (Web ACL) 与发行版相关联。有关信息，请参阅《*Amazon CloudFront 开发者指南》*中的[使用 AWS WAF 来控制对您的内容的访问权限](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html)。

**对多重关联的限制**  
您可以根据以下限制将单个保护包 (Web ACL) 与一个或多个 AWS 资源相关联：
+ 您只能将每个 AWS 资源与一个保护包（Web ACL）相关联。保护包 (Web ACL) 和 AWS 资源之间的关系是 one-to-many。
+ 您可以将保护包 (Web ACL) 与一个或多个 CloudFront 发行版相关联。您不能将已与 CloudFront 分配关联的保护包 (Web ACL) 与任何其他 AWS 资源类型相关联。

**其他限制。**  
当关联保护包（web ACL）时，以下限制也将适用：
+ 您只能将保护包（web ACL）关联到 AWS 区域中的应用程序负载均衡器。例如，您无法将保护包（web ACL）关联到 AWS Outposts上的应用程序负载均衡器。
+ 您无法将 Amazon Cognito 用户池与使用 AWS WAF 欺诈控制账户创建防欺诈 (ACFP) 托管规则组`AWSManagedRulesACFPRuleSet`或欺 AWS WAF 诈控制账户接管预防 (ATP) 托管规则组的保护包 (Web ACL) 相关联。`AWSManagedRulesATPRuleSet`有关账户创建欺诈预防的信息，请参阅 [AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)](waf-acfp.md)。有关账户盗用防护的信息，请参阅 [AWS WAF 防欺诈控制账户接管 (ATP)](waf-atp.md)。

**生产流量风险**  
在为生产流量部署保护包（web ACL）之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对您的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

# 将保护与资源关联 AWS
<a name="web-acl-associating"></a>

------
#### [ Using the new console ]

1. 选择要编辑的保护包（web ACL）。控制台使主保护包（web ACL）卡可编辑，还会打开可在其中编辑详细信息的侧面板。

1. 在保护包（web ACL）卡中，选择**资源**旁边的**编辑**链接，以打开**管理资源**面板。

1. 在规则组的**管理资源**部分，选择**添加区域资源**或**添加全局资源**。

1. 选择资源，然后选择**添加**。

------
#### [ Using the standard console ]

要将 Web ACL 与 AWS 资源关联，请执行以下步骤。

**将 Web ACL 与 AWS 资源关联**

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. 在**关联 AWS 资源**选项卡上，选择**添加 AWS 资源**。

1. 出现提示时，选择资源类型，选择要关联的资源旁的单选按钮，然后选择**添加**。

------

# 取消保护与资源的关联 AWS
<a name="web-acl-dissociating-aws-resource"></a>

------
#### [ Using the new console ]

1. 选择要编辑的保护包（web ACL）。控制台使主保护包（web ACL）卡可编辑，还会打开可在其中编辑详细信息的侧面板。

1. 在保护包（web ACL）卡中，选择**资源**旁边的**编辑**链接，以打开**管理资源**面板。

1. 在规则组的**管理资源**部分，选择要取消关联的资源，然后选择**取消关联**。
**注意**  
一次必须取消关联一个资源。请勿选择多个资源。

1. 在确认页面中，键入“取消关联”，然后选择**取消关联**。

------
#### [ Using the standard console ]

要解除 Web ACL 与 AWS 资源的关联，请执行以下步骤。

**解除 Web ACL 与资源的关联 AWS**

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. 在**关联 AWS 资源**选项卡上，选择要取消与此 Web ACL 关联的资源。
**注意**  
一次必须取消关联一个资源。请勿选择多个资源。
**注意**  
当您选择将 Application Load Balancer 与 WebACL 关联时，将**启用资源级 DDo S 保护**。有关更多信息，请参阅 [AWS WAF 分布式拒绝服务防护 DDo](waf-anti-ddos.md)。

1. 选择**取消关联**。控制台打开确认对话框。确认您选择解除 Web ACL 与 AWS 资源的关联。

------

# 使用包含规则和规则组的保护包 (Web ACLs) AWS WAF
<a name="web-acl-processing"></a>

本节介绍保护包 (Web ACLs) 和 Web 如何 ACLs 使用规则和规则组。

保护包（web ACL）对 web 请求的处理方式取决于以下几点：
+ 保护包（web ACL）和内部规则组中规则的数字优先级设置
+ 规则和保护包（web ACL）上的操作设置
+ 您对添加的规则组中的规则的任何覆盖

有关规则操作设置的列表，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

您可以在规则操作设置和默认保护包（web ACL）操作设置中自定义请求和响应处理。有关信息，请参阅[自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

**Topics**
+ [设置规则优先级](web-acl-processing-order.md)
+ [如何 AWS WAF 处理规则和规则组操作](web-acl-rule-actions.md)
+ [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)

# 设置规则优先级
<a name="web-acl-processing-order"></a>

本节介绍如何 AWS WAF 使用数字优先级设置来设置规则的评估顺序。

在保护包（web ACL）和任何规则组中，您可以使用数字优先级设置来确定规则的评估顺序。您必须为保护包（web ACL）中的每条规则指定该保护包（web ACL）中唯一的优先级设置，也必须为规则组中的每条规则指定该规则组中唯一的优先级设置。

**注意**  
当您管理规则组时，通过控制台的保护包 (Web ACLs) 会根据列表中规则的顺序为您 AWS WAF 分配唯一的数字优先级设置。 AWS WAF 为列表顶部的规则分配最低的数字优先级，为底部的规则分配最高的数字优先级。

当 AWS WAF 根据 Web 请求评估任何规则组，即保护包 (Web ACL) 时，它会从最低的数字优先级设置开始评估规则，直到找到终止评估的匹配项或用尽所有规则。

例如，假设保护包（web ACL）中有以下规则和规则组，其优先级如下所示：
+ Rule1：优先级 0
+ RuleGroupA — 优先级 100
  + RuleA1：优先级 1 万
  + RuleA2：优先级 2 万
+ Rule2：优先级 200
+ RuleGroupB — 优先级 300
  + RuleB1：优先级 0
  + RuleB2：优先级 1

AWS WAF 将按以下顺序评估此保护包 (Web ACL) 的规则：
+ Rule1
+ RuleGroupA rulea1
+ RuleGroupA rulea2
+ Rule2
+ RuleGroupB ruleB1
+ RuleGroupB ruleB2

# 如何 AWS WAF 处理规则和规则组操作
<a name="web-acl-rule-actions"></a>

本节介绍如何 AWS WAF 使用规则和规则组来处理操作。

配置规则和规则组时，您可以选择 AWS WAF 如何处理匹配的 Web 请求：
+ **Allow 和 Block 正在终止操作**：Allow 操作 Block 会停止对匹配的 web 请求进行保护包（web ACL）的所有其他处理。如果保护包 (Web ACL) 中的规则找到了与请求的匹配项，并且规则操作为Allow或Block，则该匹配将决定保护包 (Web ACL) 的 Web 请求的最终处置。 AWS WAF 不处理保护包（Web ACL）中匹配规则之后的任何其他规则。对于直接添加到保护包（web ACL）的规则以及已添加规则组中的规则，此原理同样适用。通过 Block 操作，受保护的资源将无法接收或处理 web 请求。
+ **Count 是非终止操作**：当具有 Count 操作的规则与请求匹配时， AWS WAF 会对请求进行计数，然后继续处理保护包（web ACL）规则集中的后续规则。
+ **CAPTCHA并且Challenge可以是非终止或终止操作** — 当具有其中一个操作的规则与请求匹配时， AWS WAF 会检查其令牌状态。如果请求具有有效的令牌，则将匹配项 AWS WAF 视为Count匹配项，然后继续处理保护包 (Web ACL) 规则集中遵循的规则。如果请求没有有效的令牌，则 AWS WAF 终止评估并向客户端发送验证码拼图或静默的后台客户端会话挑战来解决。

如果规则评估未导致任何终止操作，则对请求 AWS WAF 应用保护包 (Web ACL) 默认操作。有关信息，请参阅[在中设置保护包 (Web ACL) 的默认操作 AWS WAF](web-acl-default-action.md)。

在保护包（web ACL）中，您可以覆盖规则组内规则的操作设置，也可以覆盖规则组返回的操作。有关信息，请参阅[覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。

**操作和优先级设置之间的交互**  
 AWS WAF 适用于 Web 请求的操作受保护包 (Web ACL) 中规则的数字优先级设置的影响。例如，假设保护包（web ACL）有一条规则具有 Allow 操作且数字优先级为 50，另一条规则具有 Count 操作且数字优先级为 100。 AWS WAF 按优先级顺序评估保护包（web ACL）中的规则，从最低设置开始，因此在评估计数规则之前，将先评估允许规则。同时匹配两个规则的 web 请求将首先匹配允许规则。因为Allow是终止操作， AWS WAF 将停止对这场比赛的评估，并且不会根据计数规则评估请求。
+ 如果您只想在计数规则指标中包含与允许规则不匹配的请求，则可以采用规则的优先级设置。
+ 另一方面，如果您想要计数规则中的计数指标，即使请求与允许规则匹配也是如此，则需要为计数规则指定比允许规则更低的数字优先级设置，以便首先运行计数规则。

有关优先级设置的更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

# 覆盖中的规则组操作 AWS WAF
<a name="web-acl-rule-group-override-options"></a>

本节介绍了如何覆盖规则组操作。

将规则组添加到保护包（web ACL）时，您可以覆盖它对匹配的 web 请求所执行的操作。覆盖保护包（web ACL）配置中规则组的操作不会改变规则组本身。它只会改变在保护包（Web ACL）上下文中 AWS WAF 使用规则组的方式。

## 规则组规则操作的覆盖
<a name="web-acl-rule-group-override-options-rules"></a>

您可以将规则组内规则的操作覆盖为任何有效的规则操作。执行此操作时，将完全按照配置规则的操作为覆盖设置处理匹配的请求。

**注意**  
规则操作可以是终止，也可以是非终止。终止操作会停止对请求的保护包（web ACL）评估，要么允许请求继续访问受保护的应用程序，要么将其阻止。

以下是规则操作选项：
+ **Allow**— AWS WAF 允许将请求转发到受保护的 AWS 资源进行处理和响应。这是终止操作。在您定义的规则中，您可以在请求中插入自定义标头，然后再将其转发到受保护的资源。
+ **Block**— AWS WAF 阻止请求。这是终止操作。默认情况下，您的受保护 AWS 资源以 HTTP `403 (Forbidden)` 状态代码进行响应。在您定义的规则中，您可以自定义响应。当 AWS WAF 阻止请求时，Block操作设置将决定受保护资源发送回客户端的响应。
+ **Count**— 对请求进行 AWS WAF 计数，但不确定是允许还是阻止请求。这是一个非终止操作。 AWS WAF 继续处理保护包（web ACL）中的其余规则。在您定义的规则中，您可以将自定义标头插入请求中，也可以添加其他规则可以匹配的标签。
+ **CAPTCHA并且 Challenge** — AWS WAF 使用 CAPTCHA 谜题和静默挑战来验证请求不是来自机器人，并 AWS WAF 使用代币来跟踪最近成功的客户响应。

  只有当浏览器访问 HTTPS 端点时，才能运行验证码拼图和静默质询。浏览器客户端必须在安全环境中运行才能获取令牌。
**注意**  
当您在其中一个规则中使用 CAPTCHA 或 Challenge 规则操作或在规则组中将其作为规则操作覆盖时，您需要支付额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

  这些规则操作可以是终止操作，也可以是非终止操作，具体取决于请求中令牌的状态：
  + **未过期的有效令牌不终止** — 如果根据配置的验证码或质疑免疫时间，令牌有效且未过期，则 AWS WAF 处理与操作类似的请求。Count AWS WAF 继续根据保护包 (Web ACL) 中的其余规则检查 Web 请求。与 Count 配置类似，在您定义的规则中，您可以选择使用自定义标头配置这些操作以插入到请求中，也可以添加其他规则可以匹配的标签。
  + **以对无效或过期令牌的请求被阻止而终止** — 如果令牌无效或指定的时间戳已过期，则 AWS WAF 终止对 Web 请求的检查并阻止请求，类似于操作。Block AWS WAF 然后使用自定义响应代码响应客户端。因为CAPTCHA，如果请求内容表明客户端浏览器可以处理它，则会在 JavaScript 插页式广告中 AWS WAF 发送一个验证码拼图，该拼图旨在区分人类客户端和机器人。对于Challenge操作， AWS WAF 会发送带有静默挑战的 JavaScript 插页式广告，该挑战旨在将普通浏览器与机器人运行的会话区分开来。

  有关更多信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。

有关如何使用此选项的信息，请参阅 [覆盖规则组的规则操作](web-acl-rule-group-settings.md#web-acl-rule-group-rule-action-override)。

### 将规则操作覆盖为 Count
<a name="web-acl-rule-group-override-to-count"></a>

规则操作覆盖的最常见使用案例是将部分或全部规则操作覆盖到 Count，以测试和监控规则组的行为，然后再将其投入生产。

您也可以使用它对生成误报的规则组进行故障排除。当规则组阻止了您不希望阻止的流量时，就会出现误报。如果您在规则组中发现某条规则将阻止您希望允许通过的请求，则您可以保留该规则的计数操作覆盖，使其无法对您的请求采取行动。

有关在测试中使用规则操作覆盖的更多信息，请参阅 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

### JSON 列表：`RuleActionOverrides` 取代 `ExcludedRules`
<a name="web-acl-rule-group-override-replaces-exclude"></a>

如果您在 2022 年 10 月 27 日之前Count在保护包 (Web ACL) 配置中将规则组规则操作设置为，请 AWS WAF 将保护包 (Web ACL) JSON 中的替换内容保存为`ExcludedRules`。现在，用于将规则替换为 Count 的 JSON 设置位于 `RuleActionOverrides` 设置中。

我们建议您将您的 JSON 列表中的所有 `ExcludedRules` 设置更新为 `RuleActionOverrides` 设置，并将操作设置为 Count。API 接受任一设置，但如果您只使用新 `RuleActionOverrides` 设置，则您的控制台工作和 API 工作之间的 JSON 列表都将保持一致。

**注意**  
在 AWS WAF 控制台中，保护包 (Web ACL) “**采样请求**” 选项卡不显示使用旧设置的规则的示例。有关更多信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

当您使用 AWS WAF 控制台编辑现有规则组设置时，控制台会自动将 JSON 中的任何`ExcludedRules``RuleActionOverrides`设置转换为设置，覆盖操作设置为Count。
+ 当前设置示例：

  ```
         "ManagedRuleGroupStatement": {
            "VendorName": "AWS",
            "Name": "AWSManagedRulesAdminProtectionRuleSet",
            "RuleActionOverrides": [
              {
                "Name": "AdminProtection_URIPATH",
                "ActionToUse": {
                  "Count": {}
                }
              }
            ]
  ```
+ 旧设置示例：

  ```
  OLD SETTING
         "ManagedRuleGroupStatement": {
            "VendorName": "AWS",
            "Name": "AWSManagedRulesAdminProtectionRuleSet",
            "ExcludedRules": [
              {
                "Name": "AdminProtection_URIPATH"
              }
            ]
  OLD SETTING
  ```

## 规则组返回操作覆盖为 Count
<a name="web-acl-rule-group-override-options-rule-group"></a>

您可以覆盖规则组返回的操作，将其设置为 Count。

**注意**  
这不是测试规则组中规则的好选择，因为它不会改变 AWS WAF 评估规则组本身的方式。它仅影响如何 AWS WAF 处理从规则组评估返回到保护包 (Web ACL) 的结果。如果要测试规则组中的规则，请使用上一节中描述的方式 [规则组规则操作的覆盖](#web-acl-rule-group-override-options-rules)。

当您将规则组操作改写为时Count，将正常 AWS WAF 处理规则组评估。

如果规则组中没有匹配的规则，或者所有匹配的规则都有 Count 操作，则此覆盖对规则组或保护包（web ACL）的处理没有影响。

规则组中第一个与 Web 请求匹配且具有终止规则操作的规则会导致 AWS WAF 停止评估该规则组，并将终止操作结果返回到保护包 (Web ACL) 评估级别。此时，在保护包 (Web ACL) 评估中，此替代生效。 AWS WAF 覆盖终止操作，因此规则组评估的结果只是一个Count操作。 AWS WAF 然后继续处理保护包 (Web ACL) 中的其余规则。

有关如何使用此选项的信息，请参阅 [将规则组的评估结果覆盖为 Count](web-acl-rule-group-settings.md#web-acl-rule-group-action-override)。

# 在中设置保护包 (Web ACL) 的默认操作 AWS WAF
<a name="web-acl-default-action"></a>

本节介绍保护包（web ACL）默认操作的工作方式。

当您创建和配置保护包（web ACL）时，必须设置保护包（web ACL）的默认操作。 AWS WAF 将此操作应用于通过所有保护包（web ACL）规则评估但未应用终止操作的任何 web 请求。终止操作会停止对请求的保护包（web ACL）评估，要么允许请求继续访问受保护的应用程序，要么将其阻止。有关规则操作的信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

保护包（web ACL）默认操作必须确定 web 请求的最终处置，因此这是一个终止操作：
+ **Allow**：如果要允许大多数用户访问您的网站，但是阻止其请求源自指定 IP 地址或其请求表现为包含恶意 SQL 代码或指定值的攻击者进行访问，请选择 Allow 作为默认操作。然后，向保护包（web ACL）添加规则时，请添加标识并阻止要阻止的特定请求的规则。在此操作中，您可以在请求中插入自定义标头，然后再将其转发到受保护的资源。
+ **Block**：如果要阻止大多数准用户访问您的网站，但是允许其请求源自指定 IP 地址或其请求包含指定值的用户进行访问，请选择 Block 作为默认操作。然后，向保护包（web ACL）添加规则时，请添加标识并允许要允许的特定请求的规则。默认情况下，对于Block操作， AWS 资源以 HTTP `403 (Forbidden)` 状态代码进行响应，但您可以自定义响应。

有关自定义请求和响应的信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

您自己的规则和规则组的配置部分取决于您是允许还是阻止大多数 web 请求。例如，如果您希望*允许*大多数请求，应将保护包（web ACL）默认操作设置为 Allow，然后添加标识要*阻止*的 web 请求的规则，例如：
+ 源自进行数量不合理的请求的 IP 地址的请求
+ 源自您不在其中开展业务或是频繁攻击源的国家/地区的请求
+ 在 `User-agent` 标头中包含伪造值的请求
+ 表现为包含恶意 SQL 代码的请求

托管规则组规则通常使用 Block 操作，但并非所有规则都使用该操作。例如，某些用于机器人控制功能的规则使用 CAPTCHA 和 Challenge 操作设置。有关托管规则组的信息，请参阅 [在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)。

# 管理人体检查的注意事项 AWS WAF
<a name="web-acl-setting-body-inspection-limit"></a>

车身检查大小限制是 AWS WAF 可以检查的最大请求主体尺寸。当 Web 请求正文大于限制时，底层主机服务仅将限制范围内的内容转发给以 AWS WAF 供检查。
+ 对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB（8,192 字节）。
+ 对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB（16,384 字节），您可以将任何资源类型的限制以 16 KB 为增量增加，最多 64 KB。设置选项为 16 KB、32 KB、48 KB 和 64 KB。

**重要**  
AWS WAF 不支持 gRPC 流量的请求机构检查规则。如果您在 CloudFront 分发版或 Application Load Balancer 的保护包（Web ACL）上启用了这些规则，则任何使用 gRPC 的请求都将忽略请求正文检查规则。所有其他 AWS WAF 规则仍将适用。有关更多信息，请参阅 *Amazon CloudFront 开发者指南*中的[AWS WAF 为分配启用](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/WAF-one-click.html)。

**超大正文处理**  
如果您的 web 流量中包含的正文大于该限制，则您配置的超大处理都将适用。有关超大处理的选项的信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

**提高限制设置的定价注意事项**  
AWS WAF 对检查处于资源类型默认限制范围内的流量收取基本费率。

对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access 资源，如果您提高限制设置，则 AWS WAF 可以检查的流量将包括身体大小不超过您的新限制。只有检查正文大小大于默认 16 KB 的请求时，您才需要额外付费。有关定价的更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**修改正文检查大小限制的选项**  
您可以为 API Gateway CloudFront、Amazon Cognito、App Runner 或已验证访问资源配置身体检查大小限制。

在创建或编辑保护包（web ACL）时，可以在资源关联配置中修改正文检查大小限制。有关 API，请参阅保护包 (Web ACL) 的关联配置，网址为[AssociationConfig](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociationConfig.html)。对于控制台，配置参见位于您指定保护包（web ACL）关联资源的页面上。有关控制台配置的指导，请参阅 [在中查看 Web 流量指标 AWS WAF](web-acl-working-with.md)。

# 在中配置验证码、挑战和令牌 AWS WAF
<a name="web-acl-captcha-challenge-token-domains"></a>

您可以在保护包 (Web ACL) 中为使用CAPTCHA或规则操作的Challenge规则以及管理 AWS WAF 托管保护的静默客户端质询 SDKs 的应用程序集成配置选项。

这些功能通过验证码拼图对最终用户进行质询，以及为客户端会话提供静默质询，从而减少机器人活动。当客户端成功响应时， AWS WAF 会提供一个令牌供其在 web 请求中使用，并以上次成功的拼图和质询回复加时间戳。有关更多信息，请参阅 [中的智能威胁缓解 AWS WAF](waf-managed-protections.md)。

在保护包 (Web ACL) 配置中，您可以配置如何 AWS WAF 管理这些令牌：
+ **验证码和质询免疫时间**：它们指定了验证码或质询时间戳的有效期。保护包 (Web ACL) 设置由所有未配置自己的免疫时间设置的规则继承，也由应用程序集成继承 SDKs。有关更多信息，请参阅 [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。
+ **令牌域**-默认情况下，仅 AWS WAF 接受与保护包（Web ACL）关联的资源域的令牌。如果您配置了令牌域列表，则 AWS WAF 接受列表中所有域的令牌以及关联资源的域的令牌。有关更多信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。

# 在中查看 Web 流量指标 AWS WAF
<a name="web-acl-working-with"></a>

本节介绍了如何访问 web 流量指标摘要。

对于您正在使用的任何保护包（Web ACL），您可以在 AWS WAF 控制台的保护包（Web ACL）页面的流量**概述选项卡下访问网络流量**指标摘要。控制台控制面板提供了在评估您的应用程序网络流量时 AWS WAF 收集的 Amazon CloudWatch 指标的近乎实时的摘要。有关控制面板的更多信息，请参阅 [保护包的流量概述仪表板 (Web ACLs)](web-acl-dashboards.md)。有关监控保护包（web ACL）流量的更多信息，请参阅 [监控和调整您的 AWS WAF 保护措施](web-acl-testing-activities.md)。

# 删除保护包（web ACL）
<a name="web-acl-deleting"></a>

本节提供通过 AWS 控制台删除保护包 (Web ACLs) 的过程。

**重要**  
删除保护包 (Web ACL) 是永久性的，无法撤消。

要删除保护包 (Web ACL)，首先要取消所有 AWS 资源与保护包 (Web ACL) 的关联。请执行以下过程。

------
#### [ Using the new console ]

1. 登录新版 AWS 管理控制台 并通过 [https://console.aws.amazon.com/waf](https://console.aws.amazon.com/wafv2-pro) v2-pro 打开 AWS WAF 控制台。

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

1. 在保护包（web ACL）卡中，选择**资源**旁边的**编辑**链接，以打开**管理资源**面板。

1. 在规则组的**管理资源**部分，选择要取消关联的资源，然后选择**取消关联**。
**注意**  
一次必须取消关联一个资源。请勿选择多个资源。

1. 在确认页面中，键入“取消关联”，然后选择**取消关联**。重复此操作，取消保护包（web ACL）中每个资源的关联。

1. 选择要删除的保护包（web ACL）。控制台使主保护包（web ACL）卡可编辑，还会打开可在其中编辑详细信息的侧面板。

1. 在详细信息面板中，选择垃圾桶图标。

1. 在确认页面中，键入“删除”，然后选择**删除**。

------
#### [ Using the standard console ]

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 的描述，您可以在其中对其进行编辑。
**注意**  
如果您没有看到要删除的 Web ACL，请确保网页 ACLs 部分中的区域选择正确无误。任何保护 Amazon CloudFront 分销的网站 ACLs 都在**全球 (CloudFront)** 中。

1. 在**关联 AWS 资源**选项卡上，对于每个关联的资源，选择资源名称旁边的单选按钮，然后选择**取消关联**。这将解除保护包 (Web ACL) 与您的 AWS 资源的关联。

1. 在导航窗格中，选择 **Web ACLs**。

1. 选择要删除的 web ACL 旁边的单选按钮，然后选择 **删除**。

------

# AWS WAF 规则
<a name="waf-rules"></a>

本节解释了什么是 AWS WAF 规则及其工作原理。

 AWS WAF 规则定义了如何检查 HTTP (S) Web 请求以及当请求符合检查标准时要采取的操作。规则只能在规则组或保护包（web ACL）的上下文中进行定义。

规则本身并不存在。 AWS WAF 它们不是 AWS 资源，也没有 Amazon 资源名称 (ARNs)。您可以在规则组或定义规则的保护包（web ACL）中按名称访问规则。您可以使用包含规则的规则组或保护包 (Web ACL ACLs) 的 JSON 视图来管理规则并将其复制到其他保护包 (Web ACL)。您也可以通过 AWS WAF 控制台规则生成器对其进行管理，该生成器可用于保护包 (Web ACLs) 和规则组。

**规则名称**  
每条规则都需要一个名称。避免使用以 `AWS` 开头的名称和用于其他服务为您管理的规则组或规则的名称。请参阅[识别其他服务提供的规则组](waf-service-owned-rule-groups.md)。

**注意**  
如果您更改了规则的名称，并且希望该规则的指标名称反映更改，则还必须更新该指标名称。 AWS WAF 当您更改规则名称时，不会自动更新规则的指标名称。在控制台中编辑规则时，您可以使用规则 JSON 编辑器更改指标名称。您还可以通过 APIs 和更改用于定义保护包 (Web ACL) 或规则组的任何 JSON 列表中的名称。

**规则语句**  
每条规则还需要一个规则语句，用于定义规则如何检查 web 请求。规则语句可能包含任何深度的其他嵌套语句，具体取决于规则和语句类型。一些规则语句采用一组条件。例如，您可以在 IP 条件中指定最多 1 万个 IP 地址或 IP 地址范围。

您可以定义用于检查条件的规则，如下所示：
+ 可能是恶意的脚本。攻击者会嵌入可以利用 web 应用程序漏洞的脚本。这称为跨站脚本攻击（XSS）。
+ 请求源自的 IP 地址或地址范围。
+ 请求源自的国家/地区或地理位置。
+ 请求的指定部分的长度（如查询字符串）。
+ 可能是恶意的 SQL 代码。攻击者会尝试通过在 web 请求中嵌入恶意 SQL 代码从数据库提取数据。这称为 SQL 注入。
+ 请求中出现的字符串，例如，在 `User-Agent` 标头中出现的值或是在查询字符串中出现的文本字符串。您还可以使用正则表达式（regex）指定这些字符串。
+ 保护包（web ACL）中先前的规则添加了到请求中的标签。

除了具有 Web 请求检查标准的语句（如前面的列表中的语句）之外，还 AWS WAF 支持`AND``OR`、和的逻辑语句`NOT`，用于合并规则中的语句。

例如，根据您最近发现的攻击者请求，您可以创建一条规则，其逻辑 `AND` 语句由以下嵌套语句组合而成：
+ 请求来自 192.0.2.44。
+ 请求在 `User-Agent` 标头中包含值 `BadBot`。
+ 请求表现为在查询字符串中包含类似 SQL 的代码。

在这种情况下，web 请求需要匹配所有语句才能匹配顶级 `AND`。

**Topics**
+ [在中使用规则操作 AWS WAF](waf-rule-action.md)
+ [在中使用规则语句 AWS WAF](waf-rule-statements.md)
+ [在中使用匹配规则语句 AWS WAF](waf-rule-statements-match.md)
+ [在中使用逻辑规则语句 AWS WAF](waf-rule-statements-logical.md)
+ [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)
+ [在中使用规则组规则语句 AWS WAF](waf-rule-statements-rule-group.md)

# 在中使用规则操作 AWS WAF
<a name="waf-rule-action"></a>

本节介绍了规则操作的工作方式。

当网络请求符合规则中定义的条件时，规则操作会告诉 AWS WAF 您如何处理该请求。您可以选择为每个规则操作添加自定义行为。

**注意**  
规则操作可以是终止，也可以是非终止。终止操作会停止对请求的保护包（web ACL）评估，要么允许请求继续访问受保护的应用程序，要么将其阻止。

以下是规则操作选项：
+ **Allow**— AWS WAF 允许将请求转发到受保护的 AWS 资源进行处理和响应。这是终止操作。在您定义的规则中，您可以在请求中插入自定义标头，然后再将其转发到受保护的资源。
+ **Block**— AWS WAF 阻止请求。这是终止操作。默认情况下，您的受保护 AWS 资源以 HTTP `403 (Forbidden)` 状态代码进行响应。在您定义的规则中，您可以自定义响应。当 AWS WAF 阻止请求时，Block操作设置将决定受保护的资源发送回客户端的响应。
+ **Count**— 对请求进行 AWS WAF 计数，但不确定是允许还是阻止请求。这是一个非终止操作。 AWS WAF 继续处理保护包（web ACL）中的其余规则。在您定义的规则中，您可以将自定义标头插入请求中，也可以添加其他规则可以匹配的标签。
+ **CAPTCHA并且 Challenge** — AWS WAF 使用 CAPTCHA 谜题和静默挑战来验证请求不是来自机器人，并 AWS WAF 使用代币来跟踪最近成功的客户响应。

  只有当浏览器访问 HTTPS 端点时，才能运行验证码拼图和静默质询。浏览器客户端必须在安全环境中运行才能获取令牌。
**注意**  
当您在其中一个规则中使用 CAPTCHA 或 Challenge 规则操作或在规则组中将其作为规则操作覆盖时，您需要支付额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

  这些规则操作可以是终止操作，也可以是非终止操作，具体取决于请求中令牌的状态：
  + **未过期的有效令牌不终止** — 如果根据配置的验证码或质疑免疫时间，令牌有效且未过期，则 AWS WAF 处理与操作类似的请求。Count AWS WAF 继续根据保护包 (Web ACL) 中的其余规则检查 Web 请求。与 Count 配置类似，在您定义的规则中，您可以选择使用自定义标头配置这些操作以插入到请求中，也可以添加其他规则可以匹配的标签。
  + **以对无效或过期令牌的请求被阻止而终止** — 如果令牌无效或指定的时间戳已过期，则 AWS WAF 终止对 Web 请求的检查并阻止请求，类似于操作。Block AWS WAF 然后使用自定义响应代码响应客户端。因为CAPTCHA，如果请求内容表明客户端浏览器可以处理它，则会在 JavaScript 插页式广告中 AWS WAF 发送一个验证码拼图，该拼图旨在区分人类客户端和机器人。对于Challenge操作， AWS WAF 会发送带有静默挑战的 JavaScript 插页式广告，该挑战旨在将普通浏览器与机器人运行的会话区分开来。

  有关更多信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。

有关自定义请求和响应的信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

有关为匹配请求添加标签的信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

有关保护包（web ACL）和规则设置如何交互的信息，请参阅 [使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)。

# 在中使用规则语句 AWS WAF
<a name="waf-rule-statements"></a>

本节介绍了规则语句的工作方式。

规则语句是告诉 AWS WAF 如何检查 Web 请求的规则的一部分。当在 Web 请求中 AWS WAF 找到检查标准时，我们会说 Web 请求与声明相符。每个规则语句都根据语句类型指定要查找的内容和方式。

中的每条规则都 AWS WAF 有一个顶级规则语句，该语句可以包含其他语句。规则语句可能非常简单。例如，您可以在保护包（web ACL）中设置一个规则语句，提供一组来源国来检查 web 请求，也可以在保护包（web ACL）中设置一个规则语句，只引用一个规则组。规则语句也可能非常复杂。例如，您可以编写一个使用逻辑 AND、OR 和 NOT 语句组合多个其他语句的语句。

对于大多数规则，您可以为匹配的请求添加自定义 AWS WAF 标签。 AWS 托管规则组中的规则为匹配的请求添加标签。规则添加的标签提供有关规则请求的信息，这些规则将在稍后在保护包 (Web ACL) 以及 AWS WAF 日志和指标中进行评估。有关标签的信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md) 和 [标签匹配规则语句](waf-rule-statement-type-label-match.md)。

**嵌套规则语句**  
AWS WAF 支持嵌套许多规则语句，但不支持所有规则语句嵌套。例如，您不能将规则组语句嵌套到其他语句中。某些场景需要使用嵌套，例如范围缩小语句和逻辑语句。下面的规则语句列表和规则详细信息描述了每个类别和规则的嵌套功能和要求。

控制台中规则的可视化编辑器仅支持规则语句的嵌套级别。例如，可以在具有逻辑性的 AND 或 OR 规则中嵌套多种类型的语句，但不能嵌套其他 AND 或 OR 规则，因为这需要第二层嵌套。要实现多级嵌套，请通过控制台中的 JSON 规则编辑器或通过 JSON 提供规则定义。APIs

**Topics**
+ [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)
+ [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)
+ [在中引用可重复使用的实体 AWS WAF](waf-rule-statement-reusable-entities.md)

# 在中调整规则语句设置 AWS WAF
<a name="waf-rule-statement-fields"></a>

本节介绍您可为检查 Web 请求组件的规则语句指定哪些设置。有关用法的信息，请参阅 [在中使用匹配规则语句 AWS WAF](waf-rule-statements-match.md) 中的各个规则语句。

这些 Web 请求组件的子集也可以在基于速率的规则中用作自定义请求聚合键。有关信息，请参阅[在中汇总基于费率的规则 AWS WAF](waf-rule-statement-type-rate-based-aggregation-options.md)。

对于请求组件设置，您可以指定组件类型本身以及其他选项，具体取决于组件类型。例如，当检查含有文本的组件类型时，可以在检查之前对其应用文本转换。

**注意**  
除非另有说明，否则，如果 Web 请求没有规则语句中指定的请求组件，则 AWS WAF 会将该请求评估为与规则条件不匹配。

**Contents**
+ [在中请求组件 AWS WAF](waf-rule-statement-fields-list.md)
  + [HTTP method](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-http-method)
  + [单个标头](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-header)
  + [所有标头](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-headers)
  + [标头顺序](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-header-order)
  + [Cookie](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-cookies)
  + [URI 片段](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-fragment)
  + [URI 路径](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-path)
  + [JA3 指纹](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja3-fingerprint)
  + [JA4 指纹](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja4-fingerprint)
  + [查询字符串](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-query-string)
  + [Single query parameter (单个查询参数)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-query-param)
  + [All query parameters (所有查询参数)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-all-query-params)
  + [Body](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-body)
  + [JSON 正文](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-json-body)
+ [在中使用转发的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)
+ [正在检查 HTTP/2 中的伪标头 AWS WAF](waf-rule-statement-request-components-for-http2-pseudo-headers.md)
+ [在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)

# 在中请求组件 AWS WAF
<a name="waf-rule-statement-fields-list"></a>

本部分将介绍您可以指定检查 web 请求的哪些组件。您可以为在 web 请求中查找模式的匹配规则语句指定请求组件。其中包括字符串匹配、正则表达式模式匹配、SQL 注入攻击和大小约束语句。有关如何使用这些请求组件设置的信息，请访问 [在中使用匹配规则语句 AWS WAF](waf-rule-statements-match.md)，参阅各个规则语句。

除非另有说明，否则，如果 Web 请求没有规则语句中指定的请求组件，则 AWS WAF 会将该请求评估为与规则条件不匹配。

**注意**  
您可以为每个需要它的规则语句指定一个请求组件。要检查请求的多个组件，请为每个组件创建一条规则语句。

 AWS WAF 控制台和 API 文档为以下位置的请求组件设置提供了指导：
+ 控制台上的**规则生成器**：在常规规则类型的**语句**设置中，在**请求组件**下的**检查**对话框中选择要检查的组件。
+ **API 语句内容**：`FieldToMatch`

本节的其余部分将介绍 web 请求检查部分的选项。

**Topics**
+ [HTTP method](#waf-rule-statement-request-component-http-method)
+ [单个标头](#waf-rule-statement-request-component-single-header)
+ [所有标头](#waf-rule-statement-request-component-headers)
+ [标头顺序](#waf-rule-statement-request-component-header-order)
+ [Cookie](#waf-rule-statement-request-component-cookies)
+ [URI 片段](#waf-rule-statement-request-component-uri-fragment)
+ [URI 路径](#waf-rule-statement-request-component-uri-path)
+ [JA3 指纹](#waf-rule-statement-request-component-ja3-fingerprint)
+ [JA4 指纹](#waf-rule-statement-request-component-ja4-fingerprint)
+ [查询字符串](#waf-rule-statement-request-component-query-string)
+ [Single query parameter (单个查询参数)](#waf-rule-statement-request-component-single-query-param)
+ [All query parameters (所有查询参数)](#waf-rule-statement-request-component-all-query-params)
+ [Body](#waf-rule-statement-request-component-body)
+ [JSON 正文](#waf-rule-statement-request-component-json-body)

## HTTP method
<a name="waf-rule-statement-request-component-http-method"></a>

检查请求中的 HTTP 方法。HTTP 方法指示 web 请求要求受保护的资源执行的操作的类型，如 `POST` 或 `GET`。

## 单个标头
<a name="waf-rule-statement-request-component-single-header"></a>

检查请求中的单个命名标头。

对于此选项，您可以指定标头名称，例如 `User-Agent` 或 `Referer`。名称的字符串匹配不区分大小写，是在删除请求标头和规则中的前导和尾随空格之后执行的。

## 所有标头
<a name="waf-rule-statement-request-component-headers"></a>

检查所有请求标头，包括 Cookie。您可以应用筛选器来检查所有标头的子集。

对于此选项，您需要提供以下规范：
+ **匹配模式**-用于获取标题子集以供检查的过滤器。 AWS WAF 在标题键中查找这些模式。

  匹配模式设置可采用以下的一种设置：
  + **全部**：匹配所有键。评估所有标头的规则检查条件。
  + **排除标头**：仅检查其键与此处指定的任何字符串都不匹配的标头。键的字符串匹配不区分大小写。匹配是在从请求标头和匹配规则中删除前导和尾随空格后执行的。
  + **包含标头**：仅检查键与此处指定的字符串之一匹配的标头。键的字符串匹配不区分大小写。匹配是在从请求标头和匹配规则中删除前导和尾随空格后执行的。
+ **匹配范围**-标题中 AWS WAF 应根据规则检查标准进行检查的部分。您可以指定**键**、**值**或**全部**来检查键和值是否匹配。

  **全部**不需要在键中找到匹配项，也无需在值中找到匹配项。它需要在键或值中找到匹配项，或者两者兼有。如需要求在键和值中进行匹配，请使用逻辑 `AND` 语句组合两个匹配规则，一个检查键，另一个检查值。
+ **超大处理** — AWS WAF 应如何处理标头数据大于 AWS WAF 可以检查的请求。 AWS WAF 最多可以检查请求标头的前 8 KB（8,192 字节），最多可以检查前 200 个标头。在达到第一个限制之前 AWS WAF ，内容可供检查。您可以选择继续检查，也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

## 标头顺序
<a name="waf-rule-statement-request-component-header-order"></a>

检查包含请求标头名称列表的字符串，这些标头名称按 AWS WAF 收到供检查的 Web 请求中显示的顺序排列。 AWS WAF 生成字符串，然后将其用作字段来匹配检查中的组件。 AWS WAF 例如，用冒号分隔字符串中的标题名称，不添加空格。`host:user-agent:accept:authorization:referer`

对于此选项，您需要提供以下规范：
+ **超大处理** — AWS WAF 应如何处理标头数据数量大于或大于 AWS WAF 可以检查的请求。 AWS WAF 最多可以检查请求标头的前 8 KB（8,192 字节），最多可以检查前 200 个标头。在达到第一个限制之前 AWS WAF ，内容可供检查。您可以选择继续检查可用标头，也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

## Cookie
<a name="waf-rule-statement-request-component-cookies"></a>

检查所有请求 Cookie。您可以应用筛选器来检查所有 Cookie 的子集。

对于此选项，您需要提供以下规范：
+ **匹配模式** – 用于获取 Cookie 子集以供检查的筛选器。 AWS WAF 在 Cookie 密钥中查找这些模式。

  匹配模式设置可采用以下的一种设置：
  + **全部**：匹配所有键。评估所有 Cookie 的规则检查条件。
  + **排除 Cookie** – 仅检查其键与此处指定的任何字符串都不匹配的 Cookie。键的字符串匹配不区分大小写且必须精确。
  + **包含 Cookie** – 仅检查键与此处指定的字符串之一匹配的 Cookie。键的字符串匹配不区分大小写且必须精确。
+ **匹配范围** — Cookie 中 AWS WAF 应根据规则检查标准进行检查的部分。您可以为键和值指定**键**、**值**或**全部**。

  **全部**不需要在键中找到匹配项，也无需在值中找到匹配项。它需要在键或值中找到匹配项，或者两者兼有。如需要求在键和值中进行匹配，请使用逻辑 `AND` 语句组合两个匹配规则，一个检查键，另一个检查值。
+ **超大处理** — AWS WAF 应如何处理 cookie 数据大于 AWS WAF 可以检查的请求。 AWS WAF 最多可以检查请求的 cookie 的前 8 KB（8,192 字节），最多可以检查前 200 个 cookie。在达到第一个限制之前 AWS WAF ，内容可供检查。您可以选择继续检查，也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

## URI 片段
<a name="waf-rule-statement-request-component-uri-fragment"></a>

**注意**  
Uri Fragment 检查仅适用于 CloudFront 发行版和应用程序负载均衡器。

检查 URL 中紧接“\$1”符号的部分，提供有关资源的其他信息，例如 \$1section2。有关信息，请参阅[统一资源标识符（URI）：一般语法](https://tools.ietf.org/html/rfc3986#section-3)。

如果您不使用带此选项的文本转换，则 AWS WAF 不会对 URI 片段进行标准化处理，并完全按照请求中从客户端收到的内容进行检查。有关文本转换的信息，请参阅 [在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

**规则语句要求**  
您必须为此规则语句提供回退行为。如果 URI 缺少片段或关联的服务不是 Application Load Balancer 或，则回退行为是您要 AWS WAF 分配给 Web 请求的匹配状态。 CloudFront如果您选择匹配，则 AWS WAF 会将请求视为匹配规则语句并将规则操作应用于该请求。如果您选择不匹配，则 AWS WAF 会将请求视为与规则语句不匹配。

## URI 路径
<a name="waf-rule-statement-request-component-uri-path"></a>

检查 URL 中标识资源的部分（例如 `/images/daily-ad.jpg`）。有关信息，请参阅[统一资源标识符 (URI)：一般语法](https://tools.ietf.org/html/rfc3986#section-3)。

如果您不使用带此选项的文本转换，则 AWS WAF 不会对 URI 进行标准化处理，并完全按照请求中从客户端收到的内容进行检查。有关文本转换的信息，请参阅 [在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

## JA3 指纹
<a name="waf-rule-statement-request-component-ja3-fingerprint"></a>

检查请求的 JA3 指纹。

**注意**  
JA3 指纹检查仅适用于 Amazon CloudFront 分配和应用程序负载均衡器。

指 JA3 纹是一个 32 个字符的哈希值，源自传入请求的 TLS 客户端 Hello。此指纹用作客户端 TLS 配置的唯一标识符。 AWS WAF 计算并记录每个具有足够的 TLS Client Hello 信息用于计算的请求的此指纹。几乎所有的 web 请求都包含此信息。

**如何获取客户的指 JA3 纹**  
您可以从保护包 (Web ACL) 日志中获取客户端请求的 JA3 指纹。 AWS WAF 如果能够计算出指纹，它就会将其包含在日志中。有关日志记录字段的信息，请参阅 [保护包（web ACL）流量的日志字段](logging-fields.md)。

**规则语句要求**  
您只能在设置为与您提供的字符串完全匹配的字符串匹配语句中检查 JA3 指纹。在您的字符串匹配语句规范中提供来自日志的 JA3 指纹字符串，以便与任何具有相同 TLS 配置的 future 请求相匹配。有关字符串匹配语句的信息，请参阅 [字符串匹配规则语句](waf-rule-statement-type-string-match.md)。

您必须为此规则语句提供回退行为。回退行为是指在无法计算 JA3 指纹 AWS WAF 时要分配给 Web 请求的匹配状态。 AWS WAF 如果您选择匹配， AWS WAF 会将 Web 请求视为与规则语句匹配，并将规则操作应用于请求。如果您选择不匹配，则 AWS WAF 会将请求视为与规则语句不匹配。

如需使用此匹配选项，必须记录您的保护包（web ACL）流量。有关信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

## JA4 指纹
<a name="waf-rule-statement-request-component-ja4-fingerprint"></a>

检查请求的 JA4 指纹。

**注意**  
JA4 指纹检查仅适用于 Amazon CloudFront 分配和应用程序负载均衡器。

指 JA4 纹是一个 36 个字符的哈希值，源自传入请求的 TLS 客户端 Hello。此指纹用作客户端 TLS 配置的唯一标识符。 JA4 指纹识别是 JA3 指纹识别的扩展，它可能会减少某些浏览器的唯一指纹。 AWS WAF 计算并记录每个具有足够的 TLS Client Hello 信息用于计算的请求的此指纹。几乎所有的 web 请求都包含此信息。

**如何获取客户的指 JA4 纹**  
您可以从保护包 (Web ACL) 日志中获取客户端请求的 JA4 指纹。 AWS WAF 如果能够计算出指纹，它就会将其包含在日志中。有关日志记录字段的信息，请参阅 [保护包（web ACL）流量的日志字段](logging-fields.md)。

**规则语句要求**  
您只能在设置为与您提供的字符串完全匹配的字符串匹配语句中检查 JA4 指纹。在您的字符串匹配语句规范中提供来自日志的 JA4 指纹字符串，以便与任何具有相同 TLS 配置的 future 请求相匹配。有关字符串匹配语句的信息，请参阅 [字符串匹配规则语句](waf-rule-statement-type-string-match.md)。

您必须为此规则语句提供回退行为。回退行为是指在无法计算 JA4 指纹 AWS WAF 时要分配给 Web 请求的匹配状态。 AWS WAF 如果您选择匹配， AWS WAF 会将 Web 请求视为与规则语句匹配，并将规则操作应用于请求。如果您选择不匹配，则 AWS WAF 会将请求视为与规则语句不匹配。

如需使用此匹配选项，必须记录您的保护包（web ACL）流量。有关信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

## 查询字符串
<a name="waf-rule-statement-request-component-query-string"></a>

检查 URL 中在 `?` 字符之后出现的部分（如果有）。

**注意**  
对于跨站点脚本匹配语句，我们建议您选择**所有查询参数**，而不是**查询字符串**。选择 “**所有查询参数**” WCUs 将基础成本增加 10。

## Single query parameter (单个查询参数)
<a name="waf-rule-statement-request-component-single-query-param"></a>

检查您定义为查询字符串一部分的单个查询参数。 AWS WAF 检查您指定的参数的值。

对于此选项，您还可以指定一个**查询参数**。例如，如果 URL 为 `www.xyz.com?UserName=abc&SalesRegion=seattle`，则可以为该查询参数指定 `UserName` 或 `SalesRegion`。参数名称的长度上限是 30 个字符。名称不区分大小写，因此如果您指定 `UserName` 作为名称， AWS WAF 匹配 `UserName` 的所有变体，包括 `username` 和 `UsERName`。

如果查询字符串包含您指定的查询参数的多个实例，则使用OR逻辑 AWS WAF 检查所有值是否存在匹配项。例如，在 URL `www.xyz.com?SalesRegion=boston&SalesRegion=seattle` 中， AWS WAF 根据 `boston` 和 `seattle` 评估您指定的名称。如果匹配其中任意一个，则检查匹配。

## All query parameters (所有查询参数)
<a name="waf-rule-statement-request-component-all-query-params"></a>

检查请求中的所有查询参数。这与单个查询参数组件选择类似，但 AWS WAF 会检查查询字符串中所有参数的值。例如，如果 URL 为 `www.xyz.com?UserName=abc&SalesRegion=seattle`，并且如果 `UserName` 或 `SalesRegion` 的值与检查条件匹配， AWS WAF 则会触发匹配。

选择此选项会 WCUs 使基本成本增加 10%。

## Body
<a name="waf-rule-statement-request-component-body"></a>

以纯文本形式检查请求正文。您也可以使用 JSON 内容类型将正文评估为 JSON。

请求正文紧跟在请求标头之后的请求部分。它包含 web 请求所需的任何其他数据，例如，表单中的数据。
+ 在控制台中，您可以在**请求选项**选择**正文**下选择此选项，方法是选择**内容类型**选择**纯文本**。
+ 在 API 中，您可以在规则的 `FieldToMatch` 规范中指定 `Body` 以纯文本形式检查请求正文。

对于 Applicati AWS AppSync on Load Balancer 和， AWS WAF 可以检查请求正文的前 8 KB。对于 CloudFront，默认情况下，API Gateway、Amazon Cognito、App Runner 和 Verified Access AWS WAF 可以检查前 16 KB，你可以在保护包（Web ACL）配置中将限制提高到 64 KB。有关更多信息，请参阅 [管理人体检查的注意事项 AWS WAF](web-acl-setting-body-inspection-limit.md)。

您必须为此组件类型指定超大尺寸处理。超大处理定义了如何 AWS WAF 处理主体数据大于 AWS WAF 可以检查的请求。您可以选择继续检查，也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

您也可以将正文评估为已解析的 JSON。有关信息，请参阅下面的部分。

## JSON 正文
<a name="waf-rule-statement-request-component-json-body"></a>

检查以 JSON 形式评估的请求正文。您还可以以纯文本形式评估正文。

请求正文紧跟在请求标头之后的请求部分。它包含 web 请求所需的任何其他数据，例如，表单中的数据。
+ 在控制台中，您可以在**请求选项**选择**正文**下选择此选项，方法是选择**内容类型**选择**JSON**。
+ 在 API 中，您可以在规则的 `FieldToMatch` 规范中指定 `JsonBody`。

对于 Applicati AWS AppSync on Load Balancer 和， AWS WAF 可以检查请求正文的前 8 KB。对于 CloudFront，默认情况下，API Gateway、Amazon Cognito、App Runner 和 Verified Access AWS WAF 可以检查前 16 KB，你可以在保护包（Web ACL）配置中将限制提高到 64 KB。有关更多信息，请参阅 [管理人体检查的注意事项 AWS WAF](web-acl-setting-body-inspection-limit.md)。

您必须为此组件类型指定超大尺寸处理。超大处理定义了如何 AWS WAF 处理主体数据大于 AWS WAF 可以检查的请求。您可以选择继续检查，也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

选择此选项会使匹配语句的基本成本加倍 WCUs。例如，如果在没有 JSON 解析 WCUs 的情况下，匹配语句的基本成本为 5，则使用 JSON 解析将成本加倍到 10。 WCUs

对于此选项，应提供其他规范，如以下部分所述。

**如何 AWS WAF 处理 JSON 正文检查**  
当以 JSON 形式 AWS WAF 检查 Web 请求正文时，它会执行解析正文并提取 JSON 元素以供检查的步骤。 AWS WAF 根据您的配置选择执行这些步骤。

以下列出了 AWS WAF 执行的步骤。

1. **解析正文内容** — AWS WAF 解析 Web 请求正文的内容以提取 JSON 元素进行检查。 AWS WAF 尽最大努力解析正文的全部内容，但是由于内容中的各种错误状态，解析可能会失败。错误示例包括无效字符、重复键、截断以及其根节点不是对象或数组的内容。

   选项 B **ody 解析后备行为**决定了如果 AWS WAF 无法完全解析 JSON 正文会怎么做：
   + **无（默认行为）**-仅在内容遇到解析错误之前对其进行 AWS WAF 评估。
   + **评估为字符串**-以纯文本形式检查正文。 AWS WAF 将您为 JSON 检查定义的文本转换和检查标准应用于正文文本字符串。
   + **匹配**-将 Web 请求视为与规则语句相匹配。 AWS WAF 将规则操作应用于请求。
   + **不匹配**：将 web 请求视为与规则语句不匹配。
**注意**  
只有在解析 JSON 字符串时 AWS WAF 遇到错误时，才会触发此回退行为。

**解析不能完全验证 JSON**  
AWS WAF 解析并不能完全验证输入的 JSON 字符串，因此即使对于无效的 JSON，解析也可能成功。

   例如， AWS WAF 解析以下无效 JSON 而不会出现错误：
   + 缺少逗号：`{"key1":"value1""key2":"value2"}`
   + 缺少冒号：`{"key1":"value1","key2""value2"}`
   + 额外的冒号：`{"key1"::"value1","key2""value2"}`

   对于诸如解析成功但结果不是完全有效的 JSON 之类的情况，评估中的后续步骤结果可能会有所不同。提取可能会遗漏某些元素，或者规则评估可能会产生意外结果。我们建议验证在应用程序中收到的 JSON，并根据需要处理无效的 JSON。

1. **提取 JSON 元素** — 根据您的设置 AWS WAF 识别要检查的 JSON 元素子集：
   + **JSON 匹配范围**选项指定了 JSON 中 AWS WAF 应检查的元素类型。

     您可以为键和值指定**键**、**值**或**全部**。

     **全部**不需要在键中找到匹配项，也无需在值中找到匹配项。它需要在键或值中找到匹配项，或者两者兼有。如需要求在键和值中进行匹配，请使用逻辑 `AND` 语句组合两个匹配规则，一个检查键，另一个检查值。
   + “**要检查的内容**” 选项指定如何筛选设置为 AWS WAF 要检查的子集的元素。

     您必须指定以下各项之一：
     + **完整 JSON 内容**：评估所有元素。
     + **仅包含的元素**：仅评估其路径与您提供的 JSON 指针条件相匹配的元素。不要使用此选项来指示 JSON 中的 *所有*路径。请改用**完整 JSON 内容**。

       有关 JSON 指针语法的信息，请参阅互联网工程任务组 (IETF) 文档[JavaScript 对象表示法 (JSON) 指针](https://tools.ietf.org/html/rfc6901)。

       例如，您可以在控制台中提供以下信息：

       ```
       /dogs/0/name
       /dogs/1/name
       ```

       在 API 或 CLI 中，您可以提供以下内容：

       ```
       "IncludedPaths": ["/dogs/0/name", "/dogs/1/name"]
       ```

   例如，假设**要检查的内容**设置为**仅限包含的元素**，“包含的元素”设置为 `/a/b`。

   对于以下示例 JSON 正文：

   ```
   { 
     "a":{
       "c":"d",
       "b":{
         "e":{
           "f":"g"
         }
       }
     }
   }
   ```

   下面列出了 AWS WAF 将检查每个 **JSON 匹配范围**设置的元素集。请注意，键 `b` 作为所包含的元素路径的一部分，不会进行评估。
   + **全部**：`e`、`f,` 和 `g`。
   + **键**：`e` 和 `f`。
   + **值**： `g`。

1. **检查 JSON 元素集** — AWS WAF 将您指定的任何文本转换应用于提取的 JSON 元素，然后将生成的元素集与规则语句的匹配条件进行匹配。这与其他 web 请求组件的转换和评估行为相同。如果有任何提取的元素匹配，则 web 请求与该规则匹配。

# 在中使用转发的 IP 地址 AWS WAF
<a name="waf-rule-statement-forwarded-ip-address"></a>

本节适用于使用 web 请求的 IP 地址的规则语句。默认情况下， AWS WAF 使用来自 Web 请求来源的 IP 地址。但是，如果 web 请求通过一个或多个代理或负载均衡器，则 web 请求源将包含最后一个代理的地址，而不是客户端的源地址。在这种情况下，原始客户端地址通常在另一个 HTTP 标头中转发。此标头通常是 `X-Forwarded-For` (XFF)，但也可以是其他标头。

**使用 IP 地址的规则语句**  
使用 IP 地址的规则语句如下：
+ [IP 集匹配](waf-rule-statement-type-ipset-match.md)：检查 IP 地址是否与 IP 集中定义的地址相匹配。
+ [地理匹配](waf-rule-statement-type-geo-match.md) – 使用 IP 地址确定来源国和地区，并将来源国与国家列表进行匹配。
+ [ASN 匹配](waf-rule-statement-type-asn-match.md)-使用 IP 地址确定自治系统编号 (ASN)，并将 ASN 与列表进行匹配。 ASNs
+ [使用基于速率的规则语句](waf-rule-statement-type-rate-based.md)：可以按其 IP 地址聚合请求，以确保没有单个 IP 地址以过高速率发送请求。您可以单独使用 IP 地址聚合，也可以与其他聚合键结合使用。

您可以指示使用来自`X-Forwarded-For`标头或 AWS WAF 其他 HTTP 标头的转发 IP 地址来处理这些规则语句中的任何一个，而不是使用 Web 请求的来源。有关如何提供规范的详细信息，请参阅各个规则语句类型的指南。

**注意**  
如果缺少标头，则将使用该标头的任何语句 AWS WAF 评估为 “不匹配”。如果您使用结果为 “不匹配” 的 NOT 语句，则会将计算结果 AWS WAF 转换为 “匹配”。缺少标头不会触发回退行为，只有无效的标头值才会触发回退行为。

**回退行为**  
使用转发的 IP 地址时，如果请求的指定位置没有有效的 IP 地址，则需要指明 AWS WAF 要分配给 Web 请求的匹配状态：
+ **MATCH**-将 Web 请求视为与规则语句相匹配。 AWS WAF 将规则操作应用于请求。
+ **不匹配**：将 web 请求视为与规则语句不匹配。

**AWS WAF 机器人控制中使用的 IP 地址**  
Bot Control 托管规则组使用来自 AWS WAF的 IP 地址验证机器人。如果您使用机器人控制功能，并且已经验证了通过代理或负载均衡器进行路由的机器人，则需要使用自定义规则明确允许它们。例如，您可以配置自定义 IP 集匹配规则，该规则使用转发 IP 地址来检测和允许已验证机器人。您可以使用该规则通过多种方式自定义机器人管理。有关信息以及示例，请参阅 [AWS WAF 机器人控制](waf-bot-control.md)。

**使用转发 IP 地址的一般注意事项**  
在使用转发 IP 地址之前，请注意以下一般注意事项：
+ 在此过程中，代理可以修改标头，并代理可能会以不同的方式处理标头。
+ 攻击者可能会更改标头的内容以试图绕过 AWS WAF 检查。
+ 标头内的 IP 地址可能格式错误或无效。
+ 请求中可能根本不存在您指定的标头。

**使用转发的 IP 地址的注意事项 AWS WAF**  
以下列表描述了在中使用转发的 IP 地址的要求和注意事项： AWS WAF
+ 对于任何一条规则，您可以为转发 IP 地址指定一个标头。标头规范不区分大小写。
+ 对于基于速率的规则语句，任何嵌套的范围界定语句都不会继承转发的 IP 配置。为每条使用转发 IP 地址的语句指定配置。
+ 对于地理匹配、ASN 匹配和基于费率的规则， AWS WAF 使用标题中的第一个地址。例如，如果标题包含 us `10.1.1.1, 127.0.0.0, 10.10.10.10` AWS WAF es `10.1.1.1`
+ 对于 IP 集匹配，您可以指明是与标头中的第一个地址、最后一个地址还是任何地址进行匹配。如果指定，则 AWS WAF 检查标头中的所有地址是否匹配，最多 10 个地址。如果标头包含超过 10 个地址，则 AWS WAF 检查最后 10 个地址。
+ 包含多个地址的标头必须在地址之间使用逗号分隔符。如果请求使用逗号以外的分隔符，则 AWS WAF 会认为标头中的 IP 地址格式不正确。
+ 如果标头内的 IP 地址格式错误或无效，则 AWS WAF 根据您在转发的 IP 配置中指定的回退行为，将 web 请求指定为与规则匹配或不匹配。
+ 如果您指定的标头不存在于请求中，则 AWS WAF 根本不会将该规则应用于请求。这意味着 AWS WAF 它不应用规则操作，也不应用回退行为。
+ 使用转发 IP 标头作为 IP 地址的规则语句不会使用 web 请求来源报告的 IP 地址。

**使用转发的 IP 地址的最佳实践 AWS WAF**  
使用转发 IP 地址时，请使用以下最佳实践：
+ 在启用转发 IP 配置之前，请仔细考虑请求标头的所有可能状态。您可能需要使用多个规则来获得您想要的行为。
+ 要检查多个转发 IP 标头或检查 web 请求来源和转发 IP 标头，请对每个 IP 地址源使用一条规则。
+ 要阻止标头无效的 web 请求，请将规则操作设置为阻止，并将转发 IP 配置的回退行为设置为匹配。

**转发 IP 地址的 JSON 示例**  
只有当 `X-Forwarded-For` 标头包含来源国为 `US` 的 IP 时，以下地理匹配语句才会匹配：

```
{
  "Name": "XFFTestGeo",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "XFFTestGeo"
  },
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ],
      "ForwardedIPConfig": {
        "HeaderName": "x-forwarded-for",
        "FallbackBehavior": "MATCH"
      }
    }
  }
}
```

以下基于速率的规则根据 `X-Forwarded-For` 标头中的第一个 IP 来聚合请求。该规则仅计算与嵌套地理匹配语句匹配的请求，并且仅阻止与地理匹配语句匹配的请求。嵌套的地理匹配语句还使用 `X-Forwarded-For` 标头来确定 IP 地址是否表示 `US` 来源国。如果是，或者标头存在但格式不正确，则地理匹配语句将返回匹配项。

```
{
  "Name": "XFFTestRateGeo",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "XFFTestRateGeo"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": "100",
      "AggregateKeyType": "FORWARDED_IP",
      "ScopeDownStatement": {
        "GeoMatchStatement": {
          "CountryCodes": [
            "US"
          ],
          "ForwardedIPConfig": {
            "HeaderName": "x-forwarded-for",
            "FallbackBehavior": "MATCH"
          }
        }
      },
      "ForwardedIPConfig": {
        "HeaderName": "x-forwarded-for",
        "FallbackBehavior": "MATCH"
      }
    }
  }
}
```

# 正在检查 HTTP/2 中的伪标头 AWS WAF
<a name="waf-rule-statement-request-components-for-http2-pseudo-headers"></a>

本节介绍如何使用 AWS WAF 来检查 HTTP/2 伪标头。

支持 HTTP/2 流量的受保护 AWS 资源不会将 HTTP/2 伪标头转发到以 AWS WAF 供检查，但它们在用于检查的 Web 请求组件中提供伪标头的内容。 AWS WAF 

您可以使用 AWS WAF 仅检查下表中列出的伪标头。


**映射到 Web 请求组件的 HTTP/2 伪标头内容**  

| HTTP/2 伪标头 | 要检查的 Web 请求组件 | 文档 | 
| --- | --- | --- | 
|  `:method`  |  HTTP method   |  [HTTP method](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-http-method)  | 
|  `:authority`  |  `Host` 标头   |  [单个标头](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-header)  [所有标头](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-headers)  | 
|  `:path` URI 路径  | URI 路径  | [URI 路径](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-path) | 
|  `:path` query  |  查询字符串  |  [查询字符串](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-query-string) [Single query parameter (单个查询参数)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-query-param) [All query parameters (所有查询参数)](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-all-query-params)  | 

# 在中使用文本转换 AWS WAF
<a name="waf-rule-statement-transformation"></a>

本节介绍如何在检查请求之前提供 AWS WAF 要应用的转换。

在查找模式或设置约束条件的语句中，您可以在检查请求之前提供 AWS WAF 要应用的转换。转换会重新设置 Web 请求的格式，消除了一些不寻常的格式，可防范攻击者使用它们以试图绕过 AWS WAF。

当您将其与 JSON 正文请求组件选择一起使用时， AWS WAF 会在解析并从 JSON 中提取要检查的元素之后应用您的转换。有关更多信息，请参阅 [JSON 正文](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-json-body)。

如果提供多个转换，还应当设置 AWS WAF 应用这些转换的顺序。

**WCUs**— 每个文本转换为 10 WCUs。

 AWS WAF 控制台和 API 文档还在以下位置为这些设置提供了指导：
+ 控制台上的**规则生成器** – **文本转换**。当您使用请求组件时，可使用此选项。
+ **API 语句内容** – `TextTransformations`文本转换的选项

每个转换列表都显示了控制台和 API 规范，后面是相应描述。

Base64 decode – `BASE64_DECODE`  
AWS WAF 解码一个 Base64 编码的字符串。

Base64 decode extension – `BASE64_DECODE_EXT`  
AWS WAF 解码 Base64 编码的字符串，但使用忽略无效字符的宽容实现。

Command line – `CMD_LINE`  
此选项可减少攻击者可能注入操作系统命令行命令并使用不寻常的格式伪装部分或全部命令的情况。  
使用此选项可执行以下转换：  
+ 删除以下字符：`\ " ' ^`
+ 删除以下字符之前的空格：`/ (`
+ 将以下字符替换为空格：`, ;`
+ 将多个空格替换为一个空格
+ 将大写字母 `A-Z` 转换为小写字母 `a-z`

Compress whitespace – `COMPRESS_WHITE_SPACE`  
AWS WAF 通过将多个空格替换为一个空格并将以下字符替换为空格字符 (ASCII 32) 来压缩空白：  
+ Formfeed (ASCII 12)
+ Tab (ASCII 9)
+ 换行符 (ASCII 10)
+ 回车 (ASCII 13)
+ 垂直制表符 (ASCII 11)
+ 不间断空格 (ASCII 160)

CSS decode – `CSS_DECODE`  
AWS WAF 解码使用 CSS 2.x 转义规则编码的字符。`syndata.html#characters`此函数在解码过程中最多使用两个字节，因此它可以帮助发现使用 CSS 编码而通常不会被编码的 ASCII 字符。它也可用于反规避，规避是反斜杠和非十六进制字符的组合。例如，`javascript` 的 `ja\vascript`。

Escape sequences decode – `ESCAPE_SEQ_DECODE`  
AWS WAF 解码以下 ANSI C 转义序列：`\a`、、`\b`、`\f`、、`\n`、`\r`、`\t`、`\v`、`\\``\?`、（十六进制）`\'``\"`、`\xHH`（八进制）。`\0OOO`无效的编码保留在输出中。

Hex decode – `HEX_DECODE`  
AWS WAF 将一串十六进制字符解码为二进制。

HTML entity decode – `HTML_ENTITY_DECODE`  
AWS WAF 用相应的字符替换以十六进制格式`&#xhhhh;`或十进制格式表示`&#nnnn;`的字符。  
AWS WAF 将以下 HTML 编码的字符替换为未编码的字符。此列表使用小写的 HTML 编码，但处理方式不区分大小写，比如 `&QuOt;` 和 `&quot;` 以相同方式处理。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/waf-rule-statement-transformation.html)

JS decode – `JS_DECODE`  
AWS WAF 解码 JavaScript 转义序列。如果 `\uHHHH` 编码在 `FF01-FF5E` 的全角 ASCII 码范围内，则较高的字节用于检测和调整较低的字节。如果不是，则仅使用较低的字节，将较高的字节归零，从而可能导致信息丢失。

Lowercase – `LOWERCASE`  
AWS WAF 将大写字母 (A-Z) 转换为小写字母 (a-z)。

MD5 – `MD5`  
AWS WAF 根据输入中的数据计算 MD5 哈希值。计算的哈希是原始二进制形式。

None – `NONE`  
AWS WAF 检查收到的 Web 请求，不进行任何文本转换。

Normalize path – `NORMALIZE_PATH`  
AWS WAF 通过删除不在输入开头的多个斜杠、目录自引用和目录反向引用来规范化输入字符串。

Normalize path Windows – `NORMALIZE_PATH_WIN`  
AWS WAF 将反斜杠字符转换为正斜杠，然后使用转换处理生成的字符串。`NORMALIZE_PATH`

Remove nulls – `REMOVE_NULLS`  
AWS WAF 从输入中移除所有`NULL`字节。

Replace comments – `REPLACE_COMMENTS`  
AWS WAF 将每次出现的 C 风格注释 (/\$1... \$1/) 替换为单个空格。它不会压缩连续出现的多个事件。它会将未终止的注释替换为空格 (ASCII 0x20)。它不会更改独立终止的注释 (\$1/)。

Replace nulls – `REPLACE_NULLS`  
AWS WAF 用空格`NULL`字符 (ASCII 0x20) 替换输入中的每个字节。

SQL hex decode – `SQL_HEX_DECODE`  
AWS WAF 解码 SQL 十六进制数据。例如，将 (`0x414243`) AWS WAF 解码为 (`ABC`)。

URL decode – `URL_DECODE`  
AWS WAF 解码 URL 编码的值。

URL decode Unicode – `URL_DECODE_UNI`  
与 `URL_DECODE` 类似，但支持 Microsoft 特定的 `%u` 编码。如果代码在 `FF01-FF5E` 的全角 ASCII 码范围内，则较高的字节用于检测和调整较低的字节。否则，仅使用较低的字节，将较高的字节归零。

UTF8 to Unicode – `UTF8_TO_UNICODE`  
AWS WAF 将所有 UTF-8 字符序列转换为 Unicode。这有助于输入规范化，并最大限度地减少非英语语言的误报。

# 在中使用范围缩小语句 AWS WAF
<a name="waf-rule-scope-down-statements"></a>

本节介绍了什么是缩小范围语句及其工作方式。

范围缩小语句是一种可嵌套的规则语句，您可以将其添加到托管规则组语句或基于速率的语句中，以缩小包含规则评估的请求集的范围。包含规则仅评估与范围缩小语句匹配的请求。
+ **托管规则组语句**-如果您向托管规则组语句添加范围缩小语句，则 AWS WAF 会将任何与范围向下语句不匹配的请求评估为与规则组不匹配。只有符合范围缩小语句的请求才会根据规则组进行评估。对于定价基于被评估请求的数量的托管规则组，范围缩小语句可以帮助其控制成本。

  有关托管规则组语句的更多信息，请参阅 [在中使用托管规则组语句 AWS WAF](waf-rule-statement-type-managed-rule-group.md)。
+ **基于速率的规则语句** – 没有范围缩小语句的基于速率的规则语句会限制该规则评估的所有请求。如果您只想控制特定类别的请求的速率，请在基于速率的规则中添加范围缩小语句。例如，要仅跟踪和控制来自特定地理区域的请求速率，可以在地理匹配语句中指定该地理区域，并将其作为范围缩小语句添加到基于速率的规则中。

  有关基于速率的规则语句的更多信息，请参阅 [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)。

您可以在范围缩小语句中使用任何可嵌套规则。有关可用语句，请参阅 [在中使用匹配规则语句 AWS WAF](waf-rule-statements-match.md) 和 [在中使用逻辑规则语句 AWS WAF](waf-rule-statements-logical.md)。f WCUs or a scope-down 语句是您在其中定义的规则语句所 WCUs 必需的。使用范围缩小语句不会产生额外成本。

您可以像在常规规则中使用该语句一样配置范围缩小语句。例如，您可以对正在检查的 Web 请求组件应用文本转换，也可以指定要用作 IP 地址的被转发 IP 地址。这些配置仅适用于范围缩小语句，不由包含的托管规则组或基于速率的规则语句继承。

例如，如果您在范围缩小语句中对查询字符串应用文本转换，则在应用转换后，范围缩小语句会检查查询字符串。如果请求与范围缩小语句条件相匹配，则 AWS WAF 会将 Web 请求以其原始状态传递给包含规则，而不进行范围缩小语句的转换。包含范围缩小语句的规则可能会应用自己的文本转换，但它不会从范围缩小语句中继承任何文本转换。

您不能使用范围缩小语句为包含规则语句指定任何请求检查配置。不能将范围缩小语句用作包含规则语句的 Web 请求预处理器。范围缩小语句的唯一作用是确定哪些请求会传递到包含规则语句以进行检查。

# 在中引用可重复使用的实体 AWS WAF
<a name="waf-rule-statement-reusable-entities"></a>

本节介绍了可重用实体在 AWS WAF中的工作方式。

有些规则使用可重复使用的实体，这些实体由您或 AWS Marketplace 卖家在您的网络ACLs之外进行管理。 AWS更新可重用实体时， AWS WAF 会将更新传播到您的规则。例如，如果您在保护包 (Web ACL) 中使用 AWS 托管规则组，则在 AWS 更新规则组时，会将更改 AWS 传播到您的 Web ACL，以更新其行为。如果您在规则中使用 IP 集语句，则在更新该集合时，会将更改 AWS WAF 传播到所有引用该规则的规则，因此使用这些规则的所有保护包 (Web ACLs) 都将 up-to-date与您的更改一起保存。

以下是可在规则语句中使用的可重用实体。
+ **IP 集**：您创建和管理自己的 IP 集。您可以在控制台上从导航窗格访问这些内容。有关管理 IP 集的信息，请参阅 [中的 IP 集和正则表达式模式集 AWS WAF](waf-referenced-set-managing.md)。
+ **正则表达式匹配集**：您创建和管理自己的正则表达式匹配集。您可以在控制台上从导航窗格访问这些内容。有关管理正则表达式模式集的信息，请参阅 [中的 IP 集和正则表达式模式集 AWS WAF](waf-referenced-set-managing.md)。
+ **AWS 托管规则规则组**- AWS 管理这些规则组。当您将托管规则组添加到保护包（web ACL）时，您可以在控制台上使用这些规则组。有关这些规则组的更多信息，请参阅 [AWS 托管规则规则组列表](aws-managed-rule-groups-list.md)。
+ **AWS Marketplace 托管规则组** — AWS Marketplace 卖家管理这些规则组，您可以订阅它们以使用它们。要管理您的订阅，请在控制台的导航窗格中选择 **AWS Marketplace**。当您将 AWS Marketplace 托管规则组添加到保护包 (Web ACL) 时，会列出托管规则组。对于您尚未订阅的规则组，您也可以在该页面 AWS Marketplace 上找到指向的链接。有关 AWS Marketplace 卖家管理的规则组的更多信息，请参阅[AWS Marketplace 规则组](marketplace-rule-groups.md)。
+ **您自己的规则组**：当您需要某些无法通过托管规则组提供的行为时，您通常需要管理自己的规则组。您可以在控制台上从导航窗格访问这些内容。有关更多信息，请参阅 [管理您自己的规则组](waf-user-created-rule-groups.md)。

**删除引用的集合或规则组**  
删除被引用的实体时， AWS WAF 会检查该实体当前是否正在保护包 (Web ACL) 中使用。如果 AWS WAF 发现它正在使用中，它会警告你。 AWS WAF 几乎总是能够确定保护包（Web ACL）是否引用了实体。但是在极少数情况下，它可能无法执行此操作。如果您需要确保要删除的实体未在使用中，请在将其删除ACLs 之前在您的网页中进行检查。

# 在中使用匹配规则语句 AWS WAF
<a name="waf-rule-statements-match"></a>

本节介绍了什么是匹配语句及其工作方式。

匹配语句将 web 请求或其来源与您提供的条件进行比较。对于许多此类语句， AWS WAF 比较请求中匹配内容的特定组成部分。

匹配语句是可嵌套的。您可以将这些语句中的任何一个嵌套在逻辑规则语句中，也可以在范围缩小语句中使用它们。有关逻辑规则语句的信息，请参阅 [在中使用逻辑规则语句 AWS WAF](waf-rule-statements-logical.md)。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

下表描述了可以添加到规则中的常规匹配语句，并提供计算每个保护包（web ACL）容量单位（WCU）使用量的指南。有关的信息 WCUs，请参见[Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md)。


| 匹配语句 | 说明 | WCUs | 
| --- | --- | --- | 
| [地理匹配](waf-rule-statement-type-geo-match.md) | 检查请求的来源国，并贴上来源国和地区的标签。 | 1 | 
|  [ASN 匹配](waf-rule-statement-type-asn-match.md)  |  根据与 IP 地址和地址范围相关联的 ASN 检查请求。  |  1  | 
|  [IP 集匹配](waf-rule-statement-type-ipset-match.md)  |  根据一组 IP 地址和地址范围检查请求。  |  大多数情况下为 1。如果您将语句配置为使用带有转发的 IP 地址的标头，并在标头中指定位置Any，则将 WCUs 增大 4。  | 
|  [标签匹配规则语句](waf-rule-statement-type-label-match.md)  |  检查对由同一保护包（web ACL）中其他规则添加的标签的请求。  |  1   | 
| [正则表达式匹配规则语句](waf-rule-statement-type-regex-match.md) | 将正则表达式模式与指定的请求组件进行比较。 | 3，作为基本成本。 如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
|  [正则表达式模式集](waf-rule-statement-type-regex-pattern-set-match.md)  |  将正则表达式模式与指定的请求组件进行比较。  |  每个模式集 25 个，作为基本成本。 如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
| [大小约束](waf-rule-statement-type-size-constraint-match.md) | 根据指定的请求组件检查大小限制。 | 1，作为基本成本。 如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
| [SQLi攻击](waf-rule-statement-type-sqli-match.md) | 检查指定请求组件中是否存在恶意 SQL 代码。 | 20，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。 | 
| [字符串匹配](waf-rule-statement-type-string-match.md) | 将字符串与指定的请求组件进行比较。 |  基本成本取决于字符串匹配的类型，介于 1 和 10 之间。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
| [XSS 脚本攻击](waf-rule-statement-type-xss-match.md) | 检查指定请求组件中是否存在跨站脚本攻击。 | 40，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。 | 

# 地理匹配规则语句
<a name="waf-rule-statement-type-geo-match"></a>

本节介绍了什么是地理匹配语句及其工作方式。

使用地理或地理匹配语句根据来源国家和地区管理 web 请求。地理匹配语句会为 web 请求添加标签，标明来源国和原产地。无论语句条件是否与请求匹配，都会添加这些标签。地理匹配语句还会根据请求的来源国进行匹配。

## 如何使用地理匹配语句
<a name="waf-rule-statement-geo-how-to-use"></a>

您可以使用地理匹配语句进行国家或地区匹配，如下所示：
+ **国家/地区**：您可以单独使用地理匹配规则来管理仅基于其来源国家/地区的请求。规则语句与国家/地区代码相匹配。您也可以使用与来源国标签相匹配的标签匹配规则来遵循地理匹配规则。
**注意**  
要筛选来自香港的流量，请在地理匹配声明中使用 ISO 3166-1 alpha-2 国家/地区 `HK` 代码。
+ **区域**：使用地理匹配规则和标签匹配规则，根据请求的来源区域管理请求。您不能单独使用地理匹配规则来匹配区域代码。

有关使用标签匹配规则的信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md) 和 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

## 地理匹配语句的工作原理
<a name="waf-rule-statement-geo-how-it-works"></a>

使用地理匹配语句，按如下方式 AWS WAF 管理每个 Web 请求：

1. **确定请求的国家和地区代码** — 根据请求的 IP 地址 AWS WAF 确定请求的国家和地区。默认情况下， AWS WAF 使用 Web 请求来源的 IP 地址。您可以指示使用备 AWS WAF 用请求标头中的 IP 地址`X-Forwarded-For`，例如在规则语句设置中启用转发 IP 配置。

   AWS WAF 使用 MaxMind GeoIP 数据库确定请求的位置。 MaxMind 尽管准确性因国家和知识产权类型等因素而异，但它们在国家一级的数据的准确性非常高。有关的更多信息 MaxMind，请参阅 [MaxMind IP 地理定位](https://support.maxmind.com/hc/en-us/sections/4407519834267-IP-Geolocation)。如果您认为任何 GeoIP 数据不正确，可以通过 “更正地理数据” 向 Maxmind 提交更[MaxMind 正](https://support.maxmind.com/hc/en-us/articles/4408252036123-GeoIP-Correction)请求。IP2 

   AWS WAF 使用国际标准化组织 (ISO) 3166 标准中的 alpha-2 国家和地区代码。您可以在以下位置找到代码：
   + 您可以访问 ISO 网站，在 [ISO 在线浏览平台 (OBP)](https://www.iso.org/obp/ui#home) 上搜索国家/地区代码。
   + 在维基百科上，国家/地区代码按照 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) 列出。

     URL `https://en.wikipedia.org/wiki/ISO_3166-2:<ISO country code>` 中列出了某个国家/地区的地区代码。例如，美国的地区代码参见 [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)，乌克兰的地区代码参加 [ISO 3166-2:UA](https://en.wikipedia.org/wiki/ISO_3166-2:UA)。

1. **确定要添加到请求中的国家/地区标签和地区标签**：这些标签表示地理匹配语句使用源 IP 还是转发的 IP 配置。
   + **源 ID** 

     国家标签为 `awswaf:clientip:geo:country:<ISO country code>`。例如，`awswaf:clientip:geo:country:US` 表示美国。

     区域标签为 `awswaf:clientip:geo:region:<ISO country code>-<ISO region code>`。例如，`awswaf:clientip:geo:region:US-OR` 表示美国俄勒冈。
   + **转发的 IP** 

     国家标签为 `awswaf:forwardedip:geo:country:<ISO country code>`。例如，`awswaf:forwardedip:geo:country:US` 表示美国。

     区域标签为 `awswaf:forwardedip:geo:region:<ISO country code>-<ISO region code>`。例如，`awswaf:forwardedip:geo:region:US-OR` 表示美国俄勒冈。

   如果请求的指定 IP 地址没有相应的国家或地区代码，则 AWS WAF 在标签中使用 `XX` 代替该值。例如，以下标签适用于国家/地区代码不可用的客户端 IP：`awswaf:clientip:geo:country:XX` 和以下标签适用于国家/地区为美国但其地区代码不可用的转发 IP：`awswaf:forwardedip:geo:region:US-XX`。

1. **根据规则条件评估请求的国家/地区代码** 

无论是否找到匹配，地理匹配语句都会在其检查的所有请求中添加国家和地区标签，无论是否找到匹配。

**注意**  
AWS WAF 在规则的 Web 请求评估结束时添加所有标签。因此，与地理匹配语句中的标签匹配时，必须在包含地理匹配语句的规则之外的另一条规则中定义。

如果您只想检查区域值，则可以编写带有 Count 操作和单个国家/地区代码匹配的地理匹配规则，后接区域标签的标签匹配规则。即使采用这种方法，您也需要提供国家/地区代码以供地理匹配规则进行评估。您可以通过指定不太可能成为您网站流量来源的国家/地区，来减少日志记录和计数指标。

## CloudFront 分布和 CloudFront 地理限制功能
<a name="cloudfront-distributions-geo-restriction"></a>

对于 CloudFront 分发，如果您使用 CloudFront 地理限制功能，请注意该功能不会将被屏蔽的请求转发到 AWS WAF。它确实会将允许的请求转发到 AWS WAF。如果您想根据地理位置以及可以在中指定的其他条件来阻止请求 AWS WAF，请使用 AWS WAF 地理匹配语句，不要使用 CloudFront 地理限制功能。

## 规则语句特征
<a name="geo-match-statement-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs **— 1 个 WCU。

**设置**：此语句使用以下设置：
+ **国家/地区代码**：用于比较地理匹配的一系列国家/地区代码。这些必须是 ISO 3166 国际标准的 alpha-2 国家/地区 ISO 代码中的双字符国家/地区代码，例如 `["US","CN"]`。
+ **（可选）转发 IP 配置**-默认情况下， AWS WAF 使用 Web 请求来源中的 IP 地址来确定来源国。或者，您可以将规则配置为在 HTTP 标头中使用转发的 IP，如下所`X-Forwarded-For`示。 AWS WAF 使用标头中的第一个 IP 地址。使用此配置，您还可以指定一种回退行为，以应用于标头中包含格式错误的 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。有关更多信息，请参阅 [使用转发 IP 地址](waf-rule-statement-forwarded-ip-address.md)。

## 在何处查找规则语句
<a name="geo-match-statement-where-to-find"></a>
+ 控制台上的**规则生成器**：在**请求选项**中，选择**来源国家/地区**。
+ **API**：[GeoMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_GeoMatchStatement.html)

## 示例
<a name="waf-rule-statement-geo-examples"></a>

您可以使用地理匹配语句来管理来自特定国家/地区或区域的请求。例如，如果您想阻止来自某些国家/地区的请求，但仍允许来自这些国家/地区的一组特定 IP 地址的请求，则可以创建一个规则，将操作设置为 Block，并使用以下嵌套语句（以伪代码显示）：
+ AND statement
  + 地理匹配语句，列出您要组织的国家/地区
  + NOT statement 
    + IP 集语句，用于指定要允许通过的 IP 地址

或者，如果您想阻止某些国家/地区的某些区域，但仍允许来自这些国家/地区其他区域的请求，则可以先定义地理匹配规则，并将操作设置为 Count。然后，定义与添加的地理匹配标签匹配的标签匹配规则，并根据需要处理请求。

以下伪代码描述了这种方法的示例：

1. 地理匹配语句列出了一些国家/地区，这些国家/地区有您想要阻止的区域，但操作设置为“计数”。无论匹配状态如何，这都会对每个 web 请求进行标记，还可以为您提供感兴趣的国家/地区的计数指标。

1. 带有阻止操作的 `AND` 语句
   + 标签匹配语句，用于指定要阻止的国家/地区的标签
   + `NOT` statement 
     + 标签匹配语句，用于指定您想要允许通过的国家/地区的区域的标签

以下 JSON 列表显示了前面伪代码中描述的两个规则的实施。这些规则禁止来自美国的所有流量，但来自俄勒冈州和华盛顿州的流量除外。地理匹配语句会为其检查的所有请求添加国家/地区和区域标签。标签匹配规则在地理匹配规则之后运行，因此它可以与地理匹配规则刚刚添加的国家/地区和区域标签进行匹配。地理匹配语句使用转发 IP 地址，因此标签匹配还会指定转发 IP 标签。

```
{
   "Name": "geoMatchForLabels",
   "Priority": 10,
   "Statement": {
     "GeoMatchStatement": {
       "CountryCodes": [
         "US"
       ],
       "ForwardedIPConfig": {
           "HeaderName": "X-Forwarded-For",
           "FallbackBehavior": "MATCH"
       }
     }
   },
   "Action": {
     "Count": {}
   },
   "VisibilityConfig": {
     "SampledRequestsEnabled": true,
     "CloudWatchMetricsEnabled": true,
     "MetricName": "geoMatchForLabels"
   }
},
{
   "Name": "blockUSButNotOROrWA",
   "Priority": 11,
   "Statement": {
     "AndStatement": {
       "Statements": [
         {
           "LabelMatchStatement": {
             "Scope": "LABEL",
             "Key": "awswaf:forwardedip:geo:country:US"
           }
         },
         {
           "NotStatement": {
             "Statement": {
                "OrStatement": {
                  "Statements": [
                    {
                       "LabelMatchStatement": {
                         "Scope": "LABEL",
                         "Key": "awswaf:forwardedip:geo:region:US-OR"
                       }
                    },
                    {
                       "LabelMatchStatement": {
                         "Scope": "LABEL",
                         "Key": "awswaf:forwardedip:geo:region:US-WA"
                       }
                    }
                 ]
               }
             }
           }
         }
       ]
     }
   },
   "Action": {
     "Block": {}
   },
   "VisibilityConfig": {
     "SampledRequestsEnabled": true,
     "CloudWatchMetricsEnabled": true,
     "MetricName": "blockUSButNotOROrWA"
   }
}
```

再举一个例子，您可以将地理匹配与基于速率的规则相结合，为特定国家/地区或区域的用户确定资源的优先级。您可以为每个用于区分用户的地理匹配语句或标签匹配语句创建不同的基于速率的语句。为首选国家/地区中的用户设置较高的速率限制，并为其他用户设置较低的速率限制。

以下 JSON 列表显示了地理匹配规则，后面是基于速率的规则，这些规则限制来自美国的流量。这些规定允许来自俄勒冈州的流量高于来自全国其他任何地方的流量。

```
{
  "Name": "geoMatchForLabels",
  "Priority": 190,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "geoMatchForLabels"
  }
},
{
  "Name": "rateLimitOregon",
  "Priority": 195,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 3000,
      "AggregateKeyType": "IP",
      "ScopeDownStatement": {
        "LabelMatchStatement": {
          "Scope": "LABEL",
          "Key": "awswaf:clientip:geo:region:US-OR"
        }
      }
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "rateLimitOregon"
  }
},
{
  "Name": "rateLimitUSNotOR",
  "Priority": 200,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 100,
      "AggregateKeyType": "IP",
      "ScopeDownStatement": {
        "AndStatement": {
          "Statements": [
            {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:clientip:geo:country:US"
              }
            },
            {
              "NotStatement": {
                "Statement": {
                  "LabelMatchStatement": {
                    "Scope": "LABEL",
                    "Key": "awswaf:clientip:geo:region:US-OR"
                  }
                }
              }
            }
          ]
        }
      }
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "rateLimitUSNotOR"
  }
}
```

# IP 集匹配规则语句
<a name="waf-rule-statement-type-ipset-match"></a>

本节介绍了什么是 IP 集匹配语句及其工作方式。

IP 集匹配语句根据一组 IP 地址和地址范围检查 web 请求的 IP 地址。使用此选项可根据请求源自的 IP 地址允许或阻止 web 请求。默认情况下， AWS WAF 使用来自 web 请求来源的 IP 地址，但您可以将规则配置为使用类似 `X-Forwarded-For` 的 HTTP 标头。



AWS WAF 支持除之外的所有 IPv4 和 IPv6 CIDR 范围。`/0`有关 CIDR 表示法的更多信息，请参阅维基百科条目[无类别域间路由](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)。一个 IP 集最多可以容纳 1 万个 IP 地址或 IP 地址范围以供检查。

**注意**  
每个 IP 集匹配规则引用一个 IP 集，该集的创建和维护独立于规则。您可以在多个规则中使用单个 IP 集，并且在更新引用的集合时， AWS WAF 会自动更新引用该集合的所有规则。  
有关创建和管理 IP 集的信息，请参阅 [创建和管理中设置的 IP AWS WAF](waf-ip-set-managing.md)。

在规则组或保护包（web ACL）中添加或更新规则时，选择 **IP 集**选项，然后选择要使用的 IP 集的名称。

## 规则语句特征
<a name="ipset-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 大多数 1 个 WCU。如果将语句配置为使用转发 IP 地址并指定 ANY 的位置，则 WCU 使用量将增加 4。

此语句使用以下设置：
+ **IP 集规范**：从列表中选择要使用的 IP 集或创建一个新的 IP 集。
+ **（可选）转发 IP 配置**：用于代替请求来源的备用转发 IP 标头名称。您可以指定是与标头中的第一个地址、最后一个地址还是任何地址进行匹配。您还可以指定一种回退行为，以应用于指定标头中包含格式错误的 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。有关更多信息，请参阅 [使用转发 IP 地址](waf-rule-statement-forwarded-ip-address.md)。

## 在何处查找规则语句
<a name="ipset-match-where-to-find"></a>

**在何处查找规则语句**
+ 控制台上的**规则生成器**：在**请求选项**中，选择**来源 IP 地址**。
+ 在控制台上@@ **添加我自己的规则和规则组**页面：选择 **IP 设置**选项。
+ **API**：[IPSetReferenceStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_IPSetReferenceStatement.html)

# 自治系统编号（ASN）匹配规则语句
<a name="waf-rule-statement-type-asn-match"></a>

中的 ASN 匹配规则语句 AWS WAF 允许您根据与请求的 IP 地址关联的自治系统编号 (ASN) 来检查 Web 流量。 ASNs 是分配给互联网服务提供商、企业、大学或政府机构等组织管理的大型互联网网络的唯一标识符。通过使用 ASN 匹配语句，可以允许或阻止特定网络组织的流量，而无需管理单个 IP 地址。与基于 IP 的规则相比，这种方法提供了一种更稳定、更有效的访问控制方式，因为ASNs 更改频率低于 IP 范围。

对于阻止来自已知问题网络的流量，或仅允许来自可信合作伙伴网络的访问等场景，ASN 匹配格外有用。ASN match 语句提供了通过可选的转发 IP 配置来确定客户端 IP 地址的灵活性，使其与各种网络设置兼容，包括使用内容交付网络 (CDNs) 或反向代理的网络设置。

**注意**  
ASN 匹配是对标准身份验证和授权控制的补充，但不会取代标准身份验证和授权控制。我们建议您实施 IAM 等身份验证和授权机制，以验证应用程序中所有请求的身份。

## ASN 匹配语句的工作原理
<a name="waf-rule-statement-type-asn-match-how-it-works"></a>

AWS WAF 根据请求的 IP 地址确定请求的 ASN。默认情况下， AWS WAF 使用 Web 请求来源的 IP 地址。您可以配置 AWS WAF 为使用备用请求标头中的 IP 地址`X-Forwarded-For`，例如在规则语句设置中启用转发 IP 配置。

ASN 匹配语句将请求的 ASN 与规则中 ASNs 指定的列表进行比较。如果 ASN 与列表中的一个 ASN 匹配，则该语句的计算结果为 true，且应用相关联的规则操作。

### 处理未映射的 ASNs
<a name="waf-rule-statement-type-asn-match-unmapped"></a>

如果 AWS WAF 无法确定有效 IP 地址的 ASN，它会分配 ASN 0。您可以在规则中包含 ASN 0，以明确处理这些情况。

### 无效 IP 地址的回退行为
<a name="waf-rule-statement-type-asn-match-fallback"></a>

当配置 ASN 匹配语句以使用转发的 IP 地址时，可以对指定标头中包含无效或缺少 IP 地址的请求指定《匹配》**或《不匹配》**的回退行为。

## 规则语句特征
<a name="waf-rule-statement-type-asn-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 1 个 WCU

此语句使用以下设置：
+ **ASN 列表**：用于比较 ASN 匹配的 ASN 编号组。有效值的范围从 0 到 4294967295。您最多可以 ASNs 为每条规则指定 100。
+ **（可选）转发 IP 配置**-默认情况下， AWS WAF 使用 Web 请求源中的 IP 地址来确定 ASN。或者，您可以将规则配置为在 HTTP 标头中使用转发 IP，如 `X-Forwarded-For`。您可以指定是使用标头中的第一个地址、最后一个地址还是任何地址。使用此配置，您还可以指定一种回退行为，以应用于标头中包含格式错误的 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。有关更多信息，请参阅[使用转发的 IP 地址](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-forwarded-ip-address.html)。

## 在何处查找规则语句
<a name="waf-rule-statement-type-asn-match-where-to-find"></a>
+ 控制台上的**规则生成器**：在**请求选项**中，选择**来源 ASN**。
+ **API**：[AsnMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_AsnMatchStatement.html)

## 示例
<a name="waf-rule-statement-type-asn-match-examples"></a>

此示例阻止了源自两个特定 ASNs `X-Forwarded-For`标头的请求。如果标头中的 IP 地址格式不正确，则配置的回退行为是 `NO_MATCH` 。

```
{
  "Action": {
    "Block": {}
  },
  "Name": "AsnMatchStatementRule",
  "Priority": 1,
  "Statement": {
    "AsnMatchStatement": {
      "AsnList": [64496, 64500]
    },
    "ForwardedIPConfig": {
      "FallbackBehavior": "NO_MATCH",
      "HeaderName": "X-Forwarded-For"
    }
  },
  "VisibilityConfig": {
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AsnMatchRuleMetrics",
    "SampledRequestsEnabled": true
  }
},
"VisibilityConfig": {
  "CloudWatchMetricsEnabled": true,
  "MetricName": "WebAclMetrics",
  "SampledRequestsEnabled": true
}
}
```

# 标签匹配规则语句
<a name="waf-rule-statement-type-label-match"></a>

本节介绍了什么是标签匹配语句及其工作方式。

标签匹配语句根据字符串规范检查 web 请求中的标签。可用于检查规则的标签是指在同一保护包（web ACL）评估中已由其他规则添加到 web 请求中的标签。

标签不会在保护包 (Web ACL) 评估之外保留，但您可以在中访问标签指标， CloudWatch 并且可以在 AWS WAF 控制台中查看任何保护包 (Web ACL) 的标签信息摘要。有关更多信息，请参阅[标签指标和维度](waf-metrics.md#waf-metrics-label)和[监控和调整您的 AWS WAF 保护措施](web-acl-testing-activities.md)。您还可看到日志中的标签。有关信息，请参阅[保护包（web ACL）流量的日志字段](logging-fields.md)。

**注意**  
标签匹配语句只能查看之前在保护包（web ACL）中评估过的规则中的标签。有关如何 AWS WAF 评估保护包 (Web ACL) 中的规则和规则组的信息，请参阅[设置规则优先级](web-acl-processing-order.md)。

有关添加和匹配标签的信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

## 规则语句特征
<a name="label-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 1 个 WCU

此语句使用以下设置：
+ **匹配范围**：将其设置为 **标签** 以匹配标签名称以及前面的命名空间和前缀（可选）。将其设置为**命名空间**以匹配部分或全部命名空间规范，也可以匹配前面的前缀。
+ **Key**：要与之匹配的字符串。如果指定命名空间匹配范围，则应仅指定命名空间和前缀（可选），并带有结尾冒号。如果指定标签匹配范围，则必须包括标签名称，并且可以选择包括前述命名空间和前缀。

有关这些设置的信息，请参阅[AWS WAF 与标签匹配的规则](waf-rule-label-match.md)和[AWS WAF 标签匹配示例](waf-rule-label-match-examples.md)。

## 在何处查找规则语句
<a name="label-match-where-to-find"></a>
+ 控制台上**规则生成器**：对于**请求选项**，选择**有标签**。
+ **API**：[LabelMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_LabelMatchStatement.html)

# 正则表达式匹配规则语句
<a name="waf-rule-statement-type-regex-match"></a>

本节介绍了什么是正则表达式匹配语句及其工作方式。

正则表达式匹配语句指示 AWS WAF 将请求组件与单个正则表达式 (regex) 进行匹配。如果请求组件与您指定的正则表达式匹配，则 Web 请求与语句匹配。

对于想要使用数学逻辑组合匹配条件的情况，此语句类型是 [正则表达式模式集匹配规则语句](waf-rule-statement-type-regex-pattern-set-match.md) 一个不错的替代方案。例如，如果您希望请求组件与某些正则表达式模式匹配而不匹配其他正则表达式模式，则可以使用 [AND 规则语句](waf-rule-statement-type-and.md) 和 [NOT 规则语句](waf-rule-statement-type-not.md) 来组合正则表达式匹配语句。

AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

## 规则语句特征
<a name="regex-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 3 WCUs，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理这些转换。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

## 在何处查找规则语句
<a name="regex-match-where-to-find"></a>
+ 控制台上**规则生成器** – 对于**匹配类型**，选择**匹配正则表达式**。
+ **API**：[RegexMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_RegexMatchStatement.html)

# 正则表达式模式集匹配规则语句
<a name="waf-rule-statement-type-regex-pattern-set-match"></a>

本节介绍了什么是正则表达式模式集匹配语句及其工作方式。

正则表达式模式集匹配检查您指定的 Web 请求部分中是否存在您在正则表达式模式集中指定的正则表达式模式。

AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

**注意**  
每个正则表达式模式集匹配规则引用一个正则表达式模式集，该集的创建和维护独立于规则。你可以在多个规则中使用单个正则表达式模式集，当你更新被引用的集合时， AWS WAF 会自动更新所有引用它的规则。  
有关创建和管理正则表达式模式集的信息，请参阅 [创建和管理中设置的正则表达式模式 AWS WAF](waf-regex-pattern-set-managing.md)。

正则表达式模式集匹配语句指示 AWS WAF 在您选择的请求组件中搜索集合中的任何模式。如果请求组件与集合中的任何模式匹配，Web 请求将匹配模式集规则语句。

如果要使用逻辑组合正则表达式模式匹配，例如与某些正则表达式进行匹配而不匹配其他正则表达式，请考虑使用 [正则表达式匹配规则语句](waf-rule-statement-type-regex-match.md)。

## 规则语句特征
<a name="regex-pattern-set-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 25 WCUs，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理它们。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此语句需要以下设置：
+ 正则表达式模式集规范 – 从列表中选择要使用的正则表达式模式集或创建一个新的正则表达式模式集。

## 在何处查找规则语句
<a name="regex-pattern-set-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，选择**字符串匹配条件** > **从正则表达式集中匹配模式**。
+ **API**：[RegexPatternSetReferenceStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_RegexPatternSetReferenceStatement.html)

# 大小约束规则语句
<a name="waf-rule-statement-type-size-constraint-match"></a>

本节介绍了什么是大小限制语句及其工作方式。

大小约束语句将 Web 请求组件 AWS WAF 收到的字节数与您提供的数字进行比较，并根据您的比较标准进行匹配。

比较条件是一个运算符，例如大于 (>) 或小于 (<)。例如，您可以匹配具有大于 100 字节的查询字符串的请求。

如果您检查 URI 路径，则路径中的任何 `/` 都算作一个字符。例如，URI 路径 `/logo.jpg` 的长度是 9 个字符。

**注意**  
此语句仅检查 Web 请求组件的大小。不检查组件的内容。

## 规则语句特征
<a name="size-constraint-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 1 WCU，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件** – Web 请求中要检查的部分，例如查询字符串或正文。有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。

  在应用了任何转换后，大小约束语句仅检查组件的大小。不检查组件的内容。
+ **可选的文本转换**-在检查请求组件的大小之前 AWS WAF 要对其执行的转换。例如，您可以压缩空白或对 HTML 实体进行解码。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理这些转换。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此外，此语句需要以下设置：
+ **大小匹配条件** – 这表示用于将您提供的大小与所选请求组件进行比较的数字比较运算符。从列表中选择运算符。
+ **大小** – 比较中使用的大小设置（以字节为单位）。

## 在何处查找规则语句
<a name="size-constraint-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，在**大小匹配条件**下选择要使用的条件。
+ **API**：[SizeConstraintStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_SizeConstraintStatement.html)

# SQL 注入攻击规则语句
<a name="waf-rule-statement-type-sqli-match"></a>

本节介绍了什么是 SQL 注入规则语句及其工作方式。

检查恶意 SQL 代码的 SQL 注入规则语句。攻击者将恶意 SQL 代码插入到 web 请求中，以执行修改数据库或从中提取数据等操作。

## 规则语句特征
<a name="sqli-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 基本成本取决于规则语句的灵敏度级别设置：Low成本 20，High成本 30。

如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理这些转换。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此外，此语句需要以下设置：
+ **敏感度级别**：此设置可调整 SQL 注入匹配条件的敏感度。选项为 LOW 和 HIGH。默认设置为 LOW。

  HIGH 设置可检测更多 SQL 注入攻击，是一项推荐设置。由于灵敏度更高，此设置会生成更多的误报，尤其是在您的 web 请求通常包含异常字符串的情况下。在保护包（web ACL）测试和调整期间，您可能需要实施更多工作以减少误报。有关信息，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

  设置越低，SQL 注入检测越不严格，误报也就越少。对于具有针对 SQL 注入攻击的其他保护或对误报具有低容忍度的资源，LOW 可能是一个更好的选择。

## 在何处查找规则语句
<a name="sqli-match-where-to-find"></a>
+ 控制台上的**规则生成器**：对于**匹配类型**，请选择**攻击匹配条件** > **包含 SQL 注入攻击**。
+ **API**：[SqliMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_SqliMatchStatement.html)

# 字符串匹配规则语句
<a name="waf-rule-statement-type-string-match"></a>

本节介绍了什么是字符串匹配语句及其工作方式。

字符串匹配语句表示您 AWS WAF 要在请求中搜索的字符串、在请求中的位置以及搜索方式。例如，您可以在请求中查找任何查询字符串开头的特定字符串，也可以查找请求 `User-agent` 标头的精确匹配项。字符串通常由可打印 ASCII 字符组成，但您可以使用从十六进制 0x00 到 0xFF (十进制 0 到 255) 的任何字符。

## 规则语句特征
<a name="string-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 基本费用取决于您使用的匹配类型。
+ **完全匹配字符串** – 2 
+ **以字符串开头** – 2 
+ **以字符串结尾** – 2 
+ **包含字符串** – 10 
+ **包含单词** – 10 

如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理它们。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此外，此语句需要以下设置：
+ **要匹配的字符**串 — 这是您 AWS WAF 要与指定请求组件进行比较的字符串。字符串通常由可打印 ASCII 字符组成，但您可以使用从十六进制 0x00 到 0xFF (十进制 0 到 255) 的任何字符。
+ **字符串匹配条件**-这表示您 AWS WAF 要执行的搜索类型。
  + **完全匹配字符串** – 字符串和请求组件的值相同。
  + **以字符串开头** – 字符串出现在请求组件的开头。
  + **以字符串结尾** – 字符串出现在请求组件的末尾。
  + **包含字符串** – 该字符串出现在请求组件中的任何位置。
  + **包含词** – 您指定的字符串必须显示在请求组件中。

    对于此选项，指定的字符串必须仅包含字母数字字符或下划线（A-Z、a-z、0-9 或 \$1）。

    请求必须满足以下条件之一：
    + 字符串与请求组件的值精确匹配，如标头的值。
    + 字符串位于请求组件的开头，并且后跟字母数字字符或下划线 (\$1) 之外的字符（例如，`BadBot;`）。
    + 字符串位于请求组件的末尾，并且前面是字母数字字符或下划线 (\$1) 之外的字符，例如，`;BadBot`。
    + 字符串位于请求组件的中间，并且前面和后面是字母数字字符或下划线 (\$1) 之外的字符，例如，`-BadBot;`。

## 在何处查找规则语句
<a name="string-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，请选择**字符串匹配条件**，然后填写匹配所依据的字符串。
+ **API**：[ByteMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_ByteMatchStatement.html)

# 跨站点脚本攻击规则语句
<a name="waf-rule-statement-type-xss-match"></a>

本节介绍了什么是 XSS（跨站点脚本）攻击语句及其工作方式。

XSS攻击语句会检查 Web 请求组件中是否存在恶意脚本。在 XSS 攻击中，攻击者将良性网站中的漏洞作为载体，以将恶意客户端站点脚本，注入到其它合法 Web 浏览器中。

## 规则语句特征
<a name="xss-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 40 WCUs，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理它们。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

## 在何处查找规则语句
<a name="xss-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，请选择**攻击匹配条件** > **包含 XSS 注入攻击**。
+ **API**：[XssMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_XssMatchStatement.html)

# 在中使用逻辑规则语句 AWS WAF
<a name="waf-rule-statements-logical"></a>

本节介绍了什么是逻辑规则语句及其工作方式。

使用逻辑规则语句合并其他语句或否定其结果。每个逻辑规则语句至少需要一个嵌套语句。

要在逻辑上组合或否定规则语句的结果，可将这些语句嵌套在逻辑规则语句下。

逻辑规则语句是可嵌套的。您可以将这些语句嵌套在其他逻辑规则语句中，也可以在范围缩小语句中使用它们。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

**注意**  
控制台上的可视化编辑器支持单层规则语句嵌套，可满足多种需求。要嵌套更多关卡，请在控制台上编辑规则的 JSON 表示形式或使用 APIs。

下表描述了逻辑规则语句，并提供了计算每个保护包（web ACL）容量单位（WCU）使用量的指南。有关的信息 WCUs，请参见[Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md)。


| 逻辑语句  | 说明 | WCUs | 
| --- | --- | --- | 
| [AND 逻辑](waf-rule-statement-type-and.md) | 将嵌套语句与 AND 逻辑相结合。 | 基于嵌套语句 | 
|  [NOT 逻辑](waf-rule-statement-type-not.md)  |  否定嵌套语句的结果。  |  基于嵌套语句  | 
| [OR 逻辑](waf-rule-statement-type-or.md) | 将嵌套语句与 OR 逻辑相结合。 | 基于嵌套语句 | 

# AND 规则语句
<a name="waf-rule-statement-type-and"></a>

AND 规则语句将嵌套语句与逻辑 AND 运算相结合，因此所有嵌套语句都必须匹配 AND 语句才能进行匹配。这至少需要两个嵌套语句。

## 规则语句特征
<a name="and-rule-statement-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 取决于嵌套语句。

## 在何处查找规则语句
<a name="and-rule-statement-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**如果有请求**，选择**匹配所有语句 (AND)**，然后填写嵌套语句。
+ **API**：[AndStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_AndStatement.html)

## 示例
<a name="and-rule-statement-examples"></a>

以下列表显示了如何使用 AND 和 NOT 逻辑规则语句来消除 SQL 注入攻击语句的匹配结果误报。在这个示例中，假设我们可以编写一个单字节匹配语句来匹配导致误报的请求。

AND 语句匹配与字节匹配语句不匹配且与 SQL 注入攻击语句匹配的请求。

```
{
      "Name": "SQLiExcludeFalsePositives",
      "Priority": 0,
      "Statement": {
        "AndStatement": {
          "Statements": [
            {
              "NotStatement": {
                "Statement": {
                  "ByteMatchStatement": {
                    "SearchString": "string identifying a false positive",
                    "FieldToMatch": {
                      "Body": {
                        "OversizeHandling": "MATCH"
                      }
                    },
                    "TextTransformations": [
                      {
                        "Priority": 0,
                        "Type": "NONE"
                      }
                    ],
                    "PositionalConstraint": "CONTAINS"
                  }
                }
              }
            },
            {
              "SqliMatchStatement": {
                "FieldToMatch": {
                  "Body": {
                    "OversizeHandling": "MATCH"
                  }
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "SQLiExcludeFalsePositives"
      }
    }
```

使用控制台规则可视化编辑器，可以在 OR 或 AND 语句下嵌套非逻辑语句或 NOT 语句。前面的示例显示了 NOT 语句的嵌套。

使用控制台规则可视化编辑器，您可以将大多数可嵌套语句嵌套在逻辑规则语句下，例如前面的示例中所示的语句。您不能使用可视化编辑器来嵌套 OR 或 AND 语句。要配置这种类型的嵌套，您需要以 JSON 格式提供规则语句。例如，以下 JSON 规则列表包括嵌套在 AND 语句中的 OR 语句。

```
{
  "Name": "match_rule",
  "Priority": 0,
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "LabelMatchStatement": {
            "Scope": "LABEL",
            "Key": "awswaf:managed:aws:bot-control:bot:category:monitoring"
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:bot-control:bot:name:pingdom"
              }
            }
          }
        },
        {
          "OrStatement": {
            "Statements": [
              {
                "GeoMatchStatement": {
                  "CountryCodes": [
                    "JM",
                    "JP"
                  ]
                }
              },
              {
                "ByteMatchStatement": {
                  "SearchString": "JCountryString",
                  "FieldToMatch": {
                    "Body": {}
                  },
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ],
                  "PositionalConstraint": "CONTAINS"
                }
              }
            ]
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "match_rule"
  }
}
```

# NOT 规则语句
<a name="waf-rule-statement-type-not"></a>

NOT 规则语句在逻辑上否定单个嵌套语句的结果，因此嵌套语句必须不匹配才能实现 NOT 语句的匹配，反之亦然。这需要一个嵌套语句。

例如，如果您要阻止并非来自特定国家/地区的请求，请创建一个将操作设置为阻止的 NOT 语句，然后嵌套指定该国家/地区的地理匹配语句。

## 规则语句特征
<a name="not-rule-statement-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 取决于嵌套语句。

## 在何处查找规则语句
<a name="not-rule-statement-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**如果有请求**，选择**与语句不匹配 (NOT)**，然后填写嵌套语句。
+ **API**：[NotStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_NotStatement.html)

# OR 规则语句
<a name="waf-rule-statement-type-or"></a>

OR 规则语句将嵌套语句与 OR 逻辑相结合，因此其中一个嵌套语句必须匹配 OR 语句才能进行匹配。这至少需要两个嵌套语句。

例如，如果您要阻止来自特定国家/地区或包含特定查询字符串的请求，则可以创建一个 OR 语句，并在其中嵌入该国家/地区的地理匹配语句和查询字符串的字符串匹配语句。

相反，如果您想阻止*不是*来自特定国家/地区或包含特定查询字符串的请求，则可以修改之前的 OR 语句，将地理匹配语句嵌套在 NOT 语句中更低的一个级别。此级别的嵌套要求您使用 JSON 格式，因为控制台仅支持一个级别的嵌套。

## 规则语句特征
<a name="or-rule-statement-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 取决于嵌套语句。

## 在何处查找规则语句
<a name="or-rule-statement-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**如果有请求**，选择**至少匹配其中一条语句 (OR)**，然后填写嵌套语句。
+ **API**：[OrStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_OrStatement.html)

**示例**  
下表显示了使用 OR 来组合另外两个语句的情况。如果其中一个嵌套语句匹配，则 OR 语句是匹配的。

```
{
  "Name": "neitherOfTwo",
  "Priority": 1,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "neitherOfTwo"
  },
  "Statement": {
    "OrStatement": {
      "Statements": [
        {
          "GeoMatchStatement": {
            "CountryCodes": [
              "CA"
            ]
          }
        },
        {
          "IPSetReferenceStatement": {
            "ARN": "arn:aws:wafv2:us-east-1:111111111111:regional/ipset/test-ip-set-22222222/33333333-4444-5555-6666-777777777777"
          }
        }
      ]
    }
  }
}
```

使用控制台规则可视化编辑器，您可以在逻辑规则语句下嵌套大多数可嵌套语句，但不能使用可视化编辑器嵌套 OR 或 AND 语句。要配置这种类型的嵌套，您需要以 JSON 格式提供规则语句。例如，以下 JSON 规则列表包括嵌套在 AND 语句中的 OR 语句。

```
{
  "Name": "match_rule",
  "Priority": 0,
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "LabelMatchStatement": {
            "Scope": "LABEL",
            "Key": "awswaf:managed:aws:bot-control:bot:category:monitoring"
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:bot-control:bot:name:pingdom"
              }
            }
          }
        },
        {
          "OrStatement": {
            "Statements": [
              {
                "GeoMatchStatement": {
                  "CountryCodes": [
                    "JM",
                    "JP"
                  ]
                }
              },
              {
                "ByteMatchStatement": {
                  "SearchString": "JCountryString",
                  "FieldToMatch": {
                    "Body": {}
                  },
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ],
                  "PositionalConstraint": "CONTAINS"
                }
              }
            ]
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "match_rule"
  }
}
```

# 在中使用基于费率的规则语句 AWS WAF
<a name="waf-rule-statement-type-rate-based"></a>

本节介绍了什么是基于速率的规则语句及其工作方式。

当请求的速率过快时，基于速率的规则会计算传入的请求和速率限制请求。该规则根据您的条件聚合请求，并根据规则的评估窗口、请求限制和操作设置对聚合分组进行计数和速率限制。

**注意**  
您还可以使用 Bot Control AWS 托管规则规则组的目标保护级别对 Web 请求进行速率限制。使用托管规则组会产生额外费用。有关更多信息，请参阅 [基于速率的规则和定向机器人控制功能规则中的速率限制选项](waf-rate-limiting-options.md)。

AWS WAF 针对您使用的基于速率的规则的每个实例，分别跟踪和管理 Web 请求。例如，如果您在两个 Web 中提供相同的基于速率的规则设置ACLs，则这两个规则语句中的每一个都代表基于费率的规则的单独实例，并且每个语句都由其自己的跟踪和管理。 AWS WAF如果您在规则组中定义了基于费率的规则，然后在多个位置使用该规则组，则每次使用都会创建基于费率的规则的单独实例，该实例将通过该实例进行自己的跟踪和管理。 AWS WAF

**不可嵌套**：您不能将此语句类型嵌套在其他语句中。您可以将其直接包含在保护包（web ACL）或规则组中。

**范围缩小语句**：此规则类型可以采用范围缩小语句，以缩小规则跟踪并限制速率的请求的范围。缩小范围语句可以是可选的，也可以是必需的，具体取决于其他规则配置设置。详细信息参见本节。有关范围缩小语句的一般信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

**WCUs**— 2，作为基本成本。对于您指定的每个自定义聚合密钥，添加 30 WCUs。如果您在规则中使用 scope-down 语句，请计算并添加该 WCUs 语句。

**在何处查找规则语句**
+ 控制台上保护包（web ACL）中的**规则生成器**：对于**规则**下的**类型**，请选择**基于速率的规则**。
+ **API**：[RateBasedStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_RateBasedStatement.html)

**Topics**
+ [中基于速率的规则高级设置 AWS WAF](waf-rule-statement-type-rate-based-high-level-settings.md)
+ [基于费率的规则注意事项 AWS WAF](waf-rule-statement-type-rate-based-caveats.md)
+ [在中汇总基于费率的规则 AWS WAF](waf-rule-statement-type-rate-based-aggregation-options.md)
+ [基于速率的规则聚合实例和计数](waf-rule-statement-type-rate-based-aggregation-instances.md)
+ [对中的请求应用速率限制 AWS WAF](waf-rule-statement-type-rate-based-request-limiting.md)
+ [中基于费率的规则示例 AWS WAF](waf-rule-statement-type-rate-based-examples.md)
+ [列出基于速率的规则实施速率限制的 IP 地址](listing-managed-ips.md)

# 中基于速率的规则高级设置 AWS WAF
<a name="waf-rule-statement-type-rate-based-high-level-settings"></a>

基于速率的规则语句使用以下高级设置：
+ **评估窗口**：从当前时间向后看的时间（以秒为单位）， AWS WAF 应该将其包含在其请求计数中。例如，对于设置为 120，当 AWS WAF 检查速率时，它会计算当前时间之前 2 分钟的请求数。有效设置为 60（1 分钟）、120（2 分钟）、300（5 分钟）和 600（10 分钟），默认设置为 300（5 分钟）。

  此设置并不能决定 AWS WAF 检查速率的频率，而是决定每次检查时的回溯程度。 AWS WAF 经常检查速率，检查时间与评估窗口设置无关。
+ **速率限制**-在指定的评估窗口内仅 AWS WAF 应跟踪的符合您的标准的最大请求数。允许的最低限制设置为 10 个。当违反此限制时，会将规则操作设置 AWS WAF 应用于符合您条件的其他请求。

  AWS WAF 在您设置的限制附近应用速率限制，但不能保证精确的限制匹配。有关更多信息，请参阅 [基于速率的规则注意事项](waf-rule-statement-type-rate-based-caveats.md)。
+ **请求聚合** – 用于基于速率的规则计数和速率限制的 Web 请求的聚合条件。您设置的速率限制适用于各个聚合实例。有关详细信息，请参阅 [聚合基于速率的规则](waf-rule-statement-type-rate-based-aggregation-options.md) 和 [聚合实例和计数](waf-rule-statement-type-rate-based-aggregation-instances.md)。
+ **操作** – 对规则速率限制的请求采取的操作。您可以使用除 Allow 以外的任何规则操作。这与往常一样是在规则级别进行设置的，但部分限制和行为是基于速率的规则所特有的。有关规则操作的一般信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。有关速率限制的特定信息，请参阅本节中的 [对中的请求应用速率限制 AWS WAF](waf-rule-statement-type-rate-based-request-limiting.md)。
+ **检查范围和速率限制** – 您可以通过添加范围缩小语句来缩小基于速率的语句跟踪的请求范围和速率限制。如果您指定范围缩小语句，则该规则将仅对与范围缩小语句匹配的请求进行聚合、计数和速率限制。如果您选择请求聚合选项**全部计数**，则需要使用范围缩小语句。有范围缩小语句的更多信息，请参阅 [使用范围缩小语句](waf-rule-scope-down-statements.md)。
+ **（可选）转发 IP 配置** – 仅当您在请求聚合中指定**标头中的 IP 地址**时才使用此配置，可以单独指定，也可以作为自定义键设置的一部分。 AWS WAF 检索指定标头中的第一个 IP 地址并将其用作聚合值。用于此目的的常用标头是 `X-Forwarded-For`，但您也可以指定任何标头。有关更多信息，请参阅 [使用转发 IP 地址](waf-rule-statement-forwarded-ip-address.md)。

# 基于费率的规则注意事项 AWS WAF
<a name="waf-rule-statement-type-rate-based-caveats"></a>

本节列出了使用基于速率的规则的注意事项。

AWS WAF 速率限制旨在控制高请求率，并以尽可能最高效、最有效的方式保护应用程序的可用性。它不适用于精确的请求速率限制。
+ AWS WAF 使用更重视最近请求的算法来估计当前的请求速率。因此， AWS WAF 将在您设置的限制附近应用速率限制，但不能保证精确的限制匹配。
+ 每次 AWS WAF 估算请求速率时，都要 AWS WAF 回顾一下在配置的评估窗口内收到的请求数。由于这个因素以及传播延迟等其他因素，请求可能会在长达几分钟的时间内以过高的速率传入，然后才 AWS WAF 会对其进行检测和速率限制。同样，请求速率可能在一段时间内低于该限制，然后 AWS WAF 才会检测到下降并停止速率限制操作。通常，此延迟低于 30 秒。
+ 如果更改了在用规则中的任何速率限制设置，则更改会重置该规则的速率限制计数。这最多可以将规则的速率限制活动暂停一分钟时间。速率限制设置包括评估窗口、速率限制、请求聚合设置、转发的 IP 配置和检查范围。

# 在中汇总基于费率的规则 AWS WAF
<a name="waf-rule-statement-type-rate-based-aggregation-options"></a>

本节介绍了用于聚合请求的选项。

默认情况下，基于速率的规则会根据请求 IP 地址对请求进行聚合和速率限制。您可以将规则配置为使用其他各种聚合键和键组合。例如，您可以根据转发 IP 地址、HTTP 方法或查询参数进行聚合。您还可以指定聚合键组合，例如 IP 地址和 HTTP 方法，也可以指定两个不同 Cookie 的值。

**注意**  
您在聚合键中指定的所有请求组件都必须包含在 web 请求中，才能对请求进行评估或由规则对其进行速率限制。

您可以使用以下聚合选项配置基于速率的规则。
+ **源 IP 地址**：仅使用 web 请求源向该 IP 地址发送的请求源进行聚合。

  源 IP 地址可能不包含原始客户端的地址。如果 web 请求通过一个或多个代理或负载均衡器，则其中将包含最后一个代理的地址。
+ **标头中的 IP 地址**：仅使用 HTTP 标头中的客户端地址进行聚合。这也称为转发 IP 地址。

  使用此配置，您还可以指定一种回退行为，以应用于标头中包含格式错误的 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。如果没有匹配项，则基于速率的规则不计入请求或限制请求的速率。为了匹配，基于速率的规则将该请求与指定标头中包含格式错误 IP 地址的其他请求组合在一起。

  请谨慎使用此选项，因为代理可能会对标头进行不一致的处理，并且也可以对其进行修改以绕过检查。有关最佳实践和其他信息，请参阅 [在中使用转发的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)。
+ **ASN**：使用与源 IP 地址关联的自治系统编号（ASN）作为聚合密钥进行聚合。这可能不是原始客户端的地址。如果 web 请求通过一个或多个代理或负载均衡器，这将包含最后一个代理的地址。

  如果 AWS WAF 无法从 IP 地址获得 ASN，则会将 ASN 计为 ASN 0。如果您不想对未映射应用速率限制 ASNs，则可以创建一个范围缩小规则，排除 ASN 为 0 的请求。
+ **标头中的 ASN**：使用 HTTP 标头中与客户端 IP 地址相关联的 ASN 进行聚合。这也称为转发 IP 地址。使用此配置，您还可以指定一种回退行为，应用于具有无效或格式不正确 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。如果您在转发的 IP 配置中将回退行为设置为匹配，则会将无效的 IP 地址 AWS WAF 视为匹配值。这允许 AWS WAF 继续评估基于费率的规则复合密钥的任何剩余部分。如果没有匹配项，则基于速率的规则不计入请求或限制请求的速率。

  请谨慎使用此选项，因为代理可能会对标头进行不一致的处理，并且可以对其进行修改以绕过检查。有关最佳实践和其他信息，请参阅 [在中使用转发的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)。
+ **全部计数**：对与规则的范围缩小语句匹配的所有请求进行计数和速率限制。此选项需要范围缩小语句。这通常用于对一组特定的请求进行速率限制，例如带有特定标签的所有请求或来自特定地理区域的所有请求。
+ **自定义键**：使用一个或多个自定义聚合键进行聚合。要将任一 IP 地址选项与其他聚合键结合使用，请在自定义键下定义它们。

  自定义聚合键是 [在中请求组件 AWS WAF](waf-rule-statement-fields-list.md) 中所述的 web 请求组件选项的子集。

  关键选项如下所示。除非另有说明，否则您可以多次使用一个选项，例如，两个标头或三个标签命名空间。
  + **标签命名空间**：使用标签命名空间作为聚合键。每个具有指定标签命名空间的不同完全限定标签名称都构成了聚合实例。如果您只使用一个标签命名空间作为自定义键，则每个标签名称都完全定义了一个聚合实例。

    基于速率的规则仅使用通过保护包（web ACL）中事先评估的规则添加到请求中的标签。

    有关标签命名空间的信息，请参阅 [中的标签语法和命名要求 AWS WAF](waf-rule-label-requirements.md)。
  + **标头**：使用命名的标头作为聚合键。标头中的每个不同值都构成聚合实例。

    标头采用可选的文本转换。请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。
  + **Cookie** – 使用命名的 Cookie 作为聚合密钥。Cookie 中的每个不同值都构成聚合实例。

    Cookie 采用可选的文本转换。请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。
  + **查询参数**：在请求中使用单个查询参数作为聚合键。命名查询参数的每个不同值都构成聚合实例。

    查询参数采用可选的文本转换。请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。
  + **查询字符串**：使用请求中的整个查询字符串作为聚合键。每个不同的查询字符串都构成聚合实例。此类型的键只能使用一次。

    查询字符串采用可选的文本转换。请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。
  + **URI 路径**：使用请求中的 URI 路径作为聚合键。每个不同的 URI 路径都构成聚合实例。此类型的键只能使用一次。

    URI 路径采用可选的文本转换。请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。
  + **JA3 指纹** — 使用请求中的 JA3 指纹作为聚合密钥。每个不同的 JA3 指纹都构成聚合实例。此类型的键只能使用一次。
  + **JA4 指纹** — 使用请求中的 JA4 指纹作为聚合密钥。每个不同的 JA4 指纹都构成聚合实例。此类型的键只能使用一次。
  + **HTTP 方法**：使用请求的 HTTP 方法作为聚合密钥。每个不同的 HTTP 方法都构成聚合实例。此类型的键只能使用一次。
  + **IP 地址**：使用 web 请求源中的 IP 地址与其他密钥组合使用 web 请求源中的 IP 地址进行聚合。

    这可能不包含原始客户端的地址。如果 web 请求通过一个或多个代理或负载均衡器，则其中将包含最后一个代理的地址。
  + **标头中的 IP 地址**：使用 HTTP 标头中的客户端地址与其他密钥组合进行聚合。这也称为转发 IP 地址。

    请谨慎使用此选项，因为代理可能会对标头进行不一致的处理，并且可以对其进行修改以绕过检查。有关最佳实践和其他信息，请参阅 [在中使用转发的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)。

# 基于速率的规则聚合实例和计数
<a name="waf-rule-statement-type-rate-based-aggregation-instances"></a>

本节介绍了基于速率的规则如何评估 Web 请求。

当基于速率的规则使用您的聚合条件评估 Web 请求时，该规则为指定的聚合键找到的每组唯一值都将定义一个唯一的*聚合实例*。
+ **多键** – 如果您定义了多个自定义键，则每个键的值将构成聚合实例的定义。每个唯一的值组合都定义了一个聚合实例。
+ **单键** – 如果您在自定义密钥中或通过选择单例 IP 地址选项之一选择了单个密钥，则该密钥的每个唯一值都定义了一个聚合实例。
+ **全部计数-无密钥** – 如果您选择了聚合选项**全部计数**，则该规则评估的所有请求都属于该规则的单个聚合实例。此选择需要范围缩小语句。

 

基于速率的规则分别计算其识别的每个聚合实例的 Web 请求。

例如，假设基于速率的规则使用以下 IP 地址和 HTTP 方法值评估 Web 请求：
+ IP 地址 10.1.1.1，HTTP 方法 POST
+ IP 地址 10.1.1.1，HTTP 方法 GET
+ IP 地址 127.0.0.0，HTTP 方法 POST
+ IP 地址 10.1.1.1，HTTP 方法 GET

该规则根据您的聚合条件创建不同的聚合实例。
+ 如果聚合标准只是 IP 地址，则每个单独的 IP 地址都是一个聚合实例，并分别计算每个 IP 地址的请求 AWS WAF 数。我们示例的聚合实例和请求计数如下所示：
  + IP 地址 10.1.1.1：计数 3
  + IP 地址 127.0.0.0：计数 1
+ 如果聚合条件是 HTTP 方法，则每个 HTTP 方法都是一个聚合实例。我们示例的聚合实例和请求计数如下所示：
  + HTTP 方法 POST：计数 2
  + HTTP 方法 GET：计数 2
+ 如果聚合条件是 IP 地址和 HTTP 方法，则每个 IP 地址和每个 HTTP 方法都将构成组合的聚合实例。我们示例的聚合实例和请求计数如下所示：
  + IP 地址 10.1.1.1，HTTP 方法 POST：计数 1
  + IP 地址 10.1.1.1，HTTP 方法 GET：count 2
  + IP 地址 127.0.0.0，HTTP 方法 POST：计数 1

# 对中的请求应用速率限制 AWS WAF
<a name="waf-rule-statement-type-rate-based-request-limiting"></a>

本节介绍了速率限制行为如何适用于基于速率的规则。

 AWS WAF 用于对基于速率的规则的请求进行速率限制的标准与用于汇总该 AWS WAF 规则请求的标准相同。如果您为规则定义了范围缩小语句，则 AWS WAF 只会聚合 scope-down 语句匹配的请求、计数请求和速率限制请求。

要使基于速率的规则将其规则操作设置应用于特定 web 请求，匹配条件如下：
+ web 请求与规则的范围缩小语句（如果已定义）相匹配。
+ web 请求属于一个聚合实例，其请求数当前已超过规则的限制。

**如何 AWS WAF 应用规则操作**  
当基于速率的规则对请求应用速率限制时，它会应用该规则操作，如果您在操作规范中定义了任何自定义处理或标签，则该规则将应用这些操作。这种请求处理方式与匹配规则将其操作设置应用于匹配的 web 请求的方式相同。基于速率的规则仅对主动限制速率的请求应用标签或执行其他操作。

您可以使用除 Allow 以外的任何规则操作。有关规则操作的一般信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

以下列表描述了速率限制如何适用于各项操作。
+ **Block**— AWS WAF 阻止请求并应用您定义的任何自定义屏蔽行为。
+ **Count**— 对请求进行 AWS WAF 计数，应用您定义的所有自定义标头或标签，并继续对请求进行保护包 (Web ACL) 评估。

  此操作不会限制请求的速率。它只计算超出限制的请求。
+ **CAPTCHA 或 Challenge**： AWS WAF 会像 Block 或 Count 一样处理请求，具体取决于请求令牌的状态。

  此操作不会限制具有有效令牌的请求的速率。它会限制超过限制而且还缺少有效令牌的请求的速率。
  + 如果请求没有有效的未过期令牌，则该操作会阻止该请求并将验证码拼图或浏览器质询发送回客户端。

    如果最终用户或客户端浏览器成功响应，则客户端会收到有效的令牌并自动重新发送原始请求。如果聚合实例的速率限制仍然有效，则这个带有有效的未过期令牌的新请求将按照下一个要点中所述的操作进行应用。
  + 如果请求具有有效的未过期令牌，则 CAPTCHA 或 Challenge 操作会验证令牌并且不对请求采取任何操作，与 Count 操作类似。基于速率的规则在不采取任何终止操作的情况下将请求评估返回到保护包（web ACL），然后保护包（web ACL）继续对请求进行评估。

  有关更多信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。

**如果您仅对 IP 地址或转发 IP 地址进行速率限制**  
当将规则配置为仅对转发 IP 地址的 IP 地址进行速率限制时，您可以检索规则当前实施速率限制的 IP 地址的列表。如果使用范围缩小语句，则受速率限制的请求只是 IP 列表中与范围缩小语句匹配的请求。有关检索 IP 地址列表的信息，请参阅 [列出基于速率的规则实施速率限制的 IP 地址](listing-managed-ips.md)。

# 中基于费率的规则示例 AWS WAF
<a name="waf-rule-statement-type-rate-based-examples"></a>

本节介绍各种常见的基于速率的规则用例的配置示例。

每个示例都提供了用例的描述，然后在 JSON 列表中显示了自定义配置规则的解决方案。

**注意**  
这些示例中显示的 JSON 列表是在控制台中创建的，方法是配置规则，然后使用**规则 JSON 编辑器**对其进行编辑。

**Topics**
+ [对登录页面的请求进行速率限制](waf-rate-based-example-limit-login-page.md)
+ [对来自任何 IP 地址、用户代理对的登录页面的请求进行速率限制](waf-rate-based-example-limit-login-page-keys.md)
+ [对缺少特定标头的请求进行速率限制](waf-rate-based-example-limit-missing-header.md)
+ [对带有特定标签的请求进行速率限制](waf-rate-based-example-limit-labels.md)
+ [对具有指定标签命名空间的标签的请求进行速率限制](waf-rate-based-example-limit-label-aggregation.md)
+ [对请求进行速率限制 ASNs](waf-rate-based-example-limit-asn.md)

# 对登录页面的请求进行速率限制
<a name="waf-rate-based-example-limit-login-page"></a>

如需在不影响网站其余部分流量的前提下限制对网站登录页面的请求数量，您可以创建一个基于速率的规则，该规则使用范围缩小语句来匹配登录页面的请求，并将请求聚合设置为** 全部计数**。

基于速率的规则将计算单个聚合实例中登录页面的所有请求，并在请求超过限制时将规则操作应用于与范围缩小语句匹配的所有请求。

以下 JSON 列表显示了此规则配置的示例。全部计数聚合选项在 JSON 中作为设置 `CONSTANT` 列出。此示例匹配以开头 `/login` 的登录页面。

```
{
  "Name": "test-rbr",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test-rbr"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": 1000,
      "EvaluationWindowSec": 300,
      "AggregateKeyType": "CONSTANT",
      "ScopeDownStatement": {
        "ByteMatchStatement": {
          "FieldToMatch": {
            "UriPath": {}
          },
          "PositionalConstraint": "STARTS_WITH",
          "SearchString": "/login",
          "TextTransformations": [
            {
              "Type": "NONE",
              "Priority": 0
            }
          ]
        }
      }
    }
  }
}
```

# 对来自任何 IP 地址、用户代理对的登录页面的请求进行速率限制
<a name="waf-rate-based-example-limit-login-page-keys"></a>

如需限制超过限制的 IP 地址、用户代理对登录网站页面的请求数量，请将请求聚合设置为**自定义键**，并提供聚合条件。

以下 JSON 列表显示了此规则配置的示例。在此示例中，我们将每个 IP 地址（用户代理对）在任意五分钟内的请求限制设置为 100 个。

```
{
  "Name": "test-rbr",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test-rbr"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": 100,
      "EvaluationWindowSec": 300,
      "AggregateKeyType": "CUSTOM_KEYS",
      "CustomKeys": [
        {
          "Header": {
            "Name": "User-Agent",
            "TextTransformations": [
              {
                "Priority": 0,
                "Type": "NONE"
              }
            ]
          }
        },
        {
          "IP": {}
        }
      ],
      "ScopeDownStatement": {
        "ByteMatchStatement": {
          "FieldToMatch": {
            "UriPath": {}
          },
          "PositionalConstraint": "STARTS_WITH",
          "SearchString": "/login",
          "TextTransformations": [
            {
              "Type": "NONE",
              "Priority": 0
            }
          ]
        }
      }
    }
  }
}
```

# 对缺少特定标头的请求进行速率限制
<a name="waf-rate-based-example-limit-missing-header"></a>

要限制缺少特定标头的请求数量，可以将**全部计数**聚合选项与范围缩小语句一起使用。使用逻辑 `NOT` 语句配置范围缩小语句，该语句包含一条仅当标头存在且具有值时才返回 true 的语句。

以下 JSON 列表显示了此规则配置的示例。

```
{
  "Name": "test-rbr",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test-rbr"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": 1000,
      "AggregateKeyType": "CONSTANT",
      "EvaluationWindowSec": 300,
      "ScopeDownStatement": {
        "NotStatement": {
          "Statement": {
            "SizeConstraintStatement": {
              "FieldToMatch": {
                "SingleHeader": {
                  "Name": "user-agent"
                }
              },
              "ComparisonOperator": "GT",
              "Size": 0,
              "TextTransformations": [
                {
                  "Type": "NONE",
                  "Priority": 0
                }
              ]
            }
          }
        }
      }
    }
  }
}
```

# 对带有特定标签的请求进行速率限制
<a name="waf-rate-based-example-limit-labels"></a>

您可以将速率限制与任何为请求添加标签的规则或规则组结合使用，以限制各种类别的请求数量。为此，您需要按如下方式配置保护包（web ACL）：
+ 添加添加标签的规则或规则组，并对其进行配置，使其不会阻止或允许您想要限制速率的请求。如果您使用托管规则组，则可能需要将某些规则组规则操作覆盖为 Count 才能实施此行为。
+ 将基于速率的规则添加到您的保护包 (Web ACL) 中，其优先级设置要高于标签规则和规则组。 AWS WAF 按数字顺序评估规则，从最低顺序开始，因此基于速率的规则将在标签规则之后运行。在规则的范围缩小语句中结合使用标签匹配和标签聚合，从而在标签上配置速率限制。

以下示例使用 Amazon IP 信誉列表 AWS 托管规则组。规则组规则`AWSManagedIPDDoSList`检测并标记已知 IPs 正在积极参与 DDo S 活动的请求。规则的操作在规则组定义中配置为 Count。有关规则组的更多信息，请参阅 [Amazon IP 声誉列表托管规则组](aws-managed-rule-groups-ip-rep.md#aws-managed-rule-groups-ip-rep-amazon)。

以下保护包（web ACL）JSON 列表使用 IP 声誉规则组，后面是基于标签匹配速率的规则。基于速率的规则使用范围缩小语句来筛选已由规则组规则标记的请求。基于速率的规则语句按其 IP 地址对筛选后的请求进行聚合和速率限制。

```
{
  "Name": "test-web-acl",
  "Id": ... 
  "ARN": ...
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "",
  "Rules": [
    {
      "Name": "AWS-AWSManagedRulesAmazonIpReputationList",
      "Priority": 0,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesAmazonIpReputationList"
        }
      },
      "OverrideAction": {
        "None": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSManagedRulesAmazonIpReputationList"
      }
    },
    {
      "Name": "test-rbr",
      "Priority": 1,
      "Statement": {
        "RateBasedStatement": {
          "Limit": 100,
          "EvaluationWindowSec": 300,
          "AggregateKeyType": "IP",
          "ScopeDownStatement": {
            "LabelMatchStatement": {
              "Scope": "LABEL",
              "Key": "awswaf:managed:aws:amazon-ip-list:AWSManagedIPDDoSList"
            }
          }
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "test-rbr"
      }
    }
  ],
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test-web-acl"
  },
  "Capacity": 28,
  "ManagedByFirewallManager": false,
  "RetrofittedByFirewallManager": false,
  "LabelNamespace": "awswaf:0000000000:webacl:test-web-acl:"
}
```

# 对具有指定标签命名空间的标签的请求进行速率限制
<a name="waf-rate-based-example-limit-label-aggregation"></a>

**注意**  
机器人控制功能托管规则组中的通用级别规则为各种类别的机器人添加了标签，但它们仅阻止来自未经验证的机器人的请求。有关这些规则的信息，请参阅 [机器人控制功能规则列表](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-rules)。

如果您使用机器人控制功能托管规则组，则可以为来自各个已验证机器人的请求添加速率限制。为此，您需要添加一条基于速率的规则，该规则在机器人控制功能规则组之后运行，并按机器人名称标签聚合请求。您可以指定**标签命名空间**聚合键并将命名空间键设置为 `awswaf:managed:aws:bot-control:bot:name:`。每个具有指定命名空间的唯一标签都将定义一个聚合实例。例如，标签 `awswaf:managed:aws:bot-control:bot:name:axios` 和 `awswaf:managed:aws:bot-control:bot:name:curl` 分别定义一个聚合实例。

以下保护包（web ACL）JSON 列表显示了此配置。此示例中的规则将任何单个机器人聚合实例在两分钟内的请求限制为 1000 个。

```
{
  "Name": "test-web-acl",
  "Id": ... 
  "ARN": ...
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "",
  "Rules": [
    {
      "Name": "AWS-AWSManagedRulesBotControlRuleSet",
      "Priority": 0,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesBotControlRuleSet",
          "ManagedRuleGroupConfigs": [
            {
              "AWSManagedRulesBotControlRuleSet": {
                "InspectionLevel": "COMMON"
              }
            }
          ]
        }
      },
      "OverrideAction": {
        "None": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSManagedRulesBotControlRuleSet"
      }
    },
    {
      "Name": "test-rbr",
      "Priority": 1,
      "Statement": {
        "RateBasedStatement": {
          "Limit": 1000,
          "EvaluationWindowSec": 120,
          "AggregateKeyType": "CUSTOM_KEYS",
          "CustomKeys": [
            {
              "LabelNamespace": {
                "Namespace": "awswaf:managed:aws:bot-control:bot:name:"
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "test-rbr"
      }
    }
  ],
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "test-web-acl"
  },
  "Capacity": 82,
  "ManagedByFirewallManager": false,
  "RetrofittedByFirewallManager": false,
  "LabelNamespace": "awswaf:0000000000:webacl:test-web-acl:"
}
```

# 对请求进行速率限制 ASNs
<a name="waf-rate-based-example-limit-asn"></a>

要根据请求的 IP 地址限制来自特定自治系统编号 (ASNs) 的请求数量，请将请求聚合设置为*自定义密钥*并提供聚合标准。

以下 JSON 显示了从`X-Forwarded-For`标头中找到的转发 IP 地址 ASNs 派生的规则聚合示例。如果因为 IP 地址格式错误而 AWS WAF 无法派生 ASN，则回退行为将设置为。`MATCH`

```
{
    "Name": "test-rbr",
    "Priority": 0,
    "Statement": {
        "RateBasedStatement": {
            "AggregateKeyType": "CUSTOM_KEYS",
            "CustomKeys": [
                {
                    "ASN": {}
                },
                {
                    "ForwardedIP": {}
                }
            ],
            "EvaluationWindowSec": 300,
            "ForwardedIPConfig": {
                "FallbackBehavior": "MATCH",
                "HeaderName": "X-Forwarded-For"
            },
            "Limit": 2000
        }
    },
    "VisibilityConfig": {
        "CloudWatchMetricsEnabled": true,
        "MetricName": "test-rbr",
        "SampledRequestsEnabled": true
    }
}
```

# 列出基于速率的规则实施速率限制的 IP 地址
<a name="listing-managed-ips"></a>

本节介绍如何使用 CLI、API 或任何一种访问当前受基于速率的规则限制的 IP 地址列表。 SDKs

如果您的基于速率的规则仅聚合 IP 地址或转发的 IP 地址，则可以检索该规则当前限制速率的 IP 地址列表。 AWS WAF 将这些 IP 地址存储在规则的托管密钥列表中。

**注意**  
只有在仅聚合 IP 地址或仅聚合标头中的 IP 地址时，此选项才可用。如果您使用自定义键请求聚合，则即使您在自定义键中使用了其中一个 IP 地址规范，也无法检索速率受限的 IP 地址列表。

基于速率的规则将其规则操作应用于规则的托管键列表中与规则的范围缩小语句相匹配的请求。当规则没有范围缩小语句时，它会将操作应用于来自列表中 IP 地址的所有请求。默认情况下，规则操作为 Block，但它可以是除 Allow 之外的任何有效规则操作。使用单个基于速率的规则实例 AWS WAF 可以限制速率的最大 IP 地址数为 10,000。如果超过 10,000 个地址超过速率 AWS WAF 限制，则限制速率最高的地址。

您可以使用 CLI、API 或任何一种访问基于速率的规则的托管密钥列表。 SDKs本主题介绍如何使用 CLI 进行访问和 APIs。控制台目前不提供对列表的访问权限。

对于 AWS WAF API，命令为[GetRateBasedStatementManagedKeys](https://docs.aws.amazon.com/waf/latest/APIReference/API_GetRateBasedStatementManagedKeys.html)。

对于 AWS WAF CLI，命令是 [get-rate-based-statement-managed-key](https://docs.aws.amazon.com/cli/latest/reference/wafv2/get-rate-based-statement-managed-keys.html) s。

下面显示了检索 Ama CloudFront zon 发行版保护包 (Web ACL) 中使用的基于速率的规则的限速 IP 地址列表的语法。

```
aws wafv2 get-rate-based-statement-managed-keys --scope=CLOUDFRONT --region=us-east-1 --web-acl-name=WebACLName --web-acl-id=WebACLId --rule-name=RuleName
```

下面显示了区域应用程序、Amazon API Gateway REST API、应用程序负载均衡器、 AWS AppSync GraphQL API、Amazon Cognito 用户池 AWS Amplify、服务或 AWS 已验证访问 AWS App Runner 实例的语法。

```
aws wafv2 get-rate-based-statement-managed-keys --scope=REGIONAL --region=region --web-acl-name=WebACLName --web-acl-id=WebACLId --rule-name=RuleName
```

AWS WAF 监控 Web 请求并独立管理保护包 (Web ACL)、可选规则组和基于速率的规则的每个唯一组合的密钥。例如，如果在规则组内定义基于速率的规则，然后在保护包（web ACL）中使用该规则组，则 AWS WAF 会监视 web 请求并管理该保护包（web ACL）的键、规则组参考语句和基于速率的规则实例。如果您在第二个保护包（Web ACL）中使用相同的规则组，则会 AWS WAF 监控 Web 请求并管理第二次使用的密钥，完全独立于第一次使用。

对于您在规则组中定义的基于速率的规则，除了保护包（web ACL）名称和规则组内基于速率的规则的名称外，还需要在请求中提供规则组参考语句的名称。下面显示了区域应用程序的语法，其中基于速率的规则在规则组内定义，而规则组则在保护包（web ACL）中使用。

```
aws wafv2 get-rate-based-statement-managed-keys --scope=REGIONAL --region=region --web-acl-name=WebACLName --web-acl-id=WebACLId --rule-group-rule-name=RuleGroupRuleName --rule-name=RuleName
```

# 在中使用规则组规则语句 AWS WAF
<a name="waf-rule-statements-rule-group"></a>

**注意**  
规则组规则语句不可嵌套。

本节介绍可在保护包（web ACL）中使用的规则组规则语句。规则组保护包 (Web ACL) 容量单位 (WCUs) 由规则组所有者在创建时设置。有关的信息 WCUs，请参见[Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md)。


| 规则组语句 | 说明 | WCUs | 
| --- | --- | --- | 
|  [使用托管规则组语句](waf-rule-statement-type-managed-rule-group.md)  |  运行在指定托管规则组中定义的规则。 您可以通过添加范围缩小语句来缩小规则组评估的请求范围。 您不能将托管规则组语句嵌套在任何其他语句类型中。  |  由规则组定义，以及任何其他 WCUs 用于范围缩小语句的规则。  | 
| [使用规则组语句](waf-rule-statement-type-rule-group.md) | 运行在您管理的规则组中定义的规则。 您无法向自己的规则组引用语句添加范围缩小语句。 您不能将规则组语句嵌套在任何其他语句类型中。  | 在创建规则组时，您可以为其定义 WCU 限制。 | 

# 在中使用托管规则组语句 AWS WAF
<a name="waf-rule-statement-type-managed-rule-group"></a>

本节介绍了托管规则组规则语句的工作方式。

托管规则组规则语句会在保护包（web ACL）规则列表中添加对托管规则组的引用。您不会在控制台的规则语句下看到此选项，但是当您使用 web ACL 的 JSON 格式时，您添加的任何托管规则组都会以这种类型显示在保护包（web ACL）规则下。

托管规则组可以是 AWS 托管规则组（其中大多数对 AWS WAF 客户免费开放），也可以是 AWS Marketplace 托管规则组。当您将付费 AWS 托管规则组添加到保护包（Web ACL）时，您会自动订阅这些规则组。您可以通过订阅 AWS Marketplace 托管规则组 AWS Marketplace。有关更多信息，请参阅 [在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)。

将规则组添加到保护包（web ACL）时，您可以将规则组中规则的操作覆盖为 Count 或其他规则操作。有关更多信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。

您可以缩小使用规则组 AWS WAF 进行评估的请求的范围。为此，您需要在规则组语句中添加范围缩小语句。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。这可以帮助您管理规则组如何影响您的流量，还可以帮助您在使用规则组时控制与流量相关的成本。有关在 AWS WAF Bot Control 托管规则组中使用范围缩小语句的信息和示例，请参阅。[AWS WAF 机器人控制](waf-bot-control.md)

## 规则语句特征
<a name="managed-rule-group-rule-statement-characteristics"></a>

**不可嵌套**：您不能将此语句类型嵌套在其他语句中，也不能将其包含在规则组中。您可以将其直接包含在保护包（web ACL）中。

**（可选）范围缩小语句**：此规则类型采用可选的范围缩小语句，以缩小规则组评估的请求范围。有关更多信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

**WCUs**— 在创建时为规则组设置。

## 在何处查找规则语句
<a name="managed-rule-group-rule-statement-where-to-find"></a>
+ **控制台**：在创建保护包（web ACL）的过程中，在**添加规则和规则组**页面上，选择**添加托管规则组**，然后查找并选择要使用的规则组。
+ **API**：[ManagedRuleGroupStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_ManagedRuleGroupStatement.html)

# 在中使用规则组语句 AWS WAF
<a name="waf-rule-statement-type-rule-group"></a>

本节介绍了规则组规则语句的工作方式。

规则组规则语句将对保护包（web ACL）规则列表的引用添加到您管理的规则组中。您在控制台的规则语句下看不到这个选项，但是当您使用保护包（web ACL）的 JSON 格式时，您自己添加的任何规则组都会以这种类型显示在保护包（web ACL）规则下。有关如何使用您自己的规则组的信息，请参阅 [管理您自己的规则组](waf-user-created-rule-groups.md)。

将规则组添加到保护包（web ACL）时，您可以将规则组中规则的操作覆盖为 Count 或其他规则操作。有关更多信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。

## 规则语句特征
<a name="rule-group-rule-statement-characteristics"></a>

**不可嵌套**：您不能将此语句类型嵌套在其他语句中，也不能将其包含在规则组中。您可以将其直接包含在保护包（web ACL）中。

**WCUs**— 在创建时为规则组设置。

## 在何处查找规则语句
<a name="rule-group-rule-statement-where-to-find"></a>
+ **控制台**：在创建保护包（web ACL）的过程中，在**添加规则和规则组**页面上选择**添加我自己的规则和规则组**、**规则组**，然后添加要使用的规则组。
+ **API**：[RuleGroupReferenceStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_RuleGroupReferenceStatement.html)

# AWS WAF 规则组
<a name="waf-rule-groups"></a>

本节介绍了什么是规则组及其工作方式。

规则组是您添加到保护包（web ACL）的一组可重复使用的规则。有关保护包 (Web ACLs) 的更多信息，请参阅[在中配置保护 AWS WAF](web-acl.md)。

规则组主要分为以下类别：
+ 您自己的规则组，由您自己创建和维护 
+ 托 AWS 管规则团队为您创建和维护的托管规则组。
+  AWS Marketplace 卖家为您创建和维护的托管规则组。
+ 由其他服务（例如 AWS Firewall Manager 和 Shield Advanced）拥有和管理的规则组。

**规则组和保护包之间的区别 (Web ACLs)**  
规则组和保护包 (Web ACLs) 都包含规则，这两个地方的定义方式相同。规则组与保护包 (Web ACLs) 的不同之处在于：
+ 规则组不能包含规则组引用语句。
+ 通过向每个保护包 (Web ACL ACLs) 添加规则组参考语句，可以在多个保护包 (Web ACL) 中重复使用单个规则组。不得重复使用保护包（web ACL）。
+ 规则组没有默认操作。在保护包（web ACL）中，您可以为包含的每个规则或规则组设置默认操作。规则组或保护包（web ACL）中的每个规则都定义了一个操作。
+ 您不能直接将规则组与 AWS 资源相关联。要使用规则组保护资源，请在保护包（web ACL）中使用规则组。
+ 系统为每个保护包 (Web ACL) 定义的最大容量为 5,000 个保护包 (WCUsWeb ACL) 容量单位 ()。每个规则组的 WCU 设置必须在创建时设置。您可以使用此设置来计算使用规则组会给保护包（web ACL）增加多少额外容量需求。有关的更多信息 WCUs，请参阅[Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md)。

有关规则的信息，请参阅 [AWS WAF 规则](waf-rules.md)。

本部分提供有关创建和管理规则组的指导，介绍可供您使用的托管规则组，并提供托管规则组的使用指导。

**Topics**
+ [在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)
+ [管理您自己的规则组](waf-user-created-rule-groups.md)
+ [AWS Marketplace 规则组](marketplace-rule-groups.md)
+ [识别其他服务提供的规则组](waf-service-owned-rule-groups.md)

# 在中使用托管规则组 AWS WAF
<a name="waf-managed-rule-groups"></a>

本节介绍了什么是托管规则组及其工作方式。

托管规则组是 AWS Marketplace 卖家为您编写 AWS 和维护的预定义 ready-to-use规则的集合。基本 AWS WAF 定价适用于您对任何托管规则组的使用。有关 AWS WAF 定价信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。
+ 除基本 AWS WAF 费用外，* AWS WAF 机器人控制、 AWS WAF 欺诈控制账户接 AWS 管预防 (ATP) 和 AWS WAF 欺诈控制账户创建防作弊 (ACFP) 的托管规则组*需支付额外费用。有关定价的详细信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。
+ *所有其他 AWS 托管规则组*均可供 AWS WAF 客户使用，无需支付额外费用。
+ *AWS Marketplace 规则组*可通过订阅获得 AWS Marketplace。这些规则组中的每一个都由 AWS Marketplace 卖家拥有和管理。有关使用 AWS Marketplace 规则组的定价信息，请联系 AWS Marketplace 卖家。

一些托管规则组旨在帮助保护特定类型的 Web 应用程序WordPress，例如 Joomla 或 PHP。其他托管规则组可提供广泛的保护功能以应对已知威胁或常见的 web 应用程序漏洞，包括 [OWASP 十大漏洞](https://owasp.org/www-project-top-ten/)中列出的一些漏洞。如果您需要符合监管合规性（如 PCI 或 HIPAA），您可以使用托管规则组来满足 web 应用程序防火墙要求。

**自动更新**  
随时了解不断变化的威胁情形会非常耗时且成本高昂。当您实施并使用 AWS WAF时，托管规则组可以帮助您节省时间。当出现新的漏洞 AWS 和威胁时，许多 AWS Marketplace 卖家会自动更新托管规则组并提供新版本的规则组。

在某些情况下， AWS 由于它参与了许多私人披露社区，因此会在公开披露之前收到有关新漏洞的通知。在这种情况下，即使在新威胁广为人知之前， AWS 也可以更新 AWS 托管规则组并为您部署这些规则组。

**限制访问托管规则组中的规则**  
每个托管规则组都提供了旨在防护的攻击和漏洞类型的全面描述。为了保护规则组提供程序的知识产权，您将无法查看规则组中的单个规则的所有详细信息。此限制还有助于避免恶意用户设计专门避开已发布规则的威胁。

**Topics**
+ [在中使用版本化托管规则组 AWS WAF](waf-managed-rule-groups-versioning.md)
+ [使用托管规则组](waf-using-managed-rule-groups.md)
+ [AWS 的托管规则 AWS WAF](aws-managed-rule-groups.md)

# 在中使用版本化托管规则组 AWS WAF
<a name="waf-managed-rule-groups-versioning"></a>

本节介绍了如何处理托管规则组的版本控制。

许多托管规则组提供程序使用版本控制来更新规则组的选项和功能。通常，托管规则组的特定版本是静态的。有时，提供程序可能需要更新其托管规则组的部分或全部静态版本，以应对新出现的安全威胁。

在保护包（web ACL）中使用受版本控制的托管规则组时，可以选择默认版本，让提供程序来管理所使用的静态版本，也可以选择特定的静态版本。

**找不到您想要的版本？**  
如果您在规则组的版本列表中看不到任何版本，则该版本可能已计划到期或已经过期。在某个版本计划到期后， AWS WAF 不再允许您为规则组选择该版本。

**AWS 托管规则规则组的 SNS 通知**  
除 IP 信誉规则组外， AWS 托管规则组都提供版本控制和 SNS 更新通知。提供通知的 AWS 托管规则组都使用相同的 SNS 主题 Amazon 资源名称 (ARN)。要注册 SNS 通知，请参阅 [收到有关新版本和更新的通知](waf-using-managed-rule-groups-sns-topic.md)。

**Topics**
+ [托管规则组的版本生命周期](waf-managed-rule-groups-versioning-lifecycle.md)
+ [托管规则组的版本过期](waf-managed-rule-groups-versioning-expiration.md)
+ [处理托管规则组版本的最佳实践](waf-managed-rule-groups-best-practice.md)

# 托管规则组的版本生命周期
<a name="waf-managed-rule-groups-versioning-lifecycle"></a>

提供程序会处理托管规则组静态版本的以下生命周期阶段：
+ **发布和更新**：托管规则组提供程序通过向 Amazon Simple Notiﬁcation Service (Amazon SNS)主题发出通知，宣布其托管规则组即将推出以及其托管规则组的新静态版本。提供程序还可以使用该主题来传达有关其规则组的其他重要信息，例如紧急更新。

  您可以订阅规则组的主题并配置接收通知的方式。有关更多信息，请参阅 [收到有关新版本和更新的通知](waf-using-managed-rule-groups-sns-topic.md)。
+ **过期计划**：托管规则组提供程序制定旧版本规则组的过期计划。已计划过期的版本将无法添加到您的保护包（web ACL）规则中。在某个版本计划到期后，在 Amazon 中使用倒计时指标 AWS WAF 跟踪到期时间 CloudWatch。
+ **版本过期**-如果您的保护包 (Web ACL) 配置为使用托管规则组的过期版本，则在保护包 (Web ACL) 评估期间，将 AWS WAF 使用规则组的默认版本。此外，还会 AWS WAF 阻止对保护包 (Web ACL) 的任何更新，这些更新既不会移除规则组，也不会将其版本更改为未过期的规则。

如果您使用 AWS Marketplace 托管规则组，请向提供商询问有关版本生命周期的任何其他信息。

# 托管规则组的版本过期
<a name="waf-managed-rule-groups-versioning-expiration"></a>

 本节介绍了版本过期如何适用于受版本控制的托管规则组。

如果您使用规则组的特定版本，请确保不要继续使用已过期的版本。您可以通过规则组的 SNS 通知和 Amazon CloudWatch 指标来监控版本过期。

如果您在保护包（Web ACL）中使用的版本已过期，则会 AWS WAF 阻止对保护包（Web ACL）的任何更新，其中不包括将规则组移至未过期的版本。您可以将规则组更新到可用版本或将其从保护包（web ACL）中移除。

托管规则组的过期处理取决于规则组提供程序。对于 AWS 托管规则的规则组，过期版本会自动更改为规则组的默认版本。对于 AWS Marketplace 规则组，请向提供者询问他们如何处理过期。

当提供程序创建新版本的规则组时，它会设置该版本的预测生命周期。虽然该版本未计划到期，但 Amazon CloudWatch 指标值将设置为预测的生命周期设置，在中 CloudWatch，您将看到该指标的固定值。在提供程序计划指标到期后，指标值每天都会递减，直到到期当天达到 0。有关监控到期的信息，请参阅 [追踪版本过期](waf-using-managed-rule-groups-expiration.md)。

# 处理托管规则组版本的最佳实践
<a name="waf-managed-rule-groups-best-practice"></a>

使用版本控制托管规则组时，请遵循这项处理版本控制的最佳实践指南。

在保护包（web ACL）中使用托管规则组时，可以选择该规则组的特定静态版本，也可以选择默认版本：
+ **默认版本**- AWS WAF 始终将默认版本设置为提供商当前推荐的静态版本。当提供程序更新其推荐的静态版本时， AWS WAF 会自动更新保护包（web ACL）中规则组的默认版本设置。

  当您使用托管规则组的默认版本时，最佳做法是执行以下操作：
  + **订阅通知**：订阅规则组变更通知并密切关注这些变更。大多数提供程序会发送有关新静态版本和默认版本变更的高级通知。它们允许您在将默认版本 AWS 切换到新静态版本之前检查其效果。有关更多信息，请参阅 [收到有关新版本和更新的通知](waf-using-managed-rule-groups-sns-topic.md)。
  + **查看静态版本设置的影响，并在将默认版本设置为静态版本之前根据需要进行调整**：在将默认版本设置为新的静态版本之前，请查看静态版本对监控和管理 web 请求的影响。新的静态版本可能有新的规则需要审查。如果您需要修改规则组的使用方式，请查找误报或其他意外行为。例如，您可以将规则设置为计数，以明确如何处理新行为，同时阻止它们阻塞流量。有关更多信息，请参阅 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。
+ **静态版本**：如果您选择使用静态版本，则在准备采用新版本的规则组时，必须手动更新版本设置。

  当您使用托管规则组的静态版本时，最佳做法是执行以下操作：
  + **始终保持最新版本**：您的托管规则组应尽可能接近最新版本。发布新版本时，请对其进行测试，根据需要调整设置，并及时实施新版本。有关测试的信息，请参阅 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。
  + **订阅通知**：订阅规则组变更通知，以了解提供程序何时发布新的静态版本。大多数提供程序会提前通知版本更改。此外，为了修复安全漏洞或出于其他紧急原因，提供程序有时可能需要更新您正在使用的静态版本。如果您订阅了提供程序通知，您便能够及时获知最新情况。有关更多信息，请参阅 [收到有关新版本和更新的通知](waf-using-managed-rule-groups-sns-topic.md)。
  + **避免版本过期**：避免让静态版本在您使用期间过期。提供程序对过期版本的处理可能有所不同，可能包括强制升级到可用版本或其他可能产生意想不到的后果的更改。跟踪到 AWS WAF 期指标并设置警报，让您在足够的时间内成功升级到支持的版本。有关更多信息，请参阅 [追踪版本过期](waf-using-managed-rule-groups-expiration.md)。



# 使用托管规则组
<a name="waf-using-managed-rule-groups"></a>

本节提供有关访问和管理托管规则组的指导。

将托管规则组添加到保护包（web ACL）时，您可以根据您自己的规则组选择相同的配置选项，也可以选择其他设置。

在保护包 (Web ACLs) 中添加和编辑规则的过程中，您可以通过控制台访问托管规则组信息。通过 APIs 和命令行界面 (CLI)，您可以直接请求托管规则组信息。

在保护包（web ACL）中使用托管规则组时，可以编辑以下设置：
+ **版本**：仅当规则组已进行版本控制时才可用。有关更多信息，请参阅 [在中使用版本化托管规则组 AWS WAF](waf-managed-rule-groups-versioning.md)。
+ **覆盖规则操作**：您可以将规则组中规则的操作覆盖为任何操作。将其设置为 Count 有助于在使用规则组管理 web 请求之前对其进行测试。有关更多信息，请参阅 [规则组规则操作的覆盖](web-acl-rule-group-override-options.md#web-acl-rule-group-override-options-rules)。
+ **缩小范围语句**：您可以添加范围缩小语句，以筛选出您不想使用规则组进行评估的 web 请求。有关更多信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。
+ **覆盖规则组操作**：您可以覆盖规则组评估所产生的操作，并将其设置为“仅限 Count”。该选项不是常用选项。它不会改变 AWS WAF 评估规则组中规则的方式。有关更多信息，请参阅 [规则组返回操作覆盖为 Count](web-acl-rule-group-override-options.md#web-acl-rule-group-override-options-rule-group)。

**编辑保护包（web ACL）中的托管规则组设置**
+ **控制台** 
  + （可选）将托管规则组添加到保护包（web ACL）时，可以选择**编辑**来查看和编辑设置。
  + （选项）将托管规则组添加到保护包（Web ACL）后，从**保护包（网页 ACLs）**页面中选择您刚刚创建的保护包（Web ACL）。这会使您转至保护包（web ACL）编辑页面。
    + 选择 **规则**。
    + 选择规则组，然后选择**编辑**以查看和编辑设置。
+ **APIs 和 CLI**-在控制台之外，您可以在创建和更新保护包（Web ACL）时管理托管规则组设置。

# 检索托管规则组列表
<a name="waf-using-managed-rule-groups-list"></a>

您可以检索可在保护包 (Web ACLs) 中使用的托管规则组列表。列表包含以下内容：
+ 所有 AWS 托管规则规则组。
+ 您已订阅的 AWS Marketplace 规则组。
**注意**  
有关订阅 AWS Marketplace 规则组的信息，请参阅[AWS Marketplace 规则组](marketplace-rule-groups.md)。

检索托管规则组列表时，返回的列表取决于您使用的接口：
+ **控制台**-通过控制台，您可以查看所有托管规则组，包括您尚未订阅的 AWS Marketplace 规则组。对于您尚未订阅的内容，该界面提供了可供您订阅的链接。
+ **APIs 和 CLI** — 在控制台之外，您的请求仅返回可供您使用的规则组。

**检索托管规则组列表**
+ **控制台**：在创建 web ACL 的过程中，在**添加规则和规则组**页面上，选择**添加托管规则组**。此时将在顶层列出提供程序名称。展开每个提供程序列表以查看托管规则组的列表。对于受版本控制规则组，此级别显示的信息是默认版本的信息。当您将托管规则组添加到保护包（web ACL）时，控制台会根据命名方案 `<Vendor Name>-<Managed Rule Group Name>` 列出规则组。
+ **API**：
  +  `ListAvailableManagedRuleGroups`
+ **CLI**：
  + `aws wafv2 list-available-managed-rule-groups --scope=<CLOUDFRONT|REGIONAL>`

# 检索托管规则组中的规则
<a name="waf-using-managed-rule-groups-rules"></a>

您可以检索托管规则组中的规则列表。API 和 CLI 调用会返回规则规范，您可以在 JSON 模型中或通过这些规则进行引用 AWS CloudFormation。

**检索托管规则组中的规则列表**
+ **控制台** 
  + （可选）将托管规则组添加到保护包（web ACL）时，可以选择**编辑**来查看规则。
  + （选项）将托管规则组添加到保护包（Web ACL）后，从**保护包（网页 ACLs）**页面中选择您刚刚创建的保护包（Web ACL）。这会使您转至保护包（web ACL）编辑页面。
    + 选择 **规则**。
    + 选择要查看其规则列表的规则组，然后选择**编辑**。 AWS WAF 显示了规则组中的规则列表。
+ **API**：`DescribeManagedRuleGroup`
+ **CLI**：`aws wafv2 describe-managed-rule-group --scope=<CLOUDFRONT|REGIONAL> --vendor-name <vendor> --name <managedrule_name>`

# 检索托管规则组的可用版本
<a name="waf-using-managed-rule-groups-versions"></a>

托管规则组的可用版本是尚未计划到期的版本。该列表显示哪个版本是规则组的当前默认版本。

**检索托管规则组的可用版本列表**
+ **控制台** 
  + （可选）将托管规则组添加到保护包（web ACL）时，选择**编辑**以查看该规则组的信息。展开**版本**下拉列表以查看可用版本列表。
  + （可选）将托管规则组添加到保护包（web ACL）后，在保护包（web ACL）上选择**编辑**，然后选择并编辑该规则组规则。展开**版本**下拉列表以查看可用版本列表。
+ **API**：
  +  `ListAvailableManagedRuleGroupVersions`
+ **CLI**：
  +  `aws wafv2 list-available-managed-rule-group-versions --scope=<CLOUDFRONT|REGIONAL> --vendor-name <vendor> --name <managedrule_name>`

# 通过控制台向保护包（web ACL）添加托管规则组
<a name="waf-using-managed-rule-group"></a>

本节介绍如何通过控制台向保护包（web ACL）添加托管规则组。本指南适用于所有 AWS 托管规则规则组以及您订阅的 AWS Marketplace 规则组。

**生产流量风险**  
在保护包（web ACL）中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**通过控制台向保护包（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 ACLs)** 页面的保护包 (Web ACLs) 列表中，选择要向其添加规则组的保护包。然后，您将进入单个保护包（web ACL）的页面。

1. 在保护包（web ACL）页面中，选择**规则**选项卡。

1. 在**规则**窗格中，选择**添加规则**，然后选择**添加托管规则组**。

1. 在**添加托管规则组**页面中，展开规则组供应商的选择范围，以查看可用规则组列表。

1. 对于每个要添加的规则组，请选择**添加到保护包（web ACL）**。如果要更改规则组的保护包（web ACL）配置，请选择**编辑**，进行更改，然后选择**保存规则**。有关这些选项的信息，请在 [在中使用版本化托管规则组 AWS WAF](waf-managed-rule-groups-versioning.md) 中参阅版本控制指南，并在 [在中使用托管规则组语句 AWS WAF](waf-rule-statement-type-managed-rule-group.md) 中参阅在保护包（web ACL）中使用托管规则组的指南。

1. 在**添加托管规则组**页面的底部，选择**添加规则**。

1. 在**设置规则优先级**页面中，根据需要调整规则的运行顺序，然后选择**保存**。有关更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

在保护包（web ACL）页面中，您添加的托管规则组列在**规则**选项卡下。

在将 AWS WAF 保护措施用于生产流量之前，请先对其进行测试和调整。有关信息，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

# 收到有关托管规则组新版本和更新的通知
<a name="waf-using-managed-rule-groups-sns-topic"></a>

本节介绍了如何接收有关新版本和更新的 Amazon SNS 通知。

托管规则组提供程序使用 SNS 通知来宣布规则组的更改，例如即将推出的新版本和紧急安全更新。

**如何订阅 SNS 通知**  
要订阅规则组的通知，您需要在美国东部（弗吉尼亚州北部）区域 us-east-1 为规则组的 Amazon SNS 主题 ARN 创建 Amazon SNS 订阅。

有关如何订阅的信息，请参阅 [Amazon Simple Notification Service 开发人员指南](https://docs.aws.amazon.com/sns/latest/dg/)。

**注意**  
仅在 us-east-1 区域创建 SNS 主题订阅。

版本控制的 AWS 托管规则组都使用相同的 SNS 主题 Amazon 资源名称 (ARN)。有关 AWS 托管规则组通知的更多信息，请参阅[部署通知](waf-managed-rule-groups-deployments-notifications.md)。

**从哪里找到托管规则组的 Amazon SNS 主题 ARN**  
AWS 托管规则组使用单个 SNS 主题 ARN，因此您可以从其中一个规则组中检索主题 ARN 并订阅该主题以获取所有提供 SNS 通知的 AWS 托管规则组的通知。
+ **控制台** 
  + （可选）将托管规则组添加到保护包（web ACL）时，选择**编辑**以查看规则组的信息，其中包括规则组的 Amazon SNS 主题 ARN。
  + （可选）将托管规则组添加到保护包（web ACL）后，在保护包（web ACL）上选择**编辑**，然后选择并编辑规则组规则，以查看规则组的 Amazon SNS 主题 ARN。
+ **API**：`DescribeManagedRuleGroup`
+ **CLI**：`aws wafv2 describe-managed-rule-group --scope=<CLOUDFRONT|REGIONAL> --vendor-name <vendor> --name <managedrule_name>`

有关 Amazon SNS 通知格式以及如何筛选收到的通知的一般信息，请参阅《Amazon Simple Notification Service 开发人员指南》中的[解析消息格式](https://docs.aws.amazon.com/sns/latest/dg/sns-message-and-json-formats.html)和 [Amazon SNS 订阅筛选策略](https://docs.aws.amazon.com/sns/latest/dg/sns-subscription-filter-policies.html)。

# 追踪规则组的版本过期时间
<a name="waf-using-managed-rule-groups-expiration"></a>

本节介绍如何通过 Amazon 监控托管规则组的到期日程安排 CloudWatch。

如果您使用规则组的特定版本，请确保不要继续使用已过期的版本。

**提示**  
注册接收托管规则组的 Amazon SNS 通知，并及时了解托管规则组的最新版本。您将受益于规则组 up-to-date提供的最多保护，并在到期之前保持领先地位。有关信息，请参阅[收到有关新版本和更新的通知](waf-using-managed-rule-groups-sns-topic.md)。

**通过 Amazon 监控托管规则组的到期日程安排 CloudWatch**

1. 在中 CloudWatch，找到您的托管规则组 AWS WAF 的到期指标。这些指标具有以下指标名称和维度：
   + 指标名称：DaysToExpiry
   + 指标维度：Region、ManagedRuleGroup、Vendor 和 Version

   如果保护包（web ACL）中有一个用于评估流量的托管规则组，则您将获得相应的指标。该指标不适用于未使用的规则组。

1. 对您感兴趣的指标设置警报，以便及时获得切换到新版规则组的通知。

有关使用亚马逊 CloudWatch 指标和配置警报的信息，请参阅[亚马逊 CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)。

# JSON 和 YAML 中的托管规则组配置示例
<a name="waf-using-managed-rule-groups-json-yaml"></a>

本节提供了托管规则组配置示例。

API 和 CLI 调用会返回托管规则组中所有规则的列表，您可以在 JSON 模型中或通过这些规则进行引用 AWS CloudFormation。

**JSON**  
您可以使用 JSON 在规则语句中引用和修改托管规则组。下表显示了 JSON 格式的 AWS 托管规则组。`AWSManagedRulesCommonRuleSet`在 RuleActionOverrides 规范列出的规则中，其操作已被覆盖为 Count。

```
{
    "Name": "AWS-AWSManagedRulesCommonRuleSet",
    "Priority": 0,
    "Statement": {
      "ManagedRuleGroupStatement": {
        "VendorName": "AWS",
        "Name": "AWSManagedRulesCommonRuleSet",
        "RuleActionOverrides": [                                                                                                                                            
          {                                                                                                                                                                
            "ActionToUse": {                                                                                                                                              
              "Count": {}                                                                                                                                                
            },                                                                                                                                                            
            "Name": "NoUserAgent_HEADER"                                                                                                                                 
          }                                                                                                                                                                
        ],
        "ExcludedRules": []
      }
    },
    "OverrideAction": {
      "None": {}
    },
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "AWS-AWSManagedRulesCommonRuleSet"
    }
}
```

**YAML**  
您可以使用 CloudFormation YAML 模板在规则语句中引用和修改托管规则组。下表显示了 CloudFormation 模板中的 “ AWS 托管规则” 规则组。`AWSManagedRulesCommonRuleSet`在 RuleActionOverrides 规范列出的规则中，其操作已被覆盖为 Count。

```
Name: AWS-AWSManagedRulesCommonRuleSet
Priority: 0
Statement:
  ManagedRuleGroupStatement:
    VendorName: AWS
    Name: AWSManagedRulesCommonRuleSet
    RuleActionOverrides:
    - ActionToUse:
        Count: {}
      Name: NoUserAgent_HEADER
    ExcludedRules: []
OverrideAction:
  None: {}
VisibilityConfig:
  SampledRequestsEnabled: true
  CloudWatchMetricsEnabled: true
  MetricName: AWS-AWSManagedRulesCommonRuleSet
```

# AWS 的托管规则 AWS WAF
<a name="aws-managed-rule-groups"></a>

本节说明了 AWS 托管规则的 AWS WAF 用途。

AWS 的托管规则 AWS WAF 是一项托管服务，可针对应用程序漏洞或其他有害流量提供保护。您可以选择从 AWS 托管规则中为每个 Web ACL 选择一个或多个规则组，最高不超过最大保护包 (Web ACL) 容量单位 (WCU) 限制。

**减少误报并测试规则组的更改**  
在生产环境中使用任何托管规则组之前，请根据 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md) 中的指导在非生产环境中对其进行测试。在向保护包（web ACL）添加规则组以测试规则组的新版本时，以及在规则组无法按需要处理 web 流量时，请遵循测试和调整指南。

**共同分担安全责任**  
AWS 托管规则旨在保护您免受常见 Web 威胁的侵害。根据文档使用 AWS 托管规则组时，可以为您的应用程序增加另一层安全保护。但是， AWS 托管规则规则组并不是用来取代您的安全职责，后者由您选择的 AWS 资源决定。请参阅[分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，确保您的资源 AWS 得到适当保护。

**重要**  
AWS 托管规则旨在保护您免受常见 Web 威胁的侵害。根据文档使用 AWS 托管规则组时，可以为您的应用程序增加另一层安全保护。但是， AWS 托管规则规则组并不是用来取代您的安全职责，后者由您选择的 AWS 资源决定。请参阅[分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，确保您的资源 AWS 得到适当保护。

# AWS 托管规则规则组列表
<a name="aws-managed-rule-groups-list"></a>

本节提供了可用的 AWS 托管规则规则组列表。

本节介绍 AWS 托管规则组的最新版本。当您将托管规则组添加到保护包（web ACL）时，您可以在控制台上查看这些规则组。通过 API，您可以通过调`ListAvailableManagedRuleGroups`用来检索此列表以及您订阅的 AWS Marketplace 规则组。

**注意**  
有关检索 AWS 托管规则组版本的信息，请参阅[检索托管规则组的可用版本](waf-using-managed-rule-groups-versions.md)。

所有 AWS 托管规则组都支持标签，本节中的规则列表包括标签规范。您可以通过调用 `DescribeManagedRuleGroup` 从 API 检索托管规则组的标签。标签列在响应的 AvailableLabels 属性中。有关标签的信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

在将 AWS WAF 保护措施用于生产流量之前，请先对其进行测试和调整。有关信息，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**Contents**
+ [基准规则组](aws-managed-rule-groups-baseline.md)
  + [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs)
  + [管理员保护托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-admin)
  + [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)
+ [使用案例特定规则组](aws-managed-rule-groups-use-case.md)
  + [SQL 数据库托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-sql-db)
  + [Linux 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-linux-os)
  + [POSIX 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-posix-os)
  + [Windows 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-windows-os)
  + [PHP 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-php-app)
  + [WordPress 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-wordpress-app)
+ [IP 声誉规则组](aws-managed-rule-groups-ip-rep.md)
  + [Amazon IP 声誉列表托管规则组](aws-managed-rule-groups-ip-rep.md#aws-managed-rule-groups-ip-rep-amazon)
  + [匿名 IP 列表托管规则组](aws-managed-rule-groups-ip-rep.md#aws-managed-rule-groups-ip-rep-anonymous)
+ [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)
  + [使用此规则组的注意事项](aws-managed-rule-groups-acfp.md#aws-managed-rule-groups-acfp-using)
  + [此规则组添加的标签](aws-managed-rule-groups-acfp.md#aws-managed-rule-groups-acfp-labels)
    + [令牌标签](aws-managed-rule-groups-acfp.md#aws-managed-rule-groups-acfp-labels-token)
    + [ACFP 标签](aws-managed-rule-groups-acfp.md#aws-managed-rule-groups-acfp-labels-rg)
  + [账户创建欺诈预防规则列表](aws-managed-rule-groups-acfp.md#aws-managed-rule-groups-acfp-rules)
+ [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)
  + [使用此规则组的注意事项](aws-managed-rule-groups-atp.md#aws-managed-rule-groups-atp-using)
  + [此规则组添加的标签](aws-managed-rule-groups-atp.md#aws-managed-rule-groups-atp-labels)
    + [令牌标签](aws-managed-rule-groups-atp.md#aws-managed-rule-groups-atp-labels-token)
    + [ATP 标签](aws-managed-rule-groups-atp.md#aws-managed-rule-groups-atp-labels-rg)
  + [账户盗用防护规则列表](aws-managed-rule-groups-atp.md#aws-managed-rule-groups-atp-rules)
+ [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)
  + [保护级别](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-prot-levels)
  + [使用此规则组的注意事项](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-using)
  + [此规则组添加的标签](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-labels)
    + [令牌标签](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-labels-token)
    + [机器人控制功能标签](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-labels-rg)
  + [机器人控制功能规则列表](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-rules)
+ [AWS WAF 分布式拒绝服务 (DDoS) 防护规则组](aws-managed-rule-groups-anti-ddos.md)
  + [使用此规则组的注意事项](aws-managed-rule-groups-anti-ddos.md#aws-managed-rule-groups-anti-ddos-using)
  + [此规则组添加的标签](aws-managed-rule-groups-anti-ddos.md#aws-managed-rule-groups-anti-ddos-labels)
    + [令牌标签](aws-managed-rule-groups-anti-ddos.md#aws-managed-rule-groups-anti-ddos-labels-token)
    + [反 DDo S 标签](aws-managed-rule-groups-anti-ddos.md#aws-managed-rule-groups-anti-ddos-labels-rg)
  + [反 DDo S 规则清单](aws-managed-rule-groups-anti-ddos.md#aws-managed-rule-groups-anti-ddos-rules)

# 基准规则组
<a name="aws-managed-rule-groups-baseline"></a>

基准托管规则组可针对多种常见威胁提供一般保护。请选择以下一个或多个规则组以便为您的资源建立基准保护。

## 核心规则集（CRS）托管规则组
<a name="aws-managed-rule-groups-baseline-crs"></a>

VendorName:`AWS`，名称：`AWSManagedRulesCommonRuleSet`，WCU：700

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

核心规则集 (CRS) 规则组包含通常适用于 Web 应用程序的规则。该规则组有助于防止利用各种漏洞，包括 OWASP 出版物（如 [OWASP Top 10](https://owasp.org/www-project-top-ten/)）中描述的一些高风险和经常发生的漏洞。考虑将此规则组用于任何 AWS WAF 用例。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| NoUserAgent\$1HEADER |  检查是否存在缺少 HTTP `User-Agent` 标头的请求。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:NoUserAgent_Header`  | 
| UserAgent\$1BadBots\$1HEADER |  检查是否存在表明请求是恶意机器人的常见 `User-Agent` 标头值。示例模式包括 `nessus` 和 `nmap`。有关机器人管理的信息，另请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:BadBots_Header`  | 
| SizeRestrictions\$1QUERYSTRING |  检查是否存在超过 2048 字节的 URI 查询字符串。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:SizeRestrictions_QueryString`  | 
| SizeRestrictions\$1Cookie\$1HEADER |  检查是否存在超过 10,240 字节的 Cookie 标头。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:SizeRestrictions_Cookie_Header`  | 
| SizeRestrictions\$1BODY |  检查是否存在超过 8 KB（8192 字节）的请求正文。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:SizeRestrictions_Body`  | 
| SizeRestrictions\$1URIPATH |  检查 URI 路径是否超过 1024 字节。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:SizeRestrictions_URIPath`  | 
| EC2MetaDataSSRF\$1BODY |  检查是否存在恶意方试图从请求正文中泄漏 Amazon EC2 元数据。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:EC2MetaDataSSRF_Body`  | 
| EC2MetaDataSSRF\$1COOKIE |  检查是否存在恶意方试图从请求 Cookie 中泄漏 Amazon EC2 元数据。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:EC2MetaDataSSRF_Cookie`  | 
| EC2MetaDataSSRF\$1URIPATH |  检查是否存在恶意方试图从请求 URI 路径中泄漏 Amazon EC2 元数据。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:EC2MetaDataSSRF_URIPath`  | 
| EC2MetaDataSSRF\$1QUERYARGUMENTS |  检查是否存在恶意方试图从请求查询参数中泄漏 Amazon EC2 元数据。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:EC2MetaDataSSRF_QueryArguments`  | 
| GenericLFI\$1QUERYARGUMENTS |  检查查询参数中是否存在本地文件包含（LFI）攻击。示例包括使用类似于 `../../` 的技术尝试遍历路径。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:GenericLFI_QueryArguments`  | 
| GenericLFI\$1URIPATH |  检查 URI 路径中是否存在本地文件包含（LFI）攻击。示例包括使用类似于 `../../` 的技术尝试遍历路径。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:GenericLFI_URIPath`  | 
| GenericLFI\$1BODY |  检查请求正文中是否存在本地文件包含（LFI）攻击。示例包括使用类似于 `../../` 的技术尝试遍历路径。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:GenericLFI_Body`  | 
| RestrictedExtensions\$1URIPATH |  检查是否存在 URI 路径中包含无法安全读取或运行的系统文件扩展名的请求。示例模式包括类似于 `.log` 和 `.ini` 的扩展名。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:RestrictedExtensions_URIPath`  | 
| RestrictedExtensions\$1QUERYARGUMENTS |  检查是否存在查询参数中包含无法安全读取或运行的系统文件扩展名的请求。示例模式包括类似于 `.log` 和 `.ini` 的扩展名。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:RestrictedExtensions_QueryArguments`  | 
| GenericRFI\$1QUERYARGUMENTS |  检查所有查询参数的值，以防有人试图通过嵌入包含地址的 Web 应用程序中利用 RFI（远程文件包 URLs 含 IPv4）。示例包括漏洞利用尝试中带有 IPv4 主机标头的`http://``file://`、、、、和。`https://` `ftp://` `ftps://` 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:GenericRFI_QueryArguments`  | 
| GenericRFI\$1BODY |  检查请求正文中是否有人试图通过嵌入包含地址来利用 Web 应用程序中的 RFI（远程文件包 URLs 含 IPv4 ）。示例包括漏洞利用尝试中带有 IPv4 主机标头的`http://``file://`、、、、和。`https://` `ftp://` `ftps://` 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:GenericRFI_Body`  | 
| GenericRFI\$1URIPATH |  检查 URI 路径中是否有人试图通过嵌入包含地址来利用 Web 应用程序中的 RFI（远程文件包 URLs 含 IPv4 ）。示例包括漏洞利用尝试中带有 IPv4 主机标头的`http://``file://`、、、、和。`https://` `ftp://` `ftps://` 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:GenericRFI_URIPath`  | 
| CrossSiteScripting\$1COOKIE |  使用内置功能检查 Cookie 标头的值以了解常见的跨站脚本 (XSS) 模式。 AWS WAF [跨站点脚本攻击规则语句](waf-rule-statement-type-xss-match.md)示例模式包括类似于 `<script>alert("hello")</script>` 的脚本。  该规则组的 2.0 版本未填充 AWS WAF 日志中的规则匹配详细信息。  规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:CrossSiteScripting_Cookie`  | 
| CrossSiteScripting\$1QUERYARGUMENTS |  使用内置检查查询参数的值，了解常见的跨站点脚本 (XSS) 模式。 AWS WAF [跨站点脚本攻击规则语句](waf-rule-statement-type-xss-match.md)示例模式包括类似于 `<script>alert("hello")</script>` 的脚本。  该规则组的 2.0 版本未填充 AWS WAF 日志中的规则匹配详细信息。  规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:CrossSiteScripting_QueryArguments`  | 
| CrossSiteScripting\$1BODY |  使用内置检查请求正文中常见的跨站脚本 (XSS) 模式。 AWS WAF [跨站点脚本攻击规则语句](waf-rule-statement-type-xss-match.md)示例模式包括类似于 `<script>alert("hello")</script>` 的脚本。  该规则组的 2.0 版本未填充 AWS WAF 日志中的规则匹配详细信息。  此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body`  | 
| CrossSiteScripting\$1URIPATH |  使用内置检查常见跨站脚本 (XSS) 模式的 URI 路径值。 AWS WAF [跨站点脚本攻击规则语句](waf-rule-statement-type-xss-match.md)示例模式包括类似于 `<script>alert("hello")</script>` 的脚本。  该规则组的 2.0 版本未填充 AWS WAF 日志中的规则匹配详细信息。  规则操作：Block 标签：`awswaf:managed:aws:core-rule-set:CrossSiteScripting_URIPath`  | 

## 管理员保护托管规则组
<a name="aws-managed-rule-groups-baseline-admin"></a>

VendorName:`AWS`，名称：`AWSManagedRulesAdminProtectionRuleSet`，WCU：100

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

管理保护规则组包含允许您阻止对公开的管理页面进行外部访问的规则。如果您运行第三方软件，或者希望降低恶意人员获取您的应用程序的管理访问权限的风险，该规则组可能非常有用。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| AdminProtection\$1URIPATH |  检查针对通常为管理 Web 服务器或应用程序而保留的 URI 路径。示例模式包括 `sqlmanager`。 规则操作：Block 标签：`awswaf:managed:aws:admin-protection:AdminProtection_URIPath`  | 

## 已知错误输入托管规则组
<a name="aws-managed-rule-groups-baseline-known-bad-inputs"></a>

VendorName:`AWS`，名称：`AWSManagedRulesKnownBadInputsRuleSet`，WCU：200

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

已知错误输入规则组包含用于阻止请求模式的规则，这些模式确认无效且与漏洞攻击或发现相关联。这有助于降低恶意人员发现易受攻击的应用程序的风险。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| JavaDeserializationRCE\$1HEADER |  检查 HTTP 请求标头的键和值，寻找指示 Java 反序列化远程命令执行（RCE）尝试的模式，例如 Spring Core 和 Cloud Function RCE 漏洞（CVE-2022-22963、CVE-2022-22965）。示例模式包括 `(java.lang.Runtime).getRuntime().exec("whoami")`。 此规则仅检查请求标头的前 8 KB 或前 200 个标头（以先达到的限制为准），并且它使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:JavaDeserializationRCE_Header`  | 
| JavaDeserializationRCE\$1BODY |  检查请求正文中是否存在指示 Java 反序列化远程命令执行（RCE）尝试的模式，例如 Spring Core 和 Cloud Function RCE 漏洞（CVE-2022-22963、CVE-2022-22965）。示例模式包括 `(java.lang.Runtime).getRuntime().exec("whoami")`。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:JavaDeserializationRCE_Body`  | 
| JavaDeserializationRCE\$1URIPATH |  检查请求 URI 中是否存在指示 Java 反序列化远程命令执行（RCE）尝试的模式，例如 Spring Core 和 Cloud Function RCE 漏洞（CVE-2022-22963、CVE-2022-22965）。示例模式包括 `(java.lang.Runtime).getRuntime().exec("whoami")`。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:JavaDeserializationRCE_URIPath`  | 
| JavaDeserializationRCE\$1QUERYSTRING |  检查请求查询字符串中是否存在指示 Java 反序列化远程命令执行（RCE）尝试的模式，例如 Spring Core 和 Cloud Function RCE 漏洞（CVE-2022-22963、CVE-2022-22965）。示例模式包括 `(java.lang.Runtime).getRuntime().exec("whoami")`。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:JavaDeserializationRCE_QueryString`  | 
| Host\$1localhost\$1HEADER |  检查请求中的主机标头是否有指示本地主机的模式。示例模式包括 `localhost`。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:Host_Localhost_Header`  | 
| PROPFIND\$1METHOD |  检查请求中用于 `PROPFIND` 的 HTTP 方法，这是一种类似于 `HEAD` 的方法，但具有泄漏 XML 对象的额外意图。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:Propfind_Method`  | 
| ExploitablePaths\$1URIPATH |  检查 URI 路径中是否有恶意方试图访问可利用的 Web 应用程序路径。示例模式包括类似于 `web-inf` 的路径。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:ExploitablePaths_URIPath`  | 
| Log4JRCE\$1HEADER |  检查请求标头的键和值是否存在 Log4j 漏洞（[CVE-2021-44228](https://www.cve.org/CVERecord?id=CVE-2021-44228)、[CVE-2021-45046](https://www.cve.org/CVERecord?id=CVE-2021-45046)、[CVE-2021-45105](https://www.cve.org/CVERecord?id=CVE-2021-45105)），并防止远程代码执行（RCE）尝试。示例模式包括 `${jndi:ldap://example.com/}`。 此规则仅检查请求标头的前 8 KB 或前 200 个标头（以先达到的限制为准），并且它使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:Log4JRCE_Header`  | 
| Log4JRCE\$1QUERYSTRING |  检查查询字符串中是否存在 Log4j 漏洞（[CVE-2021-44228](https://www.cve.org/CVERecord?id=CVE-2021-44228)、[CVE-2021-45046](https://www.cve.org/CVERecord?id=CVE-2021-45046)、[CVE-2021-45105](https://www.cve.org/CVERecord?id=CVE-2021-45105)），并防止远程代码执行（RCE）尝试。示例模式包括 `${jndi:ldap://example.com/}`。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:Log4JRCE_QueryString`  | 
| Log4JRCE\$1BODY |  检查正文中是否存在 Log4j 漏洞（[CVE-2021-44228](https://www.cve.org/CVERecord?id=CVE-2021-44228)、[CVE-2021-45046](https://www.cve.org/CVERecord?id=CVE-2021-45046)、[CVE-2021-45105](https://www.cve.org/CVERecord?id=CVE-2021-45105)），并防止远程代码执行（RCE）尝试。示例模式包括 `${jndi:ldap://example.com/}`。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:Log4JRCE_Body`  | 
| Log4JRCE\$1URIPATH |  检查 URI 路径中是否存在 Log4j 漏洞（[CVE-2021-44228](https://www.cve.org/CVERecord?id=CVE-2021-44228)、[CVE-2021-45046](https://www.cve.org/CVERecord?id=CVE-2021-45046)、[CVE-2021-45105](https://www.cve.org/CVERecord?id=CVE-2021-45105)），并防止远程代码执行（RCE）尝试。示例模式包括 `${jndi:ldap://example.com/}`。 规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:Log4JRCE_URIPath`  | 
| ReactJSRCE\$1BODY |  检查请求正文中是否存在表示存在 CVE-2025-55182 的模式。  此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于应用程序负载均衡器和 AWS AppSync，固定限制为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 AWS Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `CONTINUE` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。  规则操作：Block 标签：`awswaf:managed:aws:known-bad-inputs:ReactJSRCE_Body`  | 

# 使用案例特定规则组
<a name="aws-managed-rule-groups-use-case"></a>

特定于用例的规则组为许多不同的 AWS WAF 用例提供增量保护。选择适用于您的应用程序的规则组。

## SQL 数据库托管规则组
<a name="aws-managed-rule-groups-use-case-sql-db"></a>

VendorName:`AWS`，名称：`AWSManagedRulesSQLiRuleSet`，WCU：200

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

SQL 数据库规则组包含阻止与 SQL 数据库攻击（如 SQL 注入攻击）相关的请求模式的规则。该规则组有助于防止远程注入未经授权的查询。如果应用程序与 SQL 数据库相连，请评估此规则组以便使用。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| SQLi\$1QUERYARGUMENTS |  使用内置 AWS WAF [SQL 注入攻击规则语句](waf-rule-statement-type-sqli-match.md)的（敏感度级别设置为Low）检查所有查询参数的值中是否存在与恶意 SQL 代码匹配的模式。 规则操作：Block 标签：`awswaf:managed:aws:sql-database:SQLi_QueryArguments`  | 
| SQLiExtendedPatterns\$1QUERYARGUMENTS |  检查所有查询参数的值，以查找与恶意 SQL 代码匹配的模式。该规则检查的模式不在规则 `SQLi_QUERYARGUMENTS` 的范围内。 规则操作：Block 标签：`awswaf:managed:aws:sql-database:SQLiExtendedPatterns_QueryArguments`  | 
| SQLi\$1BODY |  使用内置 AWS WAF [SQL 注入攻击规则语句](waf-rule-statement-type-sqli-match.md)的（敏感度级别设置为Low）检查请求正文中是否存在与恶意 SQL 代码匹配的模式。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:sql-database:SQLi_Body`  | 
| SQLiExtendedPatterns\$1BODY |  检查请求正文中是否存在与恶意 SQL 代码匹配的模式。该规则检查的模式不在规则 `SQLi_BODY` 的范围内。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:sql-database:SQLiExtendedPatterns_Body`  | 
| SQLi\$1COOKIE |  使用内置 AWS WAF [SQL 注入攻击规则语句](waf-rule-statement-type-sqli-match.md)的（敏感度级别设置为）检查请求 Cookie 标头中是否存在与恶意 SQL 代码匹配的模式。Low 规则操作：Block 标签：`awswaf:managed:aws:sql-database:SQLi_Cookie`  | 
| SQLi\$1URIPATH |  使用内置 AWS WAF [SQL 注入攻击规则语句](waf-rule-statement-type-sqli-match.md)的（敏感度级别设置为）检查请求 Cookie 标头中是否存在与恶意 SQL 代码匹配的模式。Low 规则操作：Block 标签：`awswaf:managed:aws:sql-database:SQLi_URIPath`  | 

## Linux 操作系统托管规则组
<a name="aws-managed-rule-groups-use-case-linux-os"></a>

VendorName:`AWS`，名称：`AWSManagedRulesLinuxRuleSet`，WCU：200

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

Linux 操作系统规则组包含阻止请求模式的规则，这些请求模式与利用 Linux 特定漏洞（包括 Linux 特定的本地文件包含（LFI）攻击）相关。该规则组有助于防止暴露攻击者不应当访问的文件内容或执行代码的攻击。如果应用程序的任何部分在 Linux 上运行，则应评估此规则组。您应将此规则组与 [POSIX 操作系统](#aws-managed-rule-groups-use-case-posix-os) 规则组结合使用。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| LFI\$1URIPATH |  检查请求路径，以查找是否有恶意方试图利用 Web 应用程序中的本地文件包含 (LFI) 漏洞。示例模式包括类似于 `/proc/version` 的文件，它们可能向攻击者提供操作系统信息。 规则操作：Block 标签：`awswaf:managed:aws:linux-os:LFI_URIPath`  | 
| LFI\$1QUERYSTRING |  检查查询字符串的值，以查找是否有恶意方试图利用 Web 应用程序中的本地文件包含 (LFI) 漏洞。示例模式包括类似于 `/proc/version` 的文件，它们可能向攻击者提供操作系统信息。 规则操作：Block 标签：`awswaf:managed:aws:linux-os:LFI_QueryString`  | 
| LFI\$1HEADER |  检查请求标头，以查找是否有恶意方试图利用 Web 应用程序中的本地文件包含 (LFI) 漏洞。示例模式包括类似于 `/proc/version` 的文件，它们可能向攻击者提供操作系统信息。 此规则仅检查请求标头的前 8 KB 或前 200 个标头（以先达到的限制为准），并且它使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:linux-os:LFI_Header`  | 

## POSIX 操作系统托管规则组
<a name="aws-managed-rule-groups-use-case-posix-os"></a>

VendorName:`AWS`，名称：`AWSManagedRulesUnixRuleSet`，WCU：100

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

POSIX 操作系统规则组包含的规则可阻止与利用 POSIX 和类似 POSIX 的操作系统特定漏洞（包括 Linux 特定的本地文件包含（LFI）攻击）相关的请求模式。该规则组有助于防止暴露攻击者不应当访问的文件内容或执行代码的攻击。如果应用程序的任何部分在 POSIX 或类似 POSIX 的操作系统（包括 Linux、AIX、HP-UX、macOS、Solaris、FreeBSD 和 OpenBSD）上运行，则应评估此规则组。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| UNIXShellCommandsVariables\$1QUERYSTRING |  检查查询字符串的值，以查找是否有恶意方试图利用在 Unix 系统上运行的 Web 应用程序中的命令注入、LFI 和路径遍历漏洞。示例包括类似于 `echo $HOME` 和 `echo $PATH` 的模式。 规则操作：Block 标签：`awswaf:managed:aws:posix-os:UNIXShellCommandsVariables_QueryString`  | 
| UNIXShellCommandsVariables\$1BODY |  检查请求正文，以查找是否有恶意方试图利用在 Unix 系统上运行的 Web 应用程序中的命令注入、LFI 和路径遍历漏洞。示例包括类似于 `echo $HOME` 和 `echo $PATH` 的模式。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:posix-os:UNIXShellCommandsVariables_Body`  | 
| UNIXShellCommandsVariables\$1HEADER |  检查所有请求标头，以查找是否有恶意方试图利用在 Unix 系统上运行的 Web 应用程序中的命令注入、LFI 和路径遍历漏洞。示例包括类似于 `echo $HOME` 和 `echo $PATH` 的模式。 此规则仅检查请求标头的前 8 KB 或前 200 个标头（以先达到的限制为准），并且它使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:posix-os:UNIXShellCommandsVariables_Header`  | 

## Windows 操作系统托管规则组
<a name="aws-managed-rule-groups-use-case-windows-os"></a>

VendorName:`AWS`，名称：`AWSManagedRulesWindowsRuleSet`，WCU：200

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

Windows 操作系统规则组包含的规则用于阻止与利用 Windows 特有的漏洞（例如远程执行 PowerShell 命令）相关的请求模式。该规则组有助于防止利用允许攻击者运行未经授权的命令或执行恶意代码的漏洞。如果应用程序的任何部分在 Windows 操作系统上运行，则应评估此规则组。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| WindowsShellCommands\$1COOKIE |  检查 Web 应用程序中是否有 WindowsShell 命令注入尝试的请求 cookie 标头。匹配模式代表WindowsShell 命令。示例模式包括 `\|\|nslookup` 和 `;cmd`。 规则操作：Block 标签：`awswaf:managed:aws:windows-os:WindowsShellCommands_Cookie`  | 
| WindowsShellCommands\$1QUERYARGUMENTS |  检查 Web 应用程序中WindowsShell 命令注入尝试的所有查询参数的值。匹配模式代表WindowsShell 命令。示例模式包括 `\|\|nslookup` 和 `;cmd`。 规则操作：Block 标签：`awswaf:managed:aws:windows-os:WindowsShellCommands_QueryArguments`  | 
| WindowsShellCommands\$1BODY |  检查请求正文中是否有 Web 应用程序中的 WindowsShell 命令注入尝试。匹配模式代表 WindowsShell 命令。示例模式包括 `\|\|nslookup` 和 `;cmd`。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:windows-os:WindowsShellCommands_Body`  | 
| PowerShellCommands\$1COOKIE |  检查 Web 应用程序中是否有 PowerShell 命令注入尝试的请求 cookie 标头。匹配模式代表PowerShell 命令。例如 `Invoke-Expression`。 规则操作：Block 标签：`awswaf:managed:aws:windows-os:PowerShellCommands_Cookie`  | 
| PowerShellCommands\$1QUERYARGUMENTS |  检查 Web 应用程序中PowerShell 命令注入尝试的所有查询参数的值。匹配模式代表PowerShell 命令。例如 `Invoke-Expression`。 规则操作：Block 标签：`awswaf:managed:aws:windows-os:PowerShellCommands_QueryArguments`  | 
| PowerShellCommands\$1BODY |  检查请求正文中是否有 Web 应用程序中的 PowerShell 命令注入尝试。匹配模式代表 PowerShell 命令。例如 `Invoke-Expression`。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:windows-os:PowerShellCommands_Body`  | 

## PHP 应用程序托管规则组
<a name="aws-managed-rule-groups-use-case-php-app"></a>

VendorName:`AWS`，名称：`AWSManagedRulesPHPRuleSet`，WCU：100

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

PHP 应用程序规则组包含阻止请求模式的规则，这些请求模式与利用特定于 PHP 编程语言使用的漏洞相关，包括注入不安全的 PHP 函数。该规则组有助于防止利用允许攻击者远程执行未经授权的代码或命令的漏洞。如果 PHP 安装在与应用程序相连的任何服务器上，则评估此规则组。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| PHPHighRiskMethodsVariables\$1HEADER |  检查所有标头，以发现 PHP 脚本代码注入尝试。示例模式包括类似 `fsockopen` 和 `$_GET` 超全局变量的函数。 此规则仅检查请求标头的前 8 KB 或前 200 个标头（以先达到的限制为准），并且它使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:php-app:PHPHighRiskMethodsVariables_Header`  | 
| PHPHighRiskMethodsVariables\$1QUERYSTRING |  检查请求 URL 中第一个 `?` 之后的所有内容，查找 PHP 脚本代码注入尝试。示例模式包括类似 `fsockopen` 和 `$_GET` 超全局变量的函数。 规则操作：Block 标签：`awswaf:managed:aws:php-app:PHPHighRiskMethodsVariables_QueryString`  | 
| PHPHighRiskMethodsVariables\$1BODY |  检查请求主体的值以查找 PHP 脚本代码注入尝试。示例模式包括类似 `fsockopen` 和 `$_GET` 超全局变量的函数。 此规则仅检查请求正文，但不得超过保护包（web ACL）和资源类型的正文大小限制。对于 Application Load Balancer 和 AWS AppSync，限制固定为 8 KB。对于 CloudFront API Gateway、Amazon Cognito、App Runner 和 Verified Access，默认限制为 16 KB，您可以在保护包 (Web ACL) 配置中将限制提高到 64 KB。此规则使用 `Continue` 选项来处理超大内容。有关更多信息，请参阅 [中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。 规则操作：Block 标签：`awswaf:managed:aws:php-app:PHPHighRiskMethodsVariables_Body`  | 
| PHPHighRiskMethodsVariables\$1URIPATH |  检查 PHP 脚本代码注入尝试的请求路径。示例模式包括类似 `fsockopen` 和 `$_GET` 超全局变量的函数。 规则操作：Block 标签：`awswaf:managed:aws:php-app:PHPHighRiskMethodsVariables_URIPath`  | 

## WordPress 应用程序托管规则组
<a name="aws-managed-rule-groups-use-case-wordpress-app"></a>

VendorName:`AWS`，名称：`AWSManagedRulesWordPressRuleSet`，WCU：100

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

 WordPress 应用程序规则组包含的规则用于阻止与利用特定于WordPress 网站的漏洞相关的请求模式。如果您正在运行，则应评估此规则组WordPress。此规则组应与 [SQL 数据库](#aws-managed-rule-groups-use-case-sql-db) 和 [PHP 应用程序](#aws-managed-rule-groups-use-case-php-app) 规则组一起使用。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| WordPressExploitableCommands\$1QUERYSTRING |  检查请求查询字符串中是否存在可能在易受攻击的安装或插件中被利用的高风险WordPress 命令。示例模式包括类似于 `do-reset-wordpress` 的命令。 规则操作：Block 标签：`awswaf:managed:aws:wordpress-app:WordPressExploitableCommands_QUERYSTRING`  | 
| WordPressExploitablePaths\$1URIPATH |  检查请求 URI 路径中是否有已知存在容易被利用的漏洞的 WordPress 文件。`xmlrpc.php` 规则操作：Block 标签：`awswaf:managed:aws:wordpress-app:WordPressExploitablePaths_URIPATH`  | 

# IP 声誉规则组
<a name="aws-managed-rule-groups-ip-rep"></a>

IP 声誉规则组请求源 IP 地址阻止请求。

**注意**  
这些规则使用 Web 请求源中的源 IP 地址。如果您的流量通过了一个或多个代理或负载均衡器，则 Web 请求源将包含最后一个代理的地址，而不是客户端的源地址。

如果您希望减少自动程序流量、尝试攻击的风险，或者如果您要对内容强制地理限制，请选择其中一个或多个规则组。有关机器人管理的信息，另请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

此类别中的规则组不提供版本控制或 SNS 更新通知。

## Amazon IP 声誉列表托管规则组
<a name="aws-managed-rule-groups-ip-rep-amazon"></a>

VendorName:`AWS`，名称：`AWSManagedRulesAmazonIpReputationList`，WCU：25

**注意**  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

Amazon IP 声誉列表规则组包含基于 Amazon 内部威胁情报的规则。如果您想阻止通常与自动程序或其他威胁相关联的 IP 地址，此规则组非常有用。阻止这些 IP 地址有助于规避自动程序，并降低恶意人员发现易受攻击的应用程序的风险。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| AWSManagedIPReputationList |  检查是否存在被确定为积极参与恶意活动的 IP 地址。 AWS WAF 从各种来源收集 IP 地址列表 MadPot，包括 Amazon 用来保护客户免受网络犯罪侵害的威胁情报工具。有关的更多信息 MadPot，请参阅[https://www.aboutamazon.com/news/aws/amazon-madpot-stops-cybersecurity-crime](https://www.aboutamazon.com/news/aws/amazon-madpot-stops-cybersecurity-crime)。 规则操作：Block 标签：`awswaf:managed:aws:amazon-ip-list:AWSManagedIPReputationList`  | 
| AWSManagedReconnaissanceList |  检查来自正在对 AWS 资源进行侦察的 IP 地址的连接。 规则操作：Block 标签：`awswaf:managed:aws:amazon-ip-list:AWSManagedReconnaissanceList`  | 
| AWSManagedIPDDoSList |  检查是否有被确定为积极参与 DDo S 活动的 IP 地址。 规则操作：Count 标签：`awswaf:managed:aws:amazon-ip-list:AWSManagedIPDDoSList`  | 

## 匿名 IP 列表托管规则组
<a name="aws-managed-rule-groups-ip-rep-anonymous"></a>

VendorName:`AWS`，名称：`AWSManagedRulesAnonymousIpList`，WCU：50

**注意**  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

此匿名 IP 列表包含用于阻止来自以下服务的请求的规则：这些服务允许对查看者身份进行模糊处理。其中包括来自代理VPNs、Tor 节点和虚拟主机提供商的请求。如果要筛选出可能试图从应用程序中隐藏其身份的查看者，则此规则组非常有用。阻止这些服务的 IP 地址有助于减少机器人和规避地域限制。

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| AnonymousIPList |  检查已知用于匿名处理客户端信息的源的 IP 地址列表，例如 TOR 节点、临时代理和其他遮蔽服务。 规则操作：Block 标签：`awswaf:managed:aws:anonymous-ip-list:AnonymousIPList`  | 
| HostingProviderIPList | 检查来自 Web 托管和云提供程序的 IP 地址列表，这些提供程序不太可能产生最终用户流量。IP 列表不包括 AWS IP 地址。 规则操作：Block 标签：`awswaf:managed:aws:anonymous-ip-list:HostingProviderIPList` | 

# AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组
<a name="aws-managed-rule-groups-acfp"></a>

本节说明了 AWS WAF 欺诈控制账户创建防作弊 (ACFP) 托管规则组的作用。

VendorName:`AWS`，名称：`AWSManagedRulesACFPRuleSet`，WCU：50

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

F AWS WAF raud Control 账户创建防欺诈 (ACFP) 管理的规则组可以标记和管理可能属于欺诈性账户创建尝试的请求。规则组通过检查客户端发送到应用程序的注册和账户创建端点的账户创建请求来实现此目的。

ACFP 规则组以各种方式检查账户创建尝试，让您可以查看和控制潜在的恶意交互。规则组使用请求令牌来收集有关客户端浏览器的信息以及有关创建账户创建请求时的人机交互级别的信息。该规则组按 IP 地址和客户端会话汇总请求，并按提供的账户信息（例如实际地址和电话号码）进行聚合，以检测和管理批量创建账户的尝试。此外，该规则组会检测并阻止使用已泄露的凭证创建新账户，从而保护应用程序和新用户的安全状况。

## 使用此规则组的注意事项
<a name="aws-managed-rule-groups-acfp-using"></a>

此规则组需要自定义配置，其中包括应用程序的账户注册和账户创建路径的规范。除非另有说明，否则此规则组中的规则会检查您的客户端发送到这两个端点的所有请求。如需配置和实施此规则组，请参阅 [AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)](waf-acfp.md) 中的指导。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

此规则组是 AWS WAF中智能威胁缓解保护的一部分。有关信息，请参阅[中的智能威胁缓解 AWS WAF](waf-managed-protections.md)。

为了降低成本并确保您可以根据需要管理 Web 流量，请按照 [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md) 中的指导使用此规则组。

此规则组不可与 Amazon Cognito 用户群体一起使用。您无法将使用此规则组的保护包（web ACL）与用户池相关联，也无法将此规则组添加到已与用户池关联的保护包（web ACL）中。

## 此规则组添加的标签
<a name="aws-managed-rule-groups-acfp-labels"></a>

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。

### 令牌标签
<a name="aws-managed-rule-groups-acfp-labels-token"></a>

该规则组使用 AWS WAF 令牌管理根据令牌的状态检查和标 AWS WAF 记 Web 请求。 AWS WAF 使用令牌进行客户端会话跟踪和验证。

有关令牌和令牌管理的信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。

有关此处描述的标签组件的信息，请参阅 [中的标签语法和命名要求 AWS WAF](waf-rule-label-requirements.md)。

**客户端会话标签**  
该标签`awswaf:managed:token:id:identifier`包含一个唯一标识符， AWS WAF 令牌管理使用该标识符来标识客户端会话。如果客户端获取了新令牌，例如在丢弃其正在使用的令牌之后，标识符可能会更改。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**浏览器指纹标签**  
该标签`awswaf:managed:token:fingerprint:fingerprint-identifier`包含一个强大的浏览器指纹标识符， AWS WAF 令牌管理根据各种客户端浏览器信号计算该标识符。多次尝试获取令牌时，此标识符保持不变。指纹标识符并非仅属于单个客户端。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**令牌状态标签：标签命名空间前缀**  
令牌状态标签报告令牌的状态、质询以及其中包含的 CAPTCHA 信息。

每个令牌状态标签都以下列命名空间前缀之一开头：
+ `awswaf:managed:token:`：用于报告令牌的一般状态以及令牌的质询信息的状态。
+ `awswaf:managed:captcha:`：用于报告令牌的 CAPTCHA 信息的状态。

**令牌状态标签：标签名称**  
在前缀之后，标签的其余部分提供详细的令牌状态信息：
+ `accepted`：请求令牌存在且包含以下内容：
  + 有效的质询或 CAPTCHA 解决方案。
  + 未过期的质询或 CAPTCHA 时间戳。
  + 对保护包（web ACL）有效的域规范。

  示例：标签 `awswaf:managed:token:accepted` 表明 web 请求的令牌具有有效的质询解决方案、未过期的质询时间戳以及有效的域。
+ `rejected`：请求令牌存在但不符合接受标准。

  除了被拒绝的标签外，令牌管理还添加了一个自定义标签命名空间和名称来指示原因。
  + `rejected:not_solved`：令牌缺少质询或 CAPTCHA 解决方案。
  + `rejected:expired`：根据保护包（web ACL）配置的令牌免疫时间，令牌的质询或 CAPTCHA 时间戳已过期。
  + `rejected:domain_mismatch`：令牌的域与保护包（web ACL）的令牌域配置不匹配。
  + `rejected:invalid`— AWS WAF 无法读取指示的标记。

  示例：标签 `awswaf:managed:captcha:rejected` 和 `awswaf:managed:captcha:rejected:expired` 共同表示请求未提供有效的 CAPTCHA 解决方案，因为令牌中的 CAPTCHA 时间戳已超过保护包（web ACL）中配置的 CAPTCHA 令牌免疫时间。
+ `absent`：请求没有令牌，或者令牌管理器无法读取它。

  示例：标签 `awswaf:managed:captcha:absent` 表示请求没有令牌。

### ACFP 标签
<a name="aws-managed-rule-groups-acfp-labels-rg"></a>

该规则组生成带有命名空间前缀 `awswaf:managed:aws:acfp:` 的标签，后接自定义命名空间和标签名称。规则组可能会向一个请求添加多个标签。

您可以通过调用 `DescribeManagedRuleGroup` 从 API 检索一个规则组的所有标签。标签列在响应的 `AvailableLabels` 属性中。

## 账户创建欺诈预防规则列表
<a name="aws-managed-rule-groups-acfp-rules"></a>

此部分列出了 `AWSManagedRulesACFPRuleSet` 中的 ACFP 规则以及规则组的规则添加到 Web 请求的标签。

该规则组中的所有规则都需要 Web 请求令牌，但前两个 `UnsupportedCognitoIDP` 和 `AllRequests` 除外。有关令牌提供的信息的描述，请参阅 [AWS WAF 代币特征](waf-tokens-details.md)。

除非另有说明，否则此规则组中的规则会检查您的客户端发送到您在规则组配置中提供的账户注册和账户创建页面路径的所有请求。有关配置此规则组的信息，请参阅 [AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)](waf-acfp.md)。

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| UnsupportedCognitoIDP |  检查流向 Amazon Cognito 用户群体的 Web 流量。ACFP 不可用于 Amazon Cognito 用户群体，此规则有助于确保不使用其他 ACFP 规则组规则来评估用户群体流量。 规则操作：Block 标签：`awswaf:managed:aws:acfp:unsupported:cognito_idp` 和 `awswaf:managed:aws:acfp:UnsupportedCognitoIDP`   | 
| AllRequests |  将规则操作应用于访问注册页面路径的请求。在配置规则组时可以配置注册页面路径。 默认情况下，此规则会将 Challenge 应用于请求。通过应用此操作，该规则可确保在规则组中的其余规则评估任何请求之前，客户端获得质询令牌。 确保您的最终用户在提交账户创建请求之前加载注册页面路径。 令牌通过客户端应用程序集成 SDKs 以及规则操作CAPTCHA和添加到请求中Challenge。为了获得最高效的代币，我们强烈建议您使用应用程序集成 SDKs。有关更多信息，请参阅 [中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。 规则操作：Challenge 标签：无  | 
| RiskScoreHigh |  检查是否存在 IP 地址或其他被认为高度可疑因素的账户创建请求。这种评估通常基于多个影响因素，您可以在规则组添加到请求的 `risk_score` 标签中看到这些因素。 规则操作：Block 标签：`awswaf:managed:aws:acfp:risk_score:high` 和 `awswaf:managed:aws:acfp:RiskScoreHigh`  该规则也可能适用于该请求 `medium` 或 `low` 风险评分标签。 如果 AWS WAF 无法成功评估 Web 请求的风险评分，则该规则会添加标签 `awswaf:managed:aws:acfp:risk_score:evaluation_failed ` 此外，该规则还添加了带有命名空间的标签 `awswaf:managed:aws:acfp:risk_score:contributor:`，其中包括风险评分评估状态和特定风险评分贡献者的结果，例如 IP 声誉和被盗凭证评估。  | 
| SignalCredentialCompromised |  在被盗凭证数据库中搜索在账户创建请求中提交的凭证。 此规则可确保新客户以积极的安全态势初始化其账户。  您可以添加自定义阻止响应，向最终用户描述问题并告诉他们如何继续操作。有关信息，请参阅[ACFP 示例：针对被泄漏凭证的自定义响应](waf-acfp-control-example-compromised-credentials.md)。  规则操作：Block 标签：`awswaf:managed:aws:acfp:signal:credential_compromised` 和 `awswaf:managed:aws:acfp:SignalCredentialCompromised`  规则组应用以下相关标签，但不对其采取任何操作，因为并非所有账户创建中的请求都具有凭证：`awswaf:managed:aws:acfp:signal:missing_credential`  | 
| SignalClientHumanInteractivityAbsentLow |  检查账户创建请求的令牌中是否有数据表明人机应用程序交互出现异常。人机交互通过鼠标移动、按键等交互来检测。如果页面有 HTML 表单，则人机交互包括与表单的交互。  此规则仅检查对账户创建路径的请求，并且仅在您实现了应用程序集成 SDKs后才会进行评估。软件开发工具包实施以被动方式捕获人机交互并将信息存储在请求令牌中。有关更多信息，请参阅 [AWS WAF 代币特征](waf-tokens-details.md) 和 [中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。  规则操作：CAPTCHA 标签：无。该规则根据不同的因素确定匹配项，因此没有适用于所有可能的匹配场景的单独标签。 规则组可以将下列一个或多个标签应用于请求： `awswaf:managed:aws:acfp:signal:client:human_interactivity:low\|medium\|high` `awswaf:managed:aws:acfp:SignalClientHumanInteractivityAbsentLow\|Medium\|High`  `awswaf:managed:aws:acfp:signal:client:human_interactivity:insufficient_data`  `awswaf:managed:aws:acfp:signal:form_detected`.  | 
| AutomatedBrowser |  检查是否显示客户端浏览器可能已自动运行。 规则操作：Block 标签：`awswaf:managed:aws:acfp:signal:automated_browser` 和 `awswaf:managed:aws:acfp:AutomatedBrowser`  | 
| BrowserInconsistency |  检查请求的令牌是否存在不一致的浏览器询问数据。有关更多信息，请参阅 [AWS WAF 代币特征](waf-tokens-details.md)。 规则操作：CAPTCHA 标签：`awswaf:managed:aws:acfp:signal:browser_inconsistency` 和 `awswaf:managed:aws:acfp:BrowserInconsistency`  | 
| VolumetricIpHigh |  检查从各个 IP 地址发送的高流量账户创建请求。高流量是指在 10 分钟的窗口内超过 20 个请求。 由于延迟，此规则适用的阈值可能略有不同。对于高流量，在应用规则操作之前，一些请求可能会超出限制。 规则操作：CAPTCHA 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:ip:creation:high` 和 `awswaf:managed:aws:acfp:VolumetricIpHigh`  该规则将以下标签应用于中流量（每 10 分钟窗口内超过 15 个请求）和低流量（每 10 分钟窗口内超过 10 个请求）的请求，但不对它们采取任何操作：`awswaf:managed:aws:acfp:aggregate:volumetric:ip:creation:medium` 和 `awswaf:managed:aws:acfp:aggregate:volumetric:ip:creation:low`。  | 
| VolumetricSessionHigh |  检查来自各个客户端会话的高流量账户创建请求。高流量是指在 30 分钟的窗口内超过 10 个请求。  由于延迟，此规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作：Block 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:session:creation:high` 和 `awswaf:managed:aws:acfp:VolumetricSessionHigh`  该规则组将以下标签应用于中流量（每 30 分钟窗口内超过 5 个请求）和低流量（每 30 分钟窗口内超过 1 个请求）的请求，但不对它们采取任何操作：`awswaf:managed:aws:acfp:aggregate:volumetric:session:creation:medium` 和 `awswaf:managed:aws:acfp:aggregate:volumetric:session:creation:low`。  | 
| AttributeUsernameTraversalHigh |  检查单个客户端会话中是否存在使用不同用户名的高流量账户创建请求。高流量的阈值为 30 分钟内超过 10 个请求。  由于延迟，此规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作：Block 标签：`awswaf:managed:aws:acfp:aggregate:attribute:username_traversal:creation:high` 和 `awswaf:managed:aws:acfp:AttributeUsernameTraversalHigh`  该规则将以下标签应用于中流量（每 30 分钟窗口内超过 5 个请求）和低流量（每 30 分钟窗口内超过 1 个请求）的用户名遍历请求，但不对它们采取任何操作：`awswaf:managed:aws:acfp:aggregate:attribute:username_traversal:creation:medium` 和 `awswaf:managed:aws:acfp:aggregate:attribute:username_traversal:creation:low`。  | 
| VolumetricPhoneNumberHigh |  检查是否存在使用相同电话号码的高流量账户创建请求。高流量的阈值为 30 分钟内超过 10 个请求。  由于延迟，此规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作：Block 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:phone_number:high` 和 `awswaf:managed:aws:acfp:VolumetricPhoneNumberHigh` 该规则组将以下标签应用于中流量（每 30 分钟窗口内超过 5 个请求）和低流量（每 30 分钟窗口内超过 1 个请求）的请求，但不对它们采取任何操作：`awswaf:managed:aws:acfp:aggregate:volumetric:phone_number:medium` 和 `awswaf:managed:aws:acfp:aggregate:volumetric:phone_number:low`。  | 
| VolumetricAddressHigh |  检查是否存在使用相同物理地址的高流量账户创建请求。高流量的阈值为每 30 分钟窗口内超过 100 个请求。  由于延迟，此规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作：Block 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:address:high` 和 `awswaf:managed:aws:acfp:VolumetricAddressHigh`   | 
| VolumetricAddressLow |  检查是否存在使用相同物理地址的中流量和低流量账户创建请求。中流量的阈值为每 30 分钟窗口超过 50 个请求，而低流量的阈值为每 30 分钟窗口超过 10 个请求。 该规则适用于中流量或低流量。  由于延迟，此规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作：CAPTCHA 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:address:low\|medium` 和 `awswaf:managed:aws:acfp:VolumetricAddressLow\|Medium`   | 
| VolumetricIPSuccessfulResponse |  检查是否存在针对单个 IP 地址的高流量创建账户成功请求。此规则汇总了受保护资源对账户创建请求的成功响应。高流量的阈值为每 10 分钟窗口内超过 10 个请求。 此规则有助于防止批量创建账户的尝试。它的阈值低于仅计算请求的规则 `VolumetricIpHigh`。 如果您已将规则组配置为检查响应正文或 JSON 组件，则 AWS WAF 可以检查这些组件类型的前 65,536 字节 (64 KB) 以查看成功或失败指示器。 此规则根据受保护资源对最近来自相同 IP 地址的登录尝试的成功和失败响应，将规则操作和标签应用于来自某个 IP 地址的新 Web 请求。在配置规则组时，您可以定义如何计算成功和失败。  AWS WAF 仅在保护 Amazon CloudFront 分销的保护包 (Web ACLs) 中评估此规则。   由于延迟，此规则适用的阈值可能略有不同。在规则开始匹配后续尝试之前，客户端发送账户创建成功尝试的次数可能会超过允许的次数。  规则操作：Block 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:ip:successful_creation_response:high` 和 `awswaf:managed:aws:acfp:VolumetricIPSuccessfulResponse`  该规则组还将以下相关标签应用于请求，但没有任何关联操作。所有计数均适用 10 分钟窗口。`awswaf:managed:aws:acfp:aggregate:volumetric:ip:successful_creation_response:medium` 对应超过 5 个成功请求，`awswaf:managed:aws:acfp:aggregate:volumetric:ip:successful_creation_response:low` 对应超过 1 个成功请求，`awswaf:managed:aws:acfp:aggregate:volumetric:ip:failed_creation_response:high` 对应超过 10 个失败请求，`awswaf:managed:aws:acfp:aggregate:volumetric:ip:failed_creation_response:medium` 对应超过 5 个失败请求，`awswaf:managed:aws:acfp:aggregate:volumetric:ip:failed_creation_response:low` 对应超过 1 个失败请求。  | 
| VolumetricSessionSuccessfulResponse |  检查受保护资源对从单个客户端会话发送的账户创建请求是否有低流量成功响应。这有助于防止批量创建账户的尝试。低流量的阈值为每 30 分钟窗口内超过 1 个请求。 这有助于防止批量创建账户的尝试。此规则使用的阈值低于仅跟踪请求的规则 `VolumetricSessionHigh`。 如果您已将规则组配置为检查响应正文或 JSON 组件，则 AWS WAF 可以检查这些组件类型的前 65,536 字节 (64 KB) 以查看成功或失败指示器。 此规则根据受保护资源对最近来自相同客户端会话的登录尝试的成功和失败响应，将规则操作和标签应用于来自某个客户端会话的新 Web 请求。在配置规则组时，您可以定义如何计算成功和失败。  AWS WAF 仅在保护 Amazon CloudFront 分销的保护包 (Web ACLs) 中评估此规则。   由于延迟，此规则适用的阈值可能略有不同。在规则开始匹配后续尝试之前，客户端发送账户创建失败尝试的次数可能会超过允许的次数。  规则操作：Block 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:session:successful_creation_response:low` 和 `awswaf:managed:aws:acfp:VolumetricSessionSuccessfulResponse`  该规则组还将以下相关标签应用于请求。所有计数均适用 30 分钟窗口。`awswaf:managed:aws:acfp:aggregate:volumetric:session:successful_creation_response:high` 对应超过 10 个成功请求，`awswaf:managed:aws:acfp:aggregate:volumetric:session:successful_creation_response:medium` 对应超过 5个成功请求，`awswaf:managed:aws:acfp:aggregate:volumetric:session:failed_creation_response:high` 对应超过 10 个失败请求，`awswaf:managed:aws:acfp:aggregate:volumetric:session:failed_creation_response:medium` 对应超过 5 个失败请求，`awswaf:managed:aws:acfp:aggregate:volumetric:session:failed_creation_response:low` 对应超过 1 个失败请求。  | 
| VolumetricSessionTokenReuseIp |  检查是否存在账户创建请求在 5 个以上不同 IP 地址中使用同一令牌。  由于延迟，此规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作：Block 标签：`awswaf:managed:aws:acfp:aggregate:volumetric:session:creation:token_reuse:ip` 和 `awswaf:managed:aws:acfp:VolumetricSessionTokenReuseIp`  | 

# AWS WAF 防欺诈控制账户盗用 (ATP) 规则组
<a name="aws-managed-rule-groups-atp"></a>

本节介绍 AWS WAF 欺诈控制账户接管预防 (ATP) 托管规则组的作用。

VendorName:`AWS`，名称：`AWSManagedRulesATPRuleSet`，WCU：50

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

F AWS WAF raud Control 账户盗用预防 (ATP) 管理的规则组标记并管理可能属于恶意账户接管尝试的请求。规则组通过检查客户端发送到应用程序登录端点的登录尝试来实现此目的。
+ **请求检查** – ATP 允许您查看和控制异常登录尝试和使用被盗凭证的登录尝试，以防止可能导致欺诈活动的账户盗用。ATP 根据被盗凭证数据库检查电子邮件和密码组合，当在暗网上发现新的泄露凭证时，会定期更新。ATP 按 IP 地址和客户端会话汇总数据，以检测和阻止发送过多可疑请求的客户端。
+ **响应检查**-对于 CloudFront 分配，除了检查传入的登录请求外，ATP 规则组还会检查您的应用程序对登录尝试的响应，以跟踪成功率和失败率。利用这些信息，ATP 可以暂时阻止登录失败次数过多的客户端会话或 IP 地址。 AWS WAF 会异步执行响应检查，因此不会增加 Web流量的延迟。

## 使用此规则组的注意事项
<a name="aws-managed-rule-groups-atp-using"></a>

此规则组需要特定配置。如需配置和实施此规则组，请参阅 [AWS WAF 防欺诈控制账户接管 (ATP)](waf-atp.md) 中的指导。

此规则组是 AWS WAF中智能威胁缓解保护的一部分。有关信息，请参阅[中的智能威胁缓解 AWS WAF](waf-managed-protections.md)。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

为了降低成本并确保您可以根据需要管理 Web 流量，请按照 [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md) 中的指导使用此规则组。

此规则组不可与 Amazon Cognito 用户群体一起使用。您无法将使用此规则组的保护包（web ACL）与用户池相关联，也无法将此规则组添加到已与用户池关联的保护包（web ACL）中。

## 此规则组添加的标签
<a name="aws-managed-rule-groups-atp-labels"></a>

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。

### 令牌标签
<a name="aws-managed-rule-groups-atp-labels-token"></a>

该规则组使用 AWS WAF 令牌管理根据令牌的状态检查和标 AWS WAF 记 Web 请求。 AWS WAF 使用令牌进行客户端会话跟踪和验证。

有关令牌和令牌管理的信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。

有关此处描述的标签组件的信息，请参阅 [中的标签语法和命名要求 AWS WAF](waf-rule-label-requirements.md)。

**客户端会话标签**  
该标签`awswaf:managed:token:id:identifier`包含一个唯一标识符， AWS WAF 令牌管理使用该标识符来标识客户端会话。如果客户端获取了新令牌，例如在丢弃其正在使用的令牌之后，标识符可能会更改。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**浏览器指纹标签**  
该标签`awswaf:managed:token:fingerprint:fingerprint-identifier`包含一个强大的浏览器指纹标识符， AWS WAF 令牌管理根据各种客户端浏览器信号计算该标识符。多次尝试获取令牌时，此标识符保持不变。指纹标识符并非仅属于单个客户端。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**令牌状态标签：标签命名空间前缀**  
令牌状态标签报告令牌的状态、质询以及其中包含的 CAPTCHA 信息。

每个令牌状态标签都以下列命名空间前缀之一开头：
+ `awswaf:managed:token:`：用于报告令牌的一般状态以及令牌的质询信息的状态。
+ `awswaf:managed:captcha:`：用于报告令牌的 CAPTCHA 信息的状态。

**令牌状态标签：标签名称**  
在前缀之后，标签的其余部分提供详细的令牌状态信息：
+ `accepted`：请求令牌存在且包含以下内容：
  + 有效的质询或 CAPTCHA 解决方案。
  + 未过期的质询或 CAPTCHA 时间戳。
  + 对保护包（web ACL）有效的域规范。

  示例：标签 `awswaf:managed:token:accepted` 表明 web 请求的令牌具有有效的质询解决方案、未过期的质询时间戳以及有效的域。
+ `rejected`：请求令牌存在但不符合接受标准。

  除了被拒绝的标签外，令牌管理还添加了一个自定义标签命名空间和名称来指示原因。
  + `rejected:not_solved`：令牌缺少质询或 CAPTCHA 解决方案。
  + `rejected:expired`：根据保护包（web ACL）配置的令牌免疫时间，令牌的质询或 CAPTCHA 时间戳已过期。
  + `rejected:domain_mismatch`：令牌的域与保护包（web ACL）的令牌域配置不匹配。
  + `rejected:invalid`— AWS WAF 无法读取指示的标记。

  示例：标签 `awswaf:managed:captcha:rejected` 和 `awswaf:managed:captcha:rejected:expired` 共同表示请求未提供有效的 CAPTCHA 解决方案，因为令牌中的 CAPTCHA 时间戳已超过保护包（web ACL）中配置的 CAPTCHA 令牌免疫时间。
+ `absent`：请求没有令牌，或者令牌管理器无法读取它。

  示例：标签 `awswaf:managed:captcha:absent` 表示请求没有令牌。

### ATP 标签
<a name="aws-managed-rule-groups-atp-labels-rg"></a>

ATP 托管规则组生成带有命名空间前缀 `awswaf:managed:aws:atp:` 的标签，后接自定义命名空间和标签名称。

除了规则列表中注明的标签外，规则组还可以添加以下任何标签：
+ `awswaf:managed:aws:atp:signal:credential_compromised`：表示在请求中提交的凭证位于被盗凭证数据库中。
+ `awswaf:managed:aws:atp:aggregate:attribute:suspicious_tls_fingerprint`— 仅适用于受保护的 Amazon CloudFront 分配。表示客户端会话发送了多个使用可疑 TLS 指纹的请求。
+ `awswaf:managed:aws:atp:aggregate:volumetric:session:token_reuse:ip`：表示有 5 个以上不同的 IP 地址使用同一令牌。由于延迟，此规则适用的阈值可能略有不同。在应用标签之前，一些请求可能会超出限制。

您可以通过调用 `DescribeManagedRuleGroup` 从 API 检索一个规则组的所有标签。标签列在响应的 `AvailableLabels` 属性中。

## 账户盗用防护规则列表
<a name="aws-managed-rule-groups-atp-rules"></a>

此部分列出了 `AWSManagedRulesATPRuleSet` 中的 ATP 规则以及规则组的规则添加到 Web 请求的标签。

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。


| 规则名称 | 描述和标签 | 
| --- | --- | 
| UnsupportedCognitoIDP | 检查流向 Amazon Cognito 用户群体的 Web 流量。ATP 不可用于 Amazon Cognito 用户群体，此规则有助于确保不使用其他 ATP 规则组规则来评估用户群体流量。 规则操作：Block 标签：`awswaf:managed:aws:atp:unsupported:cognito_idp` 和 `awswaf:managed:aws:atp:UnsupportedCognitoIDP`   | 
| VolumetricIpHigh | 检查从各个 IP 地址发送的高流量请求。高流量是指在 10 分钟的窗口内超过 20 个请求。  由于延迟，此规则适用的阈值可能略有不同。对于高流量，在应用规则操作之前，一些请求可能会超出限制。  规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:volumetric:ip:high` 和 `awswaf:managed:aws:atp:VolumetricIpHigh`  该规则组将以下标签应用于中流量（每 10 分钟窗口内超过 15 个请求）和低流量（每 10 分钟窗口内超过 10 个请求）的请求，但不对它们采取任何操作：`awswaf:managed:aws:atp:aggregate:volumetric:ip:medium` 和 `awswaf:managed:aws:atp:aggregate:volumetric:ip:low`。 | 
| VolumetricSession |  检查来自各个客户端会话的高流量请求。其阈值为每 30 分钟窗口内超过 20 个请求。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。  由于延迟，此规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:volumetric:session` 和 `awswaf:managed:aws:atp:VolumetricSession`   | 
| AttributeCompromisedCredentials |  检查来自同一个客户端会话的多个使用被盗凭证的请求。 规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:attribute:compromised_credentials` 和 `awswaf:managed:aws:atp:AttributeCompromisedCredentials`   | 
| AttributeUsernameTraversal |  检查来自同一个客户端会话的多个使用用户名遍历的请求。 规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:attribute:username_traversal` 和 `awswaf:managed:aws:atp:AttributeUsernameTraversal`   | 
| AttributePasswordTraversal |  检查采用相同用户名并使用密码遍历的多个请求。 规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:attribute:password_traversal` 和 `awswaf:managed:aws:atp:AttributePasswordTraversal`   | 
| AttributeLongSession |  检查来自同一个客户端会话的多个使用长时间对话的请求。阈值流量超过为 6 小时，而且每 30 分钟至少有一次登录请求。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。 规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:attribute:long_session` 和 `awswaf:managed:aws:atp:AttributeLongSession`   | 
| TokenRejected |  检查是否有令牌管理部门拒绝的带有令 AWS WAF 牌的请求。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。 规则操作：Block 标签：无。要检查令牌是否被拒绝，请使用标签匹配规则在标签上进行匹配：`awswaf:managed:token:rejected`。  | 
| SignalMissingCredential |  检查是否存在缺少用户名或密码的凭证的请求。 规则操作：Block 标签：`awswaf:managed:aws:atp:signal:missing_credential` 和 `awswaf:managed:aws:atp:SignalMissingCredential`   | 
| VolumetricIpFailedLoginResponseHigh |  检查最近是否存在导致登录尝试失败率过高的 IP 地址。高流量是指在 10 分钟窗口内来自某个 IP 地址的登录请求失败超过 10 个。 如果您已将规则组配置为检查响应正文或 JSON 组件，则 AWS WAF 可以检查这些组件类型的前 65,536 字节 (64 KB) 以查看成功或失败指示器。 此规则根据受保护资源对最近来自相同 IP 地址的登录尝试的成功和失败响应，将规则操作和标签应用于来自某个 IP 地址的新 Web 请求。在配置规则组时，您可以定义如何计算成功和失败。  AWS WAF 仅在保护 Amazon CloudFront 分销的保护包 (Web ACLs) 中评估此规则。   由于延迟，此规则适用的阈值可能略有不同。在规则开始匹配后续尝试之前，客户端发送登录失败尝试的次数可能会超过允许的次数。  规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:volumetric:ip:failed_login_response:high` 和 `awswaf:managed:aws:atp:VolumetricIpFailedLoginResponseHigh`  该规则组还将以下相关标签应用于请求，但没有任何关联操作。所有计数均适用 10 分钟窗口。`awswaf:managed:aws:atp:aggregate:volumetric:ip:failed_login_response:medium` 对应超过 5 个失败请求，`awswaf:managed:aws:atp:aggregate:volumetric:ip:failed_login_response:low` 对应超过 1 个失败请求，`awswaf:managed:aws:atp:aggregate:volumetric:ip:successful_login_response:high` 对应超过 10 个成功请求，`awswaf:managed:aws:atp:aggregate:volumetric:ip:successful_login_response:medium` 对应超过 5 个成功请求，`awswaf:managed:aws:atp:aggregate:volumetric:ip:successful_login_response:low` 对应超过 1 个成功请求。  | 
| VolumetricSessionFailedLoginResponseHigh |  检查最近是否存在导致登录尝试失败率过高的客户端会话。高流量是指在 30 分钟窗口内来自某个客户端会话的登录请求失败超过 10 个。 如果您已将规则组配置为检查响应正文或 JSON 组件，则 AWS WAF 可以检查这些组件类型的前 65,536 字节 (64 KB) 以查看成功或失败指示器。 此规则根据受保护资源对最近来自相同客户端会话的登录尝试的成功和失败响应，将规则操作和标签应用于来自某个客户端会话的新 Web 请求。在配置规则组时，您可以定义如何计算成功和失败。  AWS WAF 仅在保护 Amazon CloudFront 分销的保护包 (Web ACLs) 中评估此规则。   由于延迟，此规则适用的阈值可能略有不同。在规则开始匹配后续尝试之前，客户端发送登录失败尝试的次数可能会超过允许的次数。  仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。 规则操作：Block 标签：`awswaf:managed:aws:atp:aggregate:volumetric:session:failed_login_response:high` 和 `awswaf:managed:aws:atp:VolumetricSessionFailedLoginResponseHigh`  该规则组还将以下相关标签应用于请求，但没有任何关联操作。所有计数均适用 30 分钟窗口。`awswaf:managed:aws:atp:aggregate:volumetric:session:failed_login_response:medium` 对应超过 5 个失败请求，`awswaf:managed:aws:atp:aggregate:volumetric:session:failed_login_response:low` 对应超过 1 个失败请求，`awswaf:managed:aws:atp:aggregate:volumetric:session:successful_login_response:high` 对应超过 10 个成功请求，`awswaf:managed:aws:atp:aggregate:volumetric:session:successful_login_response:medium` 对应超过 5 个成功请求，`awswaf:managed:aws:atp:aggregate:volumetric:session:successful_login_response:low` 对应超过 1 个成功请求。  | 

# AWS WAF 机器人控制规则组
<a name="aws-managed-rule-groups-bot"></a>

本节介绍了机器人控制功能托管规则组的用途。

VendorName:`AWS`，名称：`AWSManagedRulesBotControlRuleSet`，WCU：50

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要为机器人控制功能请求新的机器人分类或需要此处未涵盖的其他信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

机器人控制功能托管规则组提供管理来自机器人的请求的规则。机器人可能会消耗过多的资源，歪曲业务指标，导致停机以及执行恶意活动。

## 保护级别
<a name="aws-managed-rule-groups-bot-prot-levels"></a>

机器人控制功能托管规则组提供两种保护级别供您选择：
+ **常见**：检测各种自我识别的机器人，例如 web 抓取框架、搜索引擎和自动浏览器。此级别的机器人控制功能保护使用传统的机器人检测技术（例如静态请求数据分析）来识别常见的机器人。这些规则会标记来自这些机器人的流量，并阻止他们无法验证的流量。
+ **定向**：包括通用级保护，并针对无法自我识别的复杂机器人添加定向检测。目标保护结合了速率限制和验证码以及后台浏览器质询，缓解了机器人活动。
  + **`TGT_`**：提供目标保护的规则的名称以 `TGT_` 开头。所有目标保护都使用浏览器查询、指纹识别和行为启发式等检测技术来识别恶意机器人流量。
  + **`TGT_ML_`**：使用机器学习的目标保护规则的名称以 `TGT_ML_` 开头。这些规则使用对网站流量统计数据的自动机器学习分析来检测表明分布式、协调的机器人活动的异常行为。 AWS WAF 分析有关您的网站流量的统计信息，例如时间戳、浏览器特征和之前访问的 URL，以改进 Bot Control 机器学习模型。默认情况下，机器学习功能处于启用状态，但您可以在规则组配置中将其禁用。禁用机器学习时， AWS WAF 不评估这些规则。

目标保护级别和 AWS WAF 基于速率的规则声明均提供速率限制。有关两个选项的对比，请参阅 [基于速率的规则和定向机器人控制功能规则中的速率限制选项](waf-rate-limiting-options.md)。

## 使用此规则组的注意事项
<a name="aws-managed-rule-groups-bot-using"></a>

此规则组是 AWS WAF中智能威胁缓解保护的一部分。有关信息，请参阅[中的智能威胁缓解 AWS WAF](waf-managed-protections.md)。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

为了降低成本并确保您可以根据需要管理 Web 流量，请按照 [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md) 中的指导使用此规则组。

我们定期更新基于机器学习的目标保护级规则的机器学习（ML）模型，从而改进机器人预测。基于机器学习的规则采用以 `TGT_ML_` 开头的名称。如果发现这些规则进行的机器人预测突然发生重大变化，请通过您的客户经理联系我们，或在 [AWS 支持 Center](https://console.aws.amazon.com/support/home#/) 开启一个案例。

## 此规则组添加的标签
<a name="aws-managed-rule-groups-bot-labels"></a>

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。

### 令牌标签
<a name="aws-managed-rule-groups-bot-labels-token"></a>

该规则组使用 AWS WAF 令牌管理根据令牌的状态检查和标 AWS WAF 记 Web 请求。 AWS WAF 使用令牌进行客户端会话跟踪和验证。

有关令牌和令牌管理的信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。

有关此处描述的标签组件的信息，请参阅 [中的标签语法和命名要求 AWS WAF](waf-rule-label-requirements.md)。

**客户端会话标签**  
该标签`awswaf:managed:token:id:identifier`包含一个唯一标识符， AWS WAF 令牌管理使用该标识符来标识客户端会话。如果客户端获取了新令牌，例如在丢弃其正在使用的令牌之后，标识符可能会更改。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**浏览器指纹标签**  
该标签`awswaf:managed:token:fingerprint:fingerprint-identifier`包含一个强大的浏览器指纹标识符， AWS WAF 令牌管理根据各种客户端浏览器信号计算该标识符。多次尝试获取令牌时，此标识符保持不变。指纹标识符并非仅属于单个客户端。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**令牌状态标签：标签命名空间前缀**  
令牌状态标签报告令牌的状态、质询以及其中包含的 CAPTCHA 信息。

每个令牌状态标签都以下列命名空间前缀之一开头：
+ `awswaf:managed:token:`：用于报告令牌的一般状态以及令牌的质询信息的状态。
+ `awswaf:managed:captcha:`：用于报告令牌的 CAPTCHA 信息的状态。

**令牌状态标签：标签名称**  
在前缀之后，标签的其余部分提供详细的令牌状态信息：
+ `accepted`：请求令牌存在且包含以下内容：
  + 有效的质询或 CAPTCHA 解决方案。
  + 未过期的质询或 CAPTCHA 时间戳。
  + 对保护包（web ACL）有效的域规范。

  示例：标签 `awswaf:managed:token:accepted` 表明 web 请求的令牌具有有效的质询解决方案、未过期的质询时间戳以及有效的域。
+ `rejected`：请求令牌存在但不符合接受标准。

  除了被拒绝的标签外，令牌管理还添加了一个自定义标签命名空间和名称来指示原因。
  + `rejected:not_solved`：令牌缺少质询或 CAPTCHA 解决方案。
  + `rejected:expired`：根据保护包（web ACL）配置的令牌免疫时间，令牌的质询或 CAPTCHA 时间戳已过期。
  + `rejected:domain_mismatch`：令牌的域与保护包（web ACL）的令牌域配置不匹配。
  + `rejected:invalid`— AWS WAF 无法读取指示的标记。

  示例：标签 `awswaf:managed:captcha:rejected` 和 `awswaf:managed:captcha:rejected:expired` 共同表示请求未提供有效的 CAPTCHA 解决方案，因为令牌中的 CAPTCHA 时间戳已超过保护包（web ACL）中配置的 CAPTCHA 令牌免疫时间。
+ `absent`：请求没有令牌，或者令牌管理器无法读取它。

  示例：标签 `awswaf:managed:captcha:absent` 表示请求没有令牌。

### 机器人控制功能标签
<a name="aws-managed-rule-groups-bot-labels-rg"></a>

机器人控制功能托管规则组生成带有命名空间前缀的标签，`awswaf:managed:aws:bot-control:`后面是自定义命名空间和标签名称。规则组可能会向一个请求添加多个标签。

每个标签都反映了机器人控制功能规则的调查发现：
+ `awswaf:managed:aws:bot-control:bot:`：有关与请求关联的机器人的信息。
  + `awswaf:managed:aws:bot-control:bot:name:<name>`：机器人名称（如有），如自定义命名空间 `bot:name:slurp`、`bot:name:googlebot` 和 `bot:name:pocket_parser`。
  + `awswaf:managed:aws:bot-control:bot:name:<rfc_name>`— 使用 WBA 签名中的 RFC 产品令牌识别特定的机器人。这用于为特定的机器人创建精细的自定义规则。例如，允许`GoogleBot`但限制其他爬虫的速率。
  + `awswaf:managed:aws:bot-control:bot:category:<category>`— 机器人的类别，例如 AWS WAF，由`bot:category:search_engine`和定义`bot:category:content_fetcher`。
  + `awswaf:managed:aws:bot-control:bot:account:<hash>`—仅适用于使用 Amazon Bedrock Agent Core 的机器人。此标签包含一个不透明的哈希值，用于唯一标识拥有代理的 AWS 账户。使用此标签创建自定义规则，允许、屏蔽或限制来自特定 AWS 账户的机器人，而无需在日志中暴露账户 IDs 。
  + `awswaf:managed:aws:bot-control:bot:web_bot_auth:<status>`— 在对请求执行 Web 机器人身份验证 (WBA) 验证时适用。状态后缀表示验证结果：
    + `web_bot_auth:verified`— 根据公钥目录成功验证签名
    + `web_bot_auth:invalid`— 签名存在，但密码验证失败
    + `web_bot_auth:expired`— 签名使用了过期的加密密钥
    + `web_bot_auth:unknown_bot`— 在密钥目录中找不到密钥 ID
**注意**  
如果`web_bot_auth:verified`标签存在，`TGT_TokenAbsent`则`CategoryAI`和规则不匹配，允许经过验证的 WBA 主机继续操作。
  + `awswaf:managed:aws:bot-control:bot:organization:<organization>`：机器人的发布者，如 `bot:organization:google`。
  + `awswaf:managed:aws:bot-control:bot:verified`：用于表示可以识别自己并且机器人控制功能已经能够验证的机器人。这用于常见的理想机器人，与类别标签（例如 `bot:category:search_engine` 或 `bot:name:googlebot` 等名称标签）结合使用时可能很有效。
**注意**  
机器人控制功能使用来自 Web 请求源的 IP 地址来帮助确定机器人是否经过验证。您无法将其配置为使用 AWS WAF 转发的 IP 配置来检查其他 IP 地址源。如果您已验证通过代理或负载均衡器进行路由的机器人，则可以添加一条在机器人控制功能规则组之前运行的规则来帮助解决此问题。将您的新规则配置为使用转发 IP 地址，并明确允许来自已验证机器人的请求。有关使用转发 IP 地址的信息，请参阅 [在中使用转发的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)。
  + `awswaf:managed:aws:bot-control:bot:vendor:<vendor_name>`— 标识经过验证的机器人的供应商或运营商。目前仅适用于 Agentcore。用于创建自定义规则，允许或屏蔽特定的机器人供应商，而不考虑各个机器人名称。
  + `awswaf:managed:aws:bot-control:bot:user_triggered:verified`：用于表示类似于已验证机器人，但最终用户可以直接调用的机器人。机器人控制功能规则将此类机器人视为未经验证的机器人。
  + `awswaf:managed:aws:bot-control:bot:developer_platform:verified`：用于表示类似于已验证机器人，但开发者平台使用它来编写脚本的机器人，例如 Google Apps 脚本。机器人控制功能规则将此类机器人视为未经验证的机器人。
  + `awswaf:managed:aws:bot-control:bot:unverified`：用于表示可以识别自己的机器人，因此可以对其进行命名和分类，但它不会发布可用于独立验证其身份的信息。这些类型的机器人签名可能会被伪造，因此被视为未经验证。
+ `awswaf:managed:aws:bot-control:targeted:<additional-details> `：用于机器人控制功能目标保护的特定标签。
+ `awswaf:managed:aws:bot-control:signal:<signal-details>` 和 `awswaf:managed:aws:bot-control:targeted:signal:<signal-details> `：用于在某些情况下提供有关请求的更多信息。

  以下是信号标签的示例。该列表并不完整：
  + `awswaf:managed:aws:bot-control:signal:cloud_service_provider:<CSP>`：表示该请求的云服务提供商（CSP）。示例 CSPs 包括`aws`亚马逊 Web Services 基础架构、`gcp`谷歌云平台 (GCP) 基础架构、`azure`微软 Azure 云服务和 `oracle` Oracle 云服务。
  + `awswaf:managed:aws:bot-control:targeted:signal:browser_automation_extension`：表示检测到有助于自动化的浏览器扩展，如 SeleniumIDE。

    只要用户安装了这种类型的扩展，即使他们没有积极使用它，也会添加此标签。如果为此实施标签匹配规则，请注意规则逻辑和操作设置中存在误报的可能性。例如，您可以使用 CAPTCHA 操作代替 Block，或者可以将此标签匹配与其他标签匹配相结合，以增强您对正在使用自动化的信心。
  + `awswaf:managed:aws:bot-control:signal:automated_browser`：表示请求包含表明客户端浏览器可能已自动运行的指标。
  + `awswaf:managed:aws:bot-control:targeted:signal:automated_browser`— 表示请求的 AWS WAF 令牌包含表明客户端浏览器可能已自动运行的指标。

您可以通过调用 `DescribeManagedRuleGroup` 从 API 检索一个规则组的所有标签。标签列在响应的 `AvailableLabels` 属性中。

机器人控制功能托管规则组将标签应用于一组通常允许的可验证机器人。规则组不会阻止这些已验证机器人。如果需要，您可以编写使用机器人控制功能托管规则组所应用的标签的自定义规则，以阻止这些机器人或其中的一部分。有关此项与示例的更多信息，请参阅 [AWS WAF 机器人控制](waf-bot-control.md)。

## 机器人控制功能规则列表
<a name="aws-managed-rule-groups-bot-rules"></a>

此部分列出了机器人控制功能规则。

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要为机器人控制功能请求新的机器人分类或需要此处未涵盖的其他信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。


| 规则名称 | 说明 | 
| --- | --- | 
| CategoryAdvertising |  检查是否存在用于广告目的的机器人。例如，您可能会使用第三方广告服务，这些服务需要以编程方式访问您的网站。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:advertising` 和 `awswaf:managed:aws:bot-control:CategoryAdvertising`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryArchiver |  检查是否存在用于存档目的的机器人。这些机器人会爬网并捕获内容以创建档案。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:archiver` 和 `awswaf:managed:aws:bot-control:CategoryArchiver`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryContentFetcher |  检查是否存在代表用户访问应用程序网站、获取 RSS feed 等内容或验证您的内容的机器人。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:content_fetcher` 和 `awswaf:managed:aws:bot-control:CategoryContentFetcher`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryEmailClient |  检查是否存在检查电子邮件中指向应用程序网站的链接的机器人。这可能包括企业和电子邮件提供程序运行的机器人，用于验证电子邮件中的链接并举报可疑电子邮件。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:email_client` 和 `awswaf:managed:aws:bot-control:CategoryEmailClient`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryHttpLibrary |  检查机器人从各种编程语言的 HTTP 库中生成的请求。其中可能包括您选择允许或监控的 API 请求。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:http_library` 和 `awswaf:managed:aws:bot-control:CategoryHttpLibrary`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryLinkChecker |  检查是否存在检查断开链接的机器人。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:link_checker` 和 `awswaf:managed:aws:bot-control:CategoryLinkChecker`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryMiscellaneous |  检查是否存在与其他类别不匹配的其他机器人。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:miscellaneous` 和 `awswaf:managed:aws:bot-control:CategoryMiscellaneous`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryMonitoring |  检查是否存在用于监控目的的机器人。例如，您可以使用机器人监控服务，这些服务会定期对应用程序网站执行 Ping 操作，以监控性能和正常运行时间等信息。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:monitoring` 和 `awswaf:managed:aws:bot-control:CategoryMonitoring`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryPagePreview |  检查在消息平台、社交媒体或协作工具上共享内容时生成页面预览和链接预览的机器人。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:page_preview` 和 `awswaf:managed:aws:bot-control:CategoryPagePreview`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryScrapingFramework |  检查来自网页抓取框架的机器人，这些框架用于自动爬取和从网站提取内容。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:scraping_framework` 和 `awswaf:managed:aws:bot-control:CategoryScrapingFramework`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategorySearchEngine |  检查是否存在搜索引擎机器人，这些机器人会抓取网站以进行内容索引并提供信息以生成搜索引擎结果。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:search_engine` 和 `awswaf:managed:aws:bot-control:CategorySearchEngine`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategorySecurity |  检查是否存在扫描 Web 应用程序漏洞或执行安全审核的机器人。例如，您可以使用第三方安全供应商来扫描、监控或审核 Web 应用程序的安全性。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:security` 和 `awswaf:managed:aws:bot-control:CategorySecurity`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategorySeo |  检查用于搜索引擎优化的机器人。例如，您可以使用搜索引擎工具来抓取您的网站，以帮助您提高搜索引擎排名。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:seo` 和 `awswaf:managed:aws:bot-control:CategorySeo`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategorySocialMedia |  检查社交媒体平台是否使用机器人，以便在用户共享您的内容时提供内容摘要。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:social_media` 和 `awswaf:managed:aws:bot-control:CategorySocialMedia`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryWebhooks |  检查是否有通过 HTTP 回调将自动通知和数据更新从一个应用程序发送到另一个应用程序的机器人。 规则操作，仅适用于未经验证的机器人：Block 标签：`awswaf:managed:aws:bot-control:bot:category:webhooks` 和 `awswaf:managed:aws:bot-control:CategoryWebhooks`  对于已验证机器人，规则组不匹配此规则，不采取任何行动，但会添加机器人名称以及规则标签和标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| CategoryAI |  检查是否存在人工智能（AI）机器人。 无论机器人是否经过验证，此规则都将该操作应用于所有匹配项。 规则操作：Block 标签：`awswaf:managed:aws:bot-control:bot:category:ai` 和 `awswaf:managed:aws:bot-control:CategoryAI`  对于经过验证的机器人，此规则组与该规则匹配并采取行动。此外还添加了机器人名称和类别标签、规则标签以及标签 `awswaf:managed:aws:bot-control:bot:verified`。  | 
| SignalAutomatedBrowser |  检查并非来自已验证机器人的请求中是否显示客户端浏览器可能已自动运行。自动浏览器可用于测试或抓取。例如，您可以使用这些类型的浏览器来监控或验证您的应用程序网站。 规则操作：Block 标签：`awswaf:managed:aws:bot-control:signal:automated_browser` 和 `awswaf:managed:aws:bot-control:SignalAutomatedBrowser`  对于经过验证的机器人，此规则组与该规则不匹配，且不应用任何信号或规则标签。  | 
| SignalKnownBotDataCenter |  检查并非来自已验证机器人的请求中是否显示有机器人通常使用的数据中心。 规则操作：Block 标签：`awswaf:managed:aws:bot-control:signal:known_bot_data_center` 和 `awswaf:managed:aws:bot-control:SignalKnownBotDataCenter`  对于经过验证的机器人，此规则组与该规则不匹配，且不应用任何信号或规则标签。  | 
| SignalNonBrowserUserAgent |  检查并非来自已验证机器人的请求，了解是否存在似乎并非来自 Web 浏览器的用户代理字符串。此类别可以包括 API 请求。 规则操作：Block 标签：`awswaf:managed:aws:bot-control:signal:non_browser_user_agent` 和 `awswaf:managed:aws:bot-control:SignalNonBrowserUserAgent`  对于经过验证的机器人，此规则组与该规则不匹配，且不应用任何信号或规则标签。  | 
| TGT\$1VolumetricIpTokenAbsent |  检查并非来自已验证机器人的请求，了解在过去 5 分钟内是否有 5 个或更多来自一个客户端的不含有效质询令牌的请求。有关 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md) 令牌的更多信息，请参阅。 如果来自同一客户端的请求最近缺少令牌，则此规则可能会与具有令牌的请求相匹配。 由于延迟，此规则适用的阈值可能略有不同。  此规则对缺失令牌的处理方式与令牌标签不同：`awswaf:managed:token:absent`。令牌标签会标记没有令牌的单个请求。此规则会为每个客户端 IP 保留缺少令牌的请求计数，并与超过限制的客户端进行匹配。 规则操作：Challenge 标签：`awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:ip:token_absent` 和 `awswaf:managed:aws:bot-control:TGT_VolumetricIpTokenAbsent`   | 
| TGT\$1TokenAbsent |  检查并非来自已验证机器人的请求是否不含有效质询令牌。有关 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md) 令牌的更多信息，请参阅。 规则操作：Count 标签：`awswaf:managed:aws:bot-control:TGT_TokenAbsent`  | 
| TGT\$1VolumetricSession |  检查客户端会话在任意 5 分钟窗口内是否出现并非来自已验证机器人的异常大量请求。该评估基于与使用历史交通模式 AWS WAF 保持的标准体积基线的比较。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。  启用后，此规则可能需要 5 分钟才能生效。Bot Control 通过将当前流量与计算的流量基线进行比较来识别网络流量中的异常行为。 AWS WAF   规则操作：CAPTCHA 标签：`awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:session:high` 和 `awswaf:managed:aws:bot-control:TGT_VolumetricSession`  规则组将以下标签应用于高于最低阈值的中流量和较低流量的请求。对于这些级别，无论客户端是否经过验证，该规则都不采取任何行动：`awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:session:medium` 和 `awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:session:low`。  | 
| TGT\$1VolumetricSessionMaximum |  检查客户端会话在任意 5 分钟窗口内是否出现并非来自已验证机器人的异常大量请求。该评估基于与使用历史交通模式 AWS WAF 保持的标准体积基线的比较。 此规则表示评估的最大可信度。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。  启用后，此规则可能需要 5 分钟才能生效。Bot Control 通过将当前流量与计算的流量基线进行比较来识别网络流量中的异常行为。 AWS WAF   规则操作：Block 标签：`awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:session:maximum` 和 `awswaf:managed:aws:bot-control:TGT_VolumetricSessionMaximum`   | 
| TGT\$1SignalAutomatedBrowser |  检查并非来自已验证机器人的请求的令牌，以了解是否有迹象表明客户端浏览器可能已自动运行。有关更多信息，请参阅 [AWS WAF 代币特征](waf-tokens-details.md)。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。 规则操作：CAPTCHA 标签：`awswaf:managed:aws:bot-control:targeted:signal:automated_browser` 和 `awswaf:managed:aws:bot-control:TGT_SignalAutomatedBrowser`   | 
| TGT\$1SignalBrowserAutomationExtension |  检查并非来自已验证机器人的请求是否显示存在有助于自动化的浏览器扩展，比如 Selenium IDE。只要用户安装了这种类型的扩展，即使他们没有积极使用它，此规则都匹配。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。 规则操作：CAPTCHA 标签：`awswaf:managed:aws:bot-control:targeted:signal:browser_automation_extension` 和 `awswaf:managed:aws:bot-control:TGT_SignalBrowserAutomationExtension`  | 
| TGT\$1SignalBrowserInconsistency |  检查并非来自已验证机器人的请求是否存在不一致的浏览器询问数据。有关更多信息，请参阅 [AWS WAF 代币特征](waf-tokens-details.md)。 仅当 Web 请求具有令牌时，此检查才适用。通过应用程序集成 SDKs 和规则操作将令牌添加到请求中，CAPTCHA以及Challenge。有关更多信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。 规则操作：CAPTCHA 标签：`awswaf:managed:aws:bot-control:targeted:signal:browser_inconsistency` 和 `awswaf:managed:aws:bot-control:TGT_SignalBrowserInconsistency`   | 
|  TGT\$1ML\$1CoordinatedActivityLow, TGT\$1ML\$1CoordinatedActivityMedium, TGT\$1ML\$1CoordinatedActivityHigh  |  检查并非来自已验证机器人的请求是否存在与分布式、协调的机器人活动一致的异常行为。规则级别表示一组请求参与协调攻击的可信度。  仅当规则组配置为使用机器学习（ML）时，这些规则才会运行。有关配置此选择的信息，请参阅 [将 AWS WAF Bot Control 托管规则组添加到 Web ACL](waf-bot-control-rg-using.md)。   由于延迟，这些规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  AWS WAF 通过机器学习分析网站流量统计数据来执行此检查。 AWS WAF 每隔几分钟分析一次网络流量，并优化分析以检测分布在许多 IP 地址上的低强度、持续时间长的机器人。 在确定未进行协调攻击之前，这些规则可能与极少数请求相匹配。因此，如果您只看到一两个匹配项，则结果可能是误报。但是，如果您看到很多符合这些规则的匹配项，那么您可能正在经历协调攻击。  使用 ML 选项启用机器人控制功能定向规则后，这些规则可能需要长达 24 小时才能生效。Bot Control 通过将当前流量与计算出的流量基线进行比较来识别网络流量中的异常行为。 AWS WAF AWS WAF 仅在您使用带有 ML 选项的 Bot Control 目标规则时才计算基线，并且最多可能需要 24 小时才能建立有意义的基准。  我们定期更新这些规则的机器学习模型，从而改进机器人预测。如果发现这些规则进行的机器人预测突然发生重大变化，请联系您的客户经理，或在 [AWS 支持 Center](https://console.aws.amazon.com/support/home#/) 开启一个案例。 规则操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-bot.html) 标签：`awswaf:managed:aws:bot-control:targeted:aggregate:coordinated_activity:low\|medium\|high` 和 `awswaf:managed:aws:bot-control:TGT_ML_CoordinatedActivityLow\|Medium\|High`   | 
|  TGT\$1TokenReuseIpLow, TGT\$1TokenReuseIpMedium, TGT\$1TokenReuseIpHigh  |  检查不是来自经过验证的机器人的请求，以便在过去 5 分钟内使用多个令牌 IPs 中的单个令牌。每个级别对不同级别的数量都有限制 IPs： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-bot.html)  由于延迟，这些规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-bot.html) 标签：`awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:session:token_reuse:ip:low\|medium\|high` 和 `awswaf:managed:aws:bot-control:TGT_TokenReuseIpLow\|Medium\|High`   | 
|  TGT\$1TokenReuseCountryLow, TGT\$1TokenReuseCountryMedium, TGT\$1TokenReuseCountryHigh  |  检查并非来自已验证机器人的请求在过去 5 分钟内是否有多个国家/地区共用一个令牌。每个级别对不同国家/地区的数量都有一个限制。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-bot.html)  由于延迟，这些规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-bot.html) 标签：`awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:session:token_reuse:country:low\|medium\|high` 和 `awswaf:managed:aws:bot-control:TGT_TokenReuseCountryLow\|Medium\|High`   | 
|  TGT\$1TokenReuseAsnLow, TGT\$1TokenReuseAsnMedium, TGT\$1TokenReuseAsnHigh  |  在过去 5 分钟内，检查不是来自经过验证的机器人在多个网络自治系统编号 (ASNs) 上使用单个令牌的请求。每个级别对不同级别的数量都有限制 ASNs： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-bot.html)  由于延迟，这些规则适用的阈值可能略有不同。在应用规则操作之前，一些请求可能会超出限制。  规则操作： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-bot.html) 标签：`awswaf:managed:aws:bot-control:targeted:aggregate:volumetric:session:token_reuse:asn:low\|medium\|high` 和 `awswaf:managed:aws:bot-control:TGT_TokenReuseAsnLow\|Medium\|High`   | 

# AWS WAF 分布式拒绝服务 (DDoS) 防护规则组
<a name="aws-managed-rule-groups-anti-ddos"></a>

本节介绍用于防范分布式拒绝服务 (DDoS) 攻击的 AWS WAF 托管规则组。

VendorName:`AWS`，名称：`AWSManagedRulesAntiDDoSRuleSet`，WCU：50

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。

Ant DDo i-S 托管规则组提供用于检测和管理参与或可能参与 DDo S 攻击的请求的规则。此外，该规则组会标记其在可能事件期间评估的所有请求。

## 使用此规则组的注意事项
<a name="aws-managed-rule-groups-anti-ddos-using"></a>

此规则组为进入受到 DDo S 攻击的资源的 Web 请求提供软缓解和硬缓解措施。要检测不同的威胁级别，可将两种缓解措施的敏感度分别调整为高、中或低可疑级别。
+ **软缓解措施**：规则组可发送静默浏览器质询，以响应能够处理质询插页式广告的请求。有关运行质询的要求的信息，请参阅 [CAPTCHA 和 Challenge 操作行为](waf-captcha-and-challenge-actions.md)。
+ **硬缓解措施**：规则组可以完全阻止请求。

有关规则组如何工作以及如何配置规则组的更多信息，请参阅 [使用 Ant DDo i-S 托管规则组进行高级 AWS WAF 反 DDo S 保护](waf-anti-ddos-advanced.md)。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

此规则组是 AWS WAF中智能威胁缓解保护的一部分。有关信息，请参阅[中的智能威胁缓解 AWS WAF](waf-managed-protections.md)。

为大幅降低成本并优化流量管理，请根据最佳实践指南使用此规则组。请参阅 [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md)。

## 此规则组添加的标签
<a name="aws-managed-rule-groups-anti-ddos-labels"></a>

此托管规则组会为其评估的 Web 请求添加标签，这些标签可用于在保护包 (Web ACL) 中在此规则组之后运行的规则。 AWS WAF 还会记录亚马逊 CloudWatch 指标的标签。有关标签和标签指标的一般信息，请参阅 [Web 请求标签](waf-labels.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。

### 令牌标签
<a name="aws-managed-rule-groups-anti-ddos-labels-token"></a>

该规则组使用 AWS WAF 令牌管理根据令牌的状态检查和标 AWS WAF 记 Web 请求。 AWS WAF 使用令牌进行客户端会话跟踪和验证。

有关令牌和令牌管理的信息，请参阅 [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。

有关此处描述的标签组件的信息，请参阅 [中的标签语法和命名要求 AWS WAF](waf-rule-label-requirements.md)。

**客户端会话标签**  
该标签`awswaf:managed:token:id:identifier`包含一个唯一标识符， AWS WAF 令牌管理使用该标识符来标识客户端会话。如果客户端获取了新令牌，例如在丢弃其正在使用的令牌之后，标识符可能会更改。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**浏览器指纹标签**  
该标签`awswaf:managed:token:fingerprint:fingerprint-identifier`包含一个强大的浏览器指纹标识符， AWS WAF 令牌管理根据各种客户端浏览器信号计算该标识符。多次尝试获取令牌时，此标识符保持不变。指纹标识符并非仅属于单个客户端。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**令牌状态标签：标签命名空间前缀**  
令牌状态标签报告令牌的状态、质询以及其中包含的 CAPTCHA 信息。

每个令牌状态标签都以下列命名空间前缀之一开头：
+ `awswaf:managed:token:`：用于报告令牌的一般状态以及令牌的质询信息的状态。
+ `awswaf:managed:captcha:`：用于报告令牌的 CAPTCHA 信息的状态。

**令牌状态标签：标签名称**  
在前缀之后，标签的其余部分提供详细的令牌状态信息：
+ `accepted`：请求令牌存在且包含以下内容：
  + 有效的质询或 CAPTCHA 解决方案。
  + 未过期的质询或 CAPTCHA 时间戳。
  + 对保护包（web ACL）有效的域规范。

  示例：标签 `awswaf:managed:token:accepted` 表明 web 请求的令牌具有有效的质询解决方案、未过期的质询时间戳以及有效的域。
+ `rejected`：请求令牌存在但不符合接受标准。

  除了被拒绝的标签外，令牌管理还添加了一个自定义标签命名空间和名称来指示原因。
  + `rejected:not_solved`：令牌缺少质询或 CAPTCHA 解决方案。
  + `rejected:expired`：根据保护包（web ACL）配置的令牌免疫时间，令牌的质询或 CAPTCHA 时间戳已过期。
  + `rejected:domain_mismatch`：令牌的域与保护包（web ACL）的令牌域配置不匹配。
  + `rejected:invalid`— AWS WAF 无法读取指示的标记。

  示例：标签 `awswaf:managed:captcha:rejected` 和 `awswaf:managed:captcha:rejected:expired` 共同表示请求未提供有效的 CAPTCHA 解决方案，因为令牌中的 CAPTCHA 时间戳已超过保护包（web ACL）中配置的 CAPTCHA 令牌免疫时间。
+ `absent`：请求没有令牌，或者令牌管理器无法读取它。

  示例：标签 `awswaf:managed:captcha:absent` 表示请求没有令牌。

### 反 DDo S 标签
<a name="aws-managed-rule-groups-anti-ddos-labels-rg"></a>

Anti-DDo S 托管规则组生成带有命名空间前缀的标签，`awswaf:managed:aws:anti-ddos:`后跟任何自定义命名空间和标签名称。每个标签都反映了Anti-DDo S发现的某些方面。

除单个规则添加的标签以外，规则组还可向请求添加以下多个标签。
+ `awswaf:managed:aws:anti-ddos:event-detected`— 表示请求将发送到受保护的资源，托管规则组检测到该资源的 DDo S 事件。当流向资源的流量与资源的流量基准存在明显偏差时，托管规则组会检测事件。

  规则组会在资源处于此状态期间，将此标签添加到发往该资源的所有请求中，因此合法流量和攻击流量都会获得此标签。
+ `awswaf:managed:aws:anti-ddos:ddos-request`：表示请求来自涉嫌参与某事件的来源。

  除常规标签以外，规则组还可添加以下表示置信度级别的标签。

  `awswaf:managed:aws:anti-ddos:low-suspicion-ddos-request`— 表示可能有 DDo S 攻击请求。

  `awswaf:managed:aws:anti-ddos:medium-suspicion-ddos-request`— 表示很可能 DDo是 S 攻击请求。

  `awswaf:managed:aws:anti-ddos:high-suspicion-ddos-request`— 表示极有可能 DDo的 S 攻击请求。
+ `awswaf:managed:aws:anti-ddos:challengeable-request`：表示请求 URI 能够处理 Challenge 操作。托管规则组将其应用于任何 URI 未获得豁免的请求。 URIs 如果它们与规则组的豁免 URI 正则表达式相匹配，则免除。

  有关可执行静默浏览器质询请求的要求信息。请参阅 [CAPTCHA 和 Challenge 操作行为](waf-captcha-and-challenge-actions.md)。

您可以通过调用 `DescribeManagedRuleGroup` 从 API 检索一个规则组的所有标签。标签列在响应的 `AvailableLabels` 属性中。

Anti-DDo S 托管规则组将标签应用于请求，但并不总是对它们采取行动。请求管理取决于规则组确定参与攻击的置信度。如有需要，可添加在规则组之后运行的标签匹配规则，以管理规则组标记的请求。有关此项与示例的更多信息，请参阅 [AWS WAF 分布式拒绝服务防护 DDo](waf-anti-ddos.md)。

## 反 DDo S 规则清单
<a name="aws-managed-rule-groups-anti-ddos-rules"></a>

本节列出了反 DDo S 规则。

 

**注意**  
本文档包含此托管规则组的最新静态版本。我们在 [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md) 的更改日志中报告版本变更。有关其他版本的信息，请使用 API 命令[DescribeManagedRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_DescribeManagedRuleGroup.html)。  
我们在 AWS 托管规则组中发布的规则信息旨在为您提供使用规则所需的信息，而不会向不良行为者提供他们规避规则所需的信息。  
如果您需要更多信息，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。


| 规则名称 | 说明 | 
| --- | --- | 
| ChallengeAllDuringEvent |  匹配当前遭受攻击的，任何受保护资源上带有标签 `awswaf:managed:aws:anti-ddos:challengeable-request` 的请求。 规则操作：Challenge 仅可将此规则操作覆盖为 Allow 或 Count。不建议使用 Allow。对于任何规则操作设置，该规则仅匹配带有 `challengeable-request` 标签的请求。 此规则的配置会影响下一条规则的评估`ChallengeDDoSRequests`。 AWS WAF 只有在托管规则组的 Web ACL 配置中Count，此规则的操作将覆盖设置为时，才会评估该规则。 如果您的工作负载容易受到意外请求量变化的影响，我们建议对所有可质询的请求进行质询，方法是保持默认操作设置为 Challenge。对于敏感度较低的应用程序，可将此规则的操作设置为 Count，然后通过规则 `ChallengeDDoSRequests` 调整 Challenge 响应的敏感度。 标签：`awswaf:managed:aws:anti-ddos:ChallengeAllDuringEvent`  | 
| ChallengeDDoSRequests |  在资源遭受攻击期间，匹配受保护资源的请求，该资源满足或超过规则组已配置的质询敏感度设置。 规则操作：Challenge 仅可将此规则操作覆盖为 Allow 或 Count。不建议使用 Allow。任何情况下，该规则仅匹配带有 `challengeable-request` 标签的请求。 AWS WAF 只有当你将之前的规则Count中的操作改写为时，`ChallengeAllDuringEvent`才会评估此规则。 标签：`awswaf:managed:aws:anti-ddos:ChallengeDDoSRequests`  | 
| DDoSRequests |  在资源遭受攻击期间，匹配受保护资源的请求，该资源满足或超过规则组已配置的阻断敏感度设置。 规则操作：Block 标签：`awswaf:managed:aws:anti-ddos:DDoSRequests`  | 

# 版本化 AWS 托管规则规则组的部署
<a name="waf-managed-rule-groups-deployments"></a>

本节介绍如何将更新 AWS 部署到 AWS 托管规则规则组。

AWS 在三个标准部署中部署对其版本化 AWS 托管规则组的更改：候选版本、静态版本和默认版本。此外，有时 AWS 可能需要发布异常部署或回滚默认版本部署。

**注意**  
本节仅适用于版本化的 AWS 托管规则规则组。唯一不受版本控制的规则组是 IP 信誉规则组。

**Topics**
+ [AWS 托管规则规则组部署通知](waf-managed-rule-groups-deployments-notifications.md)
+ [AWS 托管规则的标准部署概述](waf-managed-rule-groups-deployments-standard.md)
+ [AWS 托管规则的典型版本状态](waf-managed-rule-groups-typical-version-states.md)
+ [AWS 托管规则的发布候选部署](waf-managed-rule-groups-deployments-release-candidate.md)
+ [AWS 托管规则的静态版本部署](waf-managed-rule-groups-deployments-static-version.md)
+ [AWS 托管规则的默认版本部署](waf-managed-rule-groups-deployments-default-version.md)
+ [AWS 托管规则的异常部署](waf-managed-rule-groups-deployments-exceptions.md)
+ [AWS 托管规则的默认部署回滚](waf-managed-rule-groups-deployments-default-rollbacks.md)

# AWS 托管规则规则组部署通知
<a name="waf-managed-rule-groups-deployments-notifications"></a>

本节介绍了 Amazon SNS 通知如何与 AWS 托管规则规则组配合使用。

 AWS 受版本控制的托管规则组都为部署提供 SNS 更新通知，并且都使用相同的 SNS 主题 Amazon 资源名称 (ARN)。唯一不受版本控制的规则组是 IP 信誉规则组。

对于影响保护的部署（例如对默认版本的更改）， AWS 提供 SNS 通知，以通知您计划中的部署并告知您何时开始部署。对于不影响保护的部署，例如候选版本和静态版本部署， AWS 可能会在部署开始后甚至在部署完成后通知您。部署完新静态版本后，将在变更日志[AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md)和文档历史记录页面中 AWS 更新本指南。[文档历史记录](doc-history.md)

要接收有关 AWS 托管规则组的所有更新， AWS 请订阅本指南任何 HTML 页面上的 RSS 提要，并订阅 AWS 托管规则规则组的 SNS 主题。有关订阅 SNS 通知的信息，请参阅 [收到有关托管规则组新版本和更新的通知](waf-using-managed-rule-groups-sns-topic.md)。

**SNS 通知内容**  
Amazon SNS 通知中的字段始终包含主题、消息和。 MessageAttributes其他字段取决于消息的类型以及通知所针对的托管规则组。下面是 `AWSManagedRulesCommonRuleSet` 的一个通知列表示例。

```
{
    "Type": "Notification",
    "MessageId": "4286b830-a463-5e61-bd15-e1ae72303868",
    "TopicArn": "arn:aws:sns:us-west-2:123456789012:MyTopic",
    "Subject": "New version available for rule group AWSManagedRulesCommonRuleSet",
    "Message": "Welcome to AWSManagedRulesCommonRuleSet version 1.5! We've updated the regex specification in this version to improve protection coverage, adding protections against insecure deserialization. For details about this change, see http://updatedPublicDocs.html. Look for more exciting updates in the future! ",
    "Timestamp": "2021-08-24T11:12:19.810Z",
    "SignatureVersion": "1",
    "Signature": "EXAMPLEHXgJm...",
    "SigningCertURL": "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
    "SubscribeURL": "https://sns.us-west-2.amazonaws.com/?Action=ConfirmSubscription&TopicArn=arn:aws:sns:us-west-2:123456789012:MyTopic&Token=2336412f37...",
    "MessageAttributes": {
        "major_version": {
            "Type": "String",
            "Value": "v1"
        },
        "managed_rule_group": {
            "Type": "String",
            "Value": "AWSManagedRulesCommonRuleSet"
        }
    }
}
```

# AWS 托管规则的标准部署概述
<a name="waf-managed-rule-groups-deployments-standard"></a>

AWS 使用三个标准部署阶段推出新的 AWS 托管规则功能：候选版本、静态版本和默认版本。

下图描述了这些标准部署。以下各节详述了其中的各个部分。

![\[四条垂直泳道显示了不同的标准部署阶段。最左边的泳道显示默认版本设置为推荐的静态版本 1.4。第二条泳道显示默认设置为候选发布 (RC) 版本，用于测试和调整。RC 版本包含 1.4 规则和 RC 规则。注释表明，测试后，默认值将返回到推荐的静态版本。第三条泳道显示根据候选发布版本中的规则创建静态版本 1.5。第四条泳道显示默认版本设置为新的推荐静态版本 1.5。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/amr-rg-versions-flowchart-diagram.png)


# AWS 托管规则的典型版本状态
<a name="waf-managed-rule-groups-typical-version-states"></a>

通常，版本化托管规则组有许多未过期的静态版本，默认版本指向推荐的静态版本。 AWS 下图显示了一组典型的静态版本和默认版本设置的示例。

![\[三个静态版本 Version_1.2、Version_1.3 和 Version_1.4 堆叠在一起，其中 Version_1.4 位于顶部。Version_1.4 有两个规则，分别为规则 A 和 规则 B，两者都有生产操作。默认版本指示器指向 Version_1.4。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/amr-rg-versions-diagram.png)


静态版本中大多数规则的生产操作是Block，但可能设置为不同的值。有关规则操作设置的详细信息，请在 [AWS 托管规则规则组列表](aws-managed-rule-groups-list.md) 参阅每个规则组的规则列表。

# AWS 托管规则的发布候选部署
<a name="waf-managed-rule-groups-deployments-release-candidate"></a>

本节介绍了临时候选版本部署的工作方式。

当托管规则组 AWS 有一组候选规则变更时，它会在临时候选版本部署中对其进行测试。 AWS 根据生产流量在计数模式下评估候选规则，并执行最终调整活动，包括减少误报。 AWS 测试以这种方式为所有使用规则组默认版本的客户发布候选规则。候选发布版本部署不适用于使用静态版本规则组的客户。

如果您使用默认版本，则候选发布版本部署不会改变规则组管理 Web 流量的方式。在测试候选规则时，您可能会注意到以下几点：
+ 默认版本名称从 `Default (using Version_X.Y)` 更改为 `Default (using Version_X.Y_PLUS_RC_COUNT)`。
+ Amazon 中的其他计数指标 CloudWatch 名称`RC_COUNT`中包含其名称。它们由候选发布规则生成。

AWS 测试候选版本大约一周，然后将其删除并将默认版本重置为当前推荐的静态版本。

AWS 对候选版本部署执行以下步骤：

1. **创建候选版本** — 根据当前推荐的静态版本（即默认版本所指向的版本） AWS 添加候选版本。

   候选发布版本的名称是附加了 `_PLUS_RC_COUNT` 的静态版本名称。例如，如果当前推荐的静态版本是 `Version_2.1`，则候选发布版本将命名为 `Version_2.1_PLUS_RC_COUNT`。

   候选发布版本包含以下规则：
   + 规则完全从当前推荐的静态版本中复制，规则配置未做任何更改。
   + 候选新规则，规则操作设置为 Count，名称以 `_RC_COUNT` 结尾。

     大多数候选规则都对规则组中已存在的规则提供了改进建议。每条规则的名称都是在现有规则的名称后附上 `_RC_COUNT`。

1. **将默认版本设置为候选版本并进行测试** — AWS 将默认版本设置为指向新的候选版本，以根据您的生产流量进行测试。测试通常需要大约一周的时间。

    您将看到默认版本的名称从仅表示静态版本的名称（如 `Default (using Version_1.4)`）更改为表示静态版本加上候选发布规则（如 `Default (using Version_1.4_PLUS_RC_COUNT)`）。此命名方案使您能够识别管理 Web 流量的静态版本。

   下图显示了此时示例规则组版本的状态。  
![\[图的顶部是三个堆叠的静态版本，位于顶层的是 Version_1.4。与静态版本堆栈分开的是版本 Version_1.4_PLUS_RC_COUNT。此版本包含 Version_1.4 中的规则，还包含两个候选发布规则，即 RuleB_RC_COUNT 和 RuleZ_RC_COUNT，两者都带有计数操作。默认版本指示器指向 Version_1.4_PLUS_RC_COUNT。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/amr-rg-versions-rc-diagram.png)

   候选版本规则始终使用 Count 操作进行配置，因此它们不会改变规则组管理 Web 流量的方式。

   候选发布规则生成 Amazon CloudWatch 计数指标， AWS 用于验证行为和识别误报。 AWS 根据需要进行调整，以调整候选发布版本计数规则的行为。

   候选发布版本不是静态版本，也无法从静态规则组版本列表中进行选择。您只能在默认版本规范中看到候选发布版本的名称。

1. **将默认版本恢复为推荐的静态版本**-测试候选发布规则后， AWS 将默认版本设置回当前推荐的静态版本。默认版本名称设置会删除结`_PLUS_RC_COUNT`尾，并且规则组停止为候选发布规则生成 CloudWatch 计数指标。这是一个静默更改，与部署默认版本回滚不同。

   下图显示了候选发布版本测试完成后示例规则组版本的状态。  
![\[这又是典型的版本状态图。三个静态版本 Version_1.2、Version_1.3 和 Version_1.4 堆叠在一起，Version_1.4 位于顶部。Version_1.4 有两个规则，分别为规则 A 和 规则 B，两者都有生产操作。默认版本指示器指向 Version_1.4。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/amr-rg-versions-rc-complete-diagram.png)

**定时和通知**  
AWS 根据需要部署候选发布版本，以测试规则组的改进。
+ **SNS** — 在部署开始时 AWS 发送 SNS 通知。该通知指明了测试候选发布版本的预计时间。测试完成后， AWS 默默返回静态版本设置的默认值，不另行通知。
+ **更改日志**- AWS 不更新此类部署的变更日志或本指南的其他部分。

# AWS 托管规则的静态版本部署
<a name="waf-managed-rule-groups-deployments-static-version"></a>

当 AWS 确定候选版本对规则组进行了有价值的更改时，会根据候选版本为该规则组 AWS 部署新的静态版本。此部署不会更改规则组的默认版本。

新的静态版本包含候选发布版本中的以下规则：
+ 来自先前静态版本的规则，其在候选发布规则中没有替换候选规则。
+ 候选发布规则，包含以下更改：
  + AWS 通过删除候选版本后缀`_RC_COUNT`来更改规则名称。
  + AWS 将规则操作从更改Count为其生产规则操作。

   对于替换先前已有规则的候选发布规则，这将取代新静态版本中先前规则的功能。

下图描述了根据候选发布版本创建新的静态版本的过程。

![\[图片顶部是候选发布版本 Version_1.4_PLUS_RC_COUNT，其规则与之前的候选发布版本部署图中的规则相同。此版本包含 Version_1.4 中的规则，还包含候选发布规则 RuleB_RC_COUNT 和 RuleZ_RC_COUNT，两者都带有计数操作。在此下方，图的底部是静态版本 Version_1.5，其中包含规则 RuleA、RuleB 和 RuleZ，所有这些规则都包含生产操作。箭头从 RC 版本指向 Version_1.5，表示从 Version_1.4 规则中复制了 RuleA，而 RuleB 和 RuleZ 是从候选发布版本规则中复制的。Version_1.5 中的所有规则都有生产操作。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/amr-rg-versions-create-static-diagram.png)


部署后，新的静态版本可供您测试，如果您愿意，也可以将其用于保护中。您可以访问 [AWS 托管规则规则组列表](aws-managed-rule-groups-list.md)，在规则组的规则列表中查看新的和更新的规则操作和描述。

静态版本在部署后是不可变的，并且只有在 AWS 过期时才会更改。有关版本生命周期的信息，请参阅 [在中使用版本化托管规则组 AWS WAF](waf-managed-rule-groups-versioning.md)。

**定时和通知**  
AWS 根据需要部署新的静态版本，以部署对规则组功能的改进。部署静态版本不会影响默认版本设置。
+ **SNS** — 部署完成后 AWS 发送 SNS 通知。
+ **更改日志**-部署完成所有可用区域后，根据需要 AWS 更新本指南中的规则组定义，然后在 Managed Rules 规则组变更日志和文档历史记录页面中宣布发布。 AWS WAF AWS 

# AWS 托管规则的默认版本部署
<a name="waf-managed-rule-groups-deployments-default-version"></a>

当 AWS 确定与当前默认版本相比，新的静态版本为规则组提供了更好的保护时，会将默认版本 AWS 更新为新的静态版本。 AWS 在将一个静态版本升级为规则组的默认版本之前，可能会发布多个静态版本。

下图显示了将默认版本设置 AWS 移至新的静态版本后示例规则组版本的状态。

![\[这与典型的版本状态图类似，但是 Version_1.5 位于堆栈顶部，且默认指示器指向它。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/amr-rg-versions-new-default-diagram.png)


在将此更改部署到默认版本之前，会 AWS 提供通知，以便您可以测试即将到来的更改并为之做好准备。如果您使用默认版本，则无法执行任何操作，并且可以在更新期间继续使用该版本。相反，如果您想在默认版本部署的计划开始之前延迟切换到新版本，则可以明确配置规则组，使其使用作为默认设置的静态版本。

**定时和通知**  
AWS 当它为规则组推荐的静态版本与当前使用的版本不同的静态版本时，会更新默认版本。
+ **SNS** — 至少在目标部署日前一周 AWS 发送 SNS 通知，然后在部署当天，即部署开始时再发送一次 SNS 通知。每份通知都包括规则组名称、默认版本更新到的静态版本、部署日期以及正在执行更新的每个 AWS 区域的计划部署时间。
+ **更改日志**- AWS 不更新此类部署的变更日志或本指南的其他部分。

# AWS 托管规则的异常部署
<a name="waf-managed-rule-groups-deployments-exceptions"></a>

AWS 可能会绕过标准部署阶段，以便快速部署可解决关键安全风险的更新。异常部署可能涉及任何标准部署类型，并且可能会在各个 AWS 地区快速推出。

AWS 为异常部署提供尽可能多的提前通知。

**定时和通知**  
AWS 仅在需要时才执行异常部署。
+ **SNS** — 尽可能在目标部署日之前 AWS 发送 SNS 通知，然后在部署开始时再发送一个 SNS 通知。每份通知都包括规则组名称、正在进行的更改和部署日期。
+ **更改日志** — 如果部署是针对静态版本的，则在所有可用版本的部署完成后，根据需要 AWS 更新本指南中的规则组定义，然后在 Managed Rules 规则组更改日志和文档历史记录页面中宣布该版本。 AWS WAF AWS 

# AWS 托管规则的默认部署回滚
<a name="waf-managed-rule-groups-deployments-default-rollbacks"></a>

在某些条件下， AWS 可能会将默认版本回滚到之前的设置。所有 AWS 区域的回滚时间通常不到十分钟。

AWS 执行回滚只是为了缓解静态版本中的重大问题，例如误报率高得令人无法接受。

回滚默认版本设置后，会 AWS 加快出现问题的静态版本的到期时间，并加快发布新的静态版本以解决该问题。

**定时和通知**  
AWS 仅在需要时才执行默认版本回滚。
+ **SNS** — 在回滚时 AWS 发送单个 SNS 通知。通知包括规则组名称、要对默认版本设置的版本和部署日期。这类部署非常快，因此通知不提供区域的时间信息。
+ **更改日志**- AWS 不更新此类部署的变更日志或本指南的其他部分。

# AWS 托管规则变更日志
<a name="aws-managed-rule-groups-changelog"></a>

本节列出了自 2019 年 11 月发布 AWS WAF 以来对 AWS 托管规则的更改。

**注意**  
此变更日志报告了对的 AWS 托管规则中的规则和规则组的 AWS WAF更改。  
对于 [IP 声誉规则组](aws-managed-rule-groups-ip-rep.md)，此更改日志报告规则和规则组进行了更改，并报告规则使用的 IP 地址列表的来源产生了重大更改。但未报告 IP 地址列表本身的更改，这是因为 IP 地址列表是动态的。如果对 IP 地址列表有疑问，请联系您的客户经理或在 [AWS 支持 Center](https://console.aws.amazon.com/support/home#/) 开启一个案例。


| 规则组和规则 | 说明 | 日期 | 
| --- | --- | --- | 
| [PHP 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-php-app) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html) |  发布了此规则组的静态版本 2.2。 改进了检测功能并添加了`PHPHighRiskMethodsVariables_URIPATH`规则。  | 2026-03-24 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) 新规则： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  已发布此规则组的静态版本 5.0。 在多个类别中添加了 400 多个新机器人，其中包括两个新的机器人类别及其各自的规则：页面预览和 Webhooks。 **主要改进** 提高了机器人检测信号和通用机器人模式匹配的准确性，从而实现了更精确的流量分类。 此更新更改了托管规则组优先考虑机器人检测的方式。现在，先评估特定的未经验证的机器人模式，然后再评估通用模式和检测信号。这意味着更有可能根据请求的最具体特征而不是一般指标对请求进行分类。 **这对您的流量意味着什么：** 现在，通用机器人模式的匹配频率将降低。只有当没有更具体的机器人规则已经识别出流量时，这些模式才适用。这样可以减少过度分类，并确保使用最准确的机器人识别来标记请求。 现在，按照机器人识别规则应用检测信号，例如请求来自云服务提供商、已知机器人数据中心或使用非浏览器用户代理的指标。这样可以确保特定的机器人分类优先于普通流量信号。 **影响：** 您可能会在流量日志中看到更少的通用机器人模式标签，因为现在可以更准确地按特定的机器人规则对请求进行分类。这样可以更清楚地了解自动流量的实际性质，并减少因过于宽泛的模式匹配而产生的噪音。未经验证的机器人分类将更加突出和准确，从而帮助您更好地了解和管理对应用程序的自动请求。 **注意：**此版本包含 Version\$14.0 中的`awswaf:managed:aws:bot-control:bot:web_bot_auth`标签和规则更新，但该`Web Bot Auth`功能仍仅在中可用。CloudFront  | 2026-02-25 | 
| [POSIX 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-posix-os)  |  已发布该规则组的静态版本 3.2。 改进了所有规则的检测签名。  | 2026-01-15 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  已发布此规则组的静态版本 1.25。 更新了`ReactJSRCE_BODY`以改进检测。  | 2025-12-08 | 
| [POSIX 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-posix-os)  |  已发布此规则组的静态版本 3.1。 改进了所有规则的检测签名。  | 2025-12-08 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  已发布此规则组的静态版本 1.24。 更新了`ReactJSRCE_BODY`以改进检测。  | 2025-12-04 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) 新标签：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html) 范围: CloudFront |  部署了新的静态`AWSManagedRulesBotControlRuleSet`版本\$14.0，支持 Web 机器人身份验证 (WBA)，用于加密机器人验证。必须明确选择此版本，并且不会使用默认版本自动更新现有部署。 新功能： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html) 规则更新： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  Version\$14.0 仅是静态版本，它不会更改默认版本行为。要使用 WBA 功能，请在配置 Web ACL 时明确选择版本 \$14.0。   | 2025-11-20 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) 新的经过验证的机器人标签：广告：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)AI:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)内容提取器：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)社交媒体：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html) |  主要改进：  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  Bot Control 中的机器人类别规则仅在未经验证的机器人上触发，CategoryAI 除外，它也会在经过验证的机器人上触发。Version\$13.3 仅是静态版本——它不会更改默认版本行为。   | 2025-11-17 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  发布了此规则组的静态版本 1.20。 改进了服务器端请求伪造（SSRF）规则的检测签名。  | 2025-10-02 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  已发布此规则组的静态版本 1.19。 改进了跨站点脚本规则的检测签名。  | 2025-08-14 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  已发布此规则组的静态版本 1.18。 改进了跨站点脚本规则的检测签名。  | 2025-06-18 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) 新标签： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  已发布该规则组的静态版本 3.2。 添加了列出的新标签。  | 2025-05-29 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  发布了此规则组的静态版本 1.17。 改进了跨站点脚本规则的检测签名。  | 2025-03-03 | 
| [SQL 数据库托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-sql-db) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.3。 向列出的规则添加了双 `URL_DECODE_UNI` 文本转换。  | 2025-01-24 | 
| [Linux 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-linux-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 已发布此规则组的静态版本 2.6。 添加了签名，以改进检测。  | 2025-01-24 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) 机器人控制功能标签中的新机器人名称标签：`awswaf:managed:aws:bot-control:bot::name:nytimes`  | 已发布此规则组的静态版本 3.1。 向机器人名称标签的列表添加了《纽约时报》标签。  | 2024-11-07 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.16。 改进了跨站点脚本规则的检测签名。  | 2024-10-16 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) 新规则： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html) 已删除规则： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html) 新标签： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html) 现有规则中的附加标签。  | 发布了此规则组的静态版本 2.0 和 3.0。版本 2.0 与版本 3.0 相同，但所有新规则的规则操作都设为 Count。本指南列明了每个规则组的最新版本。 添加了列出的新规则。 更新了标签，以便所有规则都能应用带 `awswaf:managed:aws:bot-control:<RuleName>` 模式的标签。 在机器人控制功能信号标签中添加了云服务提供商标签。 添加了新的机器人名称标签，可通过机器人类别规则进行检查。  | 2024-09-13 | 
| [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md) 所有规则  | 发布了此规则组的静态版本 1.1。 更新了标签，以便所有规则都能应用带 `awswaf:managed:aws:atp:<RuleName>` 模式的标签。  | 2024-09-13 | 
| [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md) 所有规则  | 发布了此规则组的静态版本 1.1。 更新了标签，以便所有规则都能应用带 `awswaf:managed:aws:acfp:<RuleName>` 模式的标签。  | 2024-09-13 | 
| [Linux 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-linux-os) 所有规则  | 发布了此规则组的静态版本 2.5。 添加了签名，以改进检测。  | 2024-09-02 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.15。 改进了通用 LFI 规则的检测签名。  | 2024-08-30 | 
| [Windows 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-windows-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.3。 调整了列示规则的检测签名，以减少误报。  | 2024-08-28 | 
| [WordPress 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-wordpress-app) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.3。 向列示规则添加了 JS\$1DECODE 文本转换。  | 2024-07-15 | 
| [Linux 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-linux-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.4。 向列示规则添加了 JS\$1DECODE 文本转换。  | 2024-07-12 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.14。 向列示规则添加了 JS\$1DECODE 文本转换。  | 2024-07-09 | 
| [PHP 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-php-app) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.1。 向列示规则添加了 JS\$1DECODE 文本转换。  | 2024-07-03 | 
| [Windows 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-windows-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.2。 向列示规则添加了 JS\$1DECODE 文本转换。  | 2024-07-03 | 
| [Linux 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-linux-os) 所有规则  | 发布了此规则组的静态版本 2.3。 添加了签名，以改进检测。  | 2024-06-06 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md) [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)  | 机器人和欺诈规则组现已采用版本控制。如果您使用其中任何一个规则组，则此更新不会改变规则组处理 Web 流量的方式。 此更新将当前规则组版本设为静态 1.0 版，并将默认版本设为指向此版本。 有关版本管控规则的更多信息，请参阅以下内容： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 2024-05-29 | 
| [POSIX 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-posix-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 3.0。 已删除 `UNIXShellCommandsVariables_QUERYARGUMENTS` 并替换为 `UNIXShellCommandsVariables_QUERYSTRING`。如果您的规则匹配 `UNIXShellCommandsVariables_QUERYARGUMENTS` 的标签，则在使用此版本时，请将其切换为匹配 `UNIXShellCommandsVariables_QUERYSTRING` 上的标签。新标签为 `awswaf:managed:aws:posix-os:UNIXShellCommandsVariables_QueryString`。 添加了匹配所有标题的规则 `UNIXShellCommandsVariables_HEADER`。 使用改进的检测逻辑，更新了托管规则组中的所有规则。 更正了所记录的 `UNIXShellCommandsVariables_BODY` 标签的大小写。  | 2024-05-28 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.12。 将签名添加到所有跨站点脚本规则中，以改进检测并减少误报。 | 2024-05-21 | 
| [SQL 数据库托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-sql-db) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  发布了此规则组的静态版本 1.2。 向列示规则添加了 `JS_DECODE` 文本转换。  | 2024-05-14 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.22。 向列示规则添加了 `JS_DECODE` 文本转换。  | 2024-05-08 | 
| [POSIX 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-posix-os)  | 发布了此规则组的静态版本 2.2。 为两条规则新增了 `JS_DECODE` 文本转换。  | 2024-05-08 | 
| [Windows 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-windows-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.1。 向 `PowerShellCommands_BODY` 添加了签名，以改进检测。  | 2024-05-03 | 
| [Amazon IP 声誉列表托管规则组](aws-managed-rule-groups-ip-rep.md#aws-managed-rule-groups-ip-rep-amazon) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 更新了 IP 声誉列表的来源，以加强对主动参与恶意活动的地址的识别并减少误报。 此次更新不涉及新版本，因为此规则组未采用版本控制。  | 2024-03-13 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)  | 发布了此规则组的静态版本 1.21。 添加了签名以改进检测并减少误报。  | 2023-12-16 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.20。 更新了 `ExploitablePaths_URIPATH` 规则，以增加对与“Atlassian Confluence CVE-2023-22518 授权不当”漏洞相匹配的请求的检测。此漏洞会影响所有版本的 Confluence 数据中心和服务器。有关更多信息，请参阅 [NIST：国家漏洞数据库：CVE-2023-22518 详细信息](https://nvd.nist.gov/vuln/detail/CVE-2023-22518)。  | 2023-12-14 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.11。 将签名添加到所有跨站点脚本规则中，以改进检测并减少误报。 | 2023-12-06 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 将协调活动低标签添加到规则组的目标保护级别标签中。此标签未与任何规则关联。此标签是对中高级规则和标签的补充。 | 2023-12-05 | 
| [机器人控制功能标签](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-labels-rg) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 向规则组添加了一个信号标签，指示检测到有助于自动化的浏览器扩展。此标签并非特定于单个规则。  | 2023-11-14 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.10。 更新了一条规则，以改进检测并减少误报。 | 2023-11-02 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.9。 更新了规则，以改进检测并减少误报。 | 2023-10-30 | 
| [POSIX 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-posix-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.1。 更新了查询参数规则，以改进检测。  | 2023-10-12 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.8。 更新了规则，以改进检测。 | 2023-10-11 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 异常部署：发布了此规则组的静态版本 1.19。更新了默认版本，以使用 1.19。 更新了 `ExploitablePaths_URIPATH` 规则，以增加对与 Atlassian Confluence CVE-2023-22515 权限升级漏洞相匹配的请求的检测。此漏洞会影响某些版本的 Atlassian Confluence。有关更多信息，请参阅 [NIST：国家漏洞数据库：CVE-2023-22515 详细信息](https://nvd.nist.gov/vuln/detail/CVE-2023-22515)和 [Atlassian Support：CVE-2023-22515 常见问题解答](https://confluence.atlassian.com/kb/faq-for-cve-2023-22515-1295682188.html)。 有关部署类型的信息，请参阅 [AWS 托管规则的异常部署](waf-managed-rule-groups-deployments-exceptions.md)。 | 2023-10-04 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 异常部署：发布了此规则组的静态版本 1.18。这是此静态版本的快速推出，以适应版本 1.19 的创建和推出。 更新了 `Host_localhost_HEADER` 规则以及所有 Log4J 和 Java 反序列化规则，以改进检测。 有关部署类型的信息，请参阅 [AWS 托管规则的异常部署](waf-managed-rule-groups-deployments-exceptions.md)。 | 2023-10-04 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 向规则组添加了带有 Count 操作的规则。 令牌重用 IP 规则可检测并计算通过 IP 地址共享的令牌。 协调活动规则使用对网站流量的自动机器学习 (ML) 分析来检测与机器人相关的活动。在规则组配置中，您可以选择退出使用 ML。在此版本中，当前使用目标保护级别的客户可以选择使用机器学习。选择退出将禁用协调活动规则。 | 2023-09-06 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 已将规则 `CategoryAI` 添加到规则组中。 | 2023-08-30 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.7。 更新了受限扩展和 EC2 元数据 SSRF 规则，以改进检测并减少误报。 | 2023-07-26 | 
| [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md) 新规则组中的所有规则  | 添加了规则组 AWSManagedRulesACFPRuleSet。 | 2023-06-13 | 
| [Linux 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-linux-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.2。 添加了签名，以改进检测。  | 2023-05-22 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.6。 更新了跨站脚本攻击（XSS）和受限扩展规则，以改进检测并减少误报。 | 2023-04-28 | 
| [PHP 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-php-app) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.0。 添加了签名，以改进所有规则中的检测。 已将规则 `PHPHighRiskMethodsVariables_QUERYARGUMENTS` 替换为 `PHPHighRiskMethodsVariables_QUERYSTRING`，它会检查整个查询字符串，而不仅仅是查询参数。 添加了规则 `PHPHighRiskMethodsVariables_HEADER`，以扩大覆盖范围，纳入所有标头。 更新了以下标签，使其与标准 AWS 托管规则标签保持一致： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 2023-02-27 | 
| [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 添加了登录响应检查规则，用于受保护的 Amazon CloudFront 分配。这些规则可以阻止来自 IP 地址和客户端会话的新登录尝试，这些地址和客户端会话最近导致的登录尝试失败次数过多。 | 2023-02-15 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.5。 更新了跨站脚本攻击（XSS）筛选器，以改进检测。 | 2023-01-25 | 
| [Linux 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-linux-os) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 2.1。 删除了规则 `LFI_COOKIE` 及其标签 `awswaf:managed:aws:linux-os:LFI_Cookie`，并替换为新规则 `LFI_HEADER` 及其标签 `awswaf:managed:aws:linux-os:LFI_Header`。此更改将检查范围扩展到多个标头。 已为所有规则添加文本转换和签名，以改进检测。  | 2022-12-15 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.4。 已在 `NoUserAgent_HEADER` 中添加文本转换，以删除所有空字节。更新了跨站点脚本规则中的筛选器，以改进检测。 | 2022-12-05 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.17。 更新了 Java 反序列化规则，并增加了对与 Apache CVE-2022-42889 匹配的请求的检测，它是 1.10.0 之前的 Apache Commons Text 版本中的远程代码执行 (RCE) 漏洞。有关更多信息，请参阅 [NIST：国家漏洞数据库：CVE-2022-42889 详细信息](https://nvd.nist.gov/vuln/detail/CVE-2022-42889)和 [CVE-2022-42889：由于不安全的插值默认设置，1.10.0 之前的 Apache Commons Text 在应用于不受信任的输入时允许 RCE](https://lists.apache.org/thread/n2bd4vdsgkqh2tm14l1wyc3jyol7s1om)。 改进了 `Host_localhost_HEADER` 中的检测。 | 2022-10-20 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.16。 删除了 1.15 版本中 AWS 识别的误报。 | 2022-10-05 | 
| [POSIX 操作系统托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-posix-os) [PHP 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-php-app)  [WordPress 应用程序托管规则组](aws-managed-rule-groups-use-case.md#aws-managed-rule-groups-use-case-wordpress-app)   | 更正了记录在案的标签名称。  | 2022-09-19 | 
| [IP 声誉规则组](aws-managed-rule-groups-ip-rep.md) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 此更改不会改变规则组处理 Web 流量的方式。 根据Amazon威胁情报，添加了一项新规则，其中包含检查积极参与 DDo S活动的 IP 地址的Count操作。  | 2022-08-30 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的静态版本 1.15。 删除了 `Log4JRCE`，并将其替换为 `Log4JRCE_HEADER`、`Log4JRCE_QUERYSTRING`、`Log4JRCE_URI` 和 `Log4JRCE_BODY`，以便对误报进行更精细的监控和管理。 添加了签名，以改进对 `PROPFIND_METHOD` 和所有 `JavaDeserializationRCE*` 和 `Log4JRCE*` 规则的检测和阻止。 更新了标签，以更正 `Host_localhost_HEADER` 和所有 `JavaDeserializationRCE*` 规则中的大小写。 更正了的 `JavaDeserializationRCE_HEADER` 描述。 | 2022-08-22 | 
| [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 添加了一条规则，禁止对 Amazon Cognito 用户群体 Web 流量使用账户防盗托管规则组。 | 2022-08-11 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs)  | AWS 已为版本`Version_1.2`和规则组`Version_2.0`的计划过期。这些版本将于 2022 年 9 月 9 日到期。有关版本到期的信息，请参阅 [在中使用版本化托管规则组 AWS WAF](waf-managed-rule-groups-versioning.md)。 | 2022-06-09 | 
| [核心规则集（CRS）托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-crs)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的版本 1.3。此版本更新了规则 `GenericLFI_URIPATH` 和 `GenericRFI_URIPATH` 中的匹配签名，以改进检测。 | 2022-05-24 | 
| [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 已将规则 `CategoryEmailClient` 添加到规则组中。 | 2022-04-06 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的版本 1.14。四条 `JavaDeserializtionRCE` 规则已移至 Block 模式。 | 2022-03-31 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的版本 1.13。更新了 Spring Core 和云函数 RCE 漏洞的文本转换。这些规则处于计数模式，用于收集指标并评估匹配的模式。该标签可用于阻止自定义规则中的请求。后续版本将在区块模式下使用这些规则进行部署。 | 2022-03-31 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的版本 1.12。已为 Spring Core 和云函数 RCE 漏洞添加签名。这些规则处于计数模式，用于收集指标并评估匹配的模式。该标签可用于阻止自定义规则中的请求。后续版本将在区块模式下使用这些规则进行部署。 删除了规则`Log4JRCE_HEADER`、`Log4JRCE_QUERYSTRING`、`Log4JRCE_URI` 和 `Log4JRCE_BODY`，并将其替换为规则 `Log4JRCE`。 | 2022-03-30 | 
| [IP 声誉规则组](aws-managed-rule-groups-ip-rep.md) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 更新了 AWSManagedReconnaissanceList 规则，将操作从计数改为阻止。 | 2022-02-15 | 
| [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md) 新规则组中的所有规则  | 添加了规则组 AWSManagedRulesATPRuleSet。 | 2022-02-11 | 
| [已知错误输入托管规则组](aws-managed-rule-groups-baseline.md#aws-managed-rule-groups-baseline-known-bad-inputs)[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了此规则组的版本 1.9。为了灵活使用此功能，删除了规则 `Log4JRCE`，并将其替换为规则 `Log4JRCE_HEADER`、`Log4JRCE_QUERYSTRING`、`Log4JRCE_URI` 和 `Log4JRCE_BODY`。添加了签名，以改进检测和阻止。 | 2022-01-28 | 
| 核心规则集（CRS） [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  发布了此规则组的版本 2.0。对于这些规则，调整了检测签名，以减少误报。将 `URL_DECODE` 文本转换替换为双 `URL_DECODE_UNI` 文本转换。新增了 `HTML_ENTITY_DECODE` 文本转换。  | 2022-01-10 | 
| 核心规则集（CRS） [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  作为该规则组版本 2.0 的一部分，新增了 `URL_DECODE_UNI` 文本转换。已从 `URL_DECODE` 文本转换中移除 `RestrictedExtensions_URIPATH`。  | 2022-01-10 | 
| SQL 数据库 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  |  发布了此规则组的版本 2.0。将 `URL_DECODE` 文本转换替换为双 `URL_DECODE_UNI` 文本转换，并新增了 `COMPRESS_WHITE_SPACE` 文本转换。 向 `SQLiExtendedPatterns_QUERYARGUMENTS` 中添加了更多检测签名。 向 `SQLi_BODY` 中添加了 JSON 检查。 添加了规则 `SQLiExtendedPatterns_BODY`。 删除了规则 `SQLi_URIPATH`。  | 2022-01-10 | 
| 已知错误输入 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了规则 `Log4JRCE` 的 1.8 版，以改进标头检查和匹配条件。 | 2021-12-17 | 
| 已知错误输入 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 发布了规则 `Log4JRCE` 的 1.4 版，用于调整匹配条件并检查其他标头。发布了版本 1.5，以调整匹配条件。 | 2021-12-11 | 
| 已知错误输入 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/aws-managed-rule-groups-changelog.html)  | 为回应 Log4j 中最近披露的安全问题，添加了规则 `Log4JRCE` 版本 1.2。有关信息，请参阅 [CVE-2021-44228](https://www.cve.org/CVERecord?id=CVE-2021-44228) 此规则用于检查常用 URI 路径、查询字符串、请求正文的前 8KB 和常用标头。该规则使用双 `URL_DECODE_UNI` 文本转换。发布了 `Log4JRCE` 的 1.3 版，以调整匹配条件并检查其他标头。 删除了规则 `BadAuthToken_COOKIE_AUTHORIZATION`。  | 2021-12-10 | 

下表列出了 2021 年 12 月之前的变更。


| 规则组和规则 | 说明 | 日期 | 
| --- | --- | --- | 
| Amazon IP 声誉列表 | `AWSManagedReconnaissanceList` | 在监控/计数模式下添加了 AWSManagedReconnaissanceList 规则。此规则包含正在对 AWS 资源执行侦测的 IP 地址。 | 2021-11-23 | 
| Windows 操作系统 |  `WindowsShellCommands` `PowerShellCommands`  |  为 WindowsShell 命令添加了三条新规则：`WindowsShellCommands_COOKIE``WindowsShellCommands_QUERYARGUMENTS`、和`WindowsShellCommands_BODY`。 添加了新 PowerShell 规则:`PowerShellCommands_COOKIE`. 通过删除字符串 \$1Set1 和 \$1Set2 重构了 `PowerShellComands` 规则命名。 向 `PowerShellRules` 中添加了更全面的检测签名。 为所有 Windows 操作系统规则添加了 `URL_DECODE_UNI` 文本转换。  | 2021-11-23 | 
| Linux 操作系统 |  `LFI_URIPATH` `LFI_QUERYSTRING` `LFI_BODY` `LFI_COOKIE`  |  将双 `URL_DECODE` 文本转换替换为双 `URL_DECODE_UNI`。 添加了 `NORMALIZE_PATH_WIN` 作为第二个文本转换。 将 `LFI_BODY` 规则替换为 `LFI_COOKIE` 规则。 为所有 `LFI` 规则添加了更全面的检测签名。  | 2021-11-23 | 
| 核心规则集（CRS） |  `SizeRestrictions_BODY`  | 降低了大小限制，以阻止正文有效负载大于 8 KB 的 Web 请求。以前，该限制为 10 KB。 | 2021-10-27 | 
| 核心规则集（CRS） |  `EC2MetaDataSSRF_BODY` `EC2MetaDataSSRF_COOKIE` `EC2MetaDataSSRF_URIPATH` `EC2MetaDataSSRF_QUERYARGUMENTS`  | 添加了更多检测签名。添加了双 Unicode 网址解码，以改善阻止效果。 | 2021-10-27 | 
| 核心规则集（CRS） |  `GenericLFI_QUERYARGUMENTS` `GenericLFI_URIPATH` `RestrictedExtensions_URIPATH` `RestrictedExtensions_QUERYARGUMENTS`  | 添加了双 Unicode 网址解码，以改善阻止效果。 | 2021-10-27 | 
| 核心规则集（CRS） |  `GenericRFI_QUERYARGUMENTS` `GenericRFI_BODY` `GenericRFI_URIPATH`  | 根据客户反馈更新了规则签名以减少误报。添加了双 Unicode 网址解码，以改善阻止效果。 | 2021-10-27 | 
| 全部 | 所有规则 | 为所有尚不支持 AWS WAF 标签的规则添加了对标签的支持。 | 2021-10-25 | 
| Amazon IP 声誉列表 | `AWSManagedIPReputationList_xxxx` | 重组了 IP 信誉列表，删除了规则名称中的后缀，并增加了对标签的支持。 AWS WAF  | 2021-05-04 | 
| 匿名 IP 列表 | `AnonymousIPList` `HostingProviderList` | 增加了对 AWS WAF 标签的支持。 | 2021-05-04 | 
| 机器人控制功能 | 全部 | 添加了机器人控制功能规则集。 | 2021-04-01 | 
| 核心规则集（CRS） | `GenericRFI_QUERYARGUMENTS`  | 添加了双重 URL 解码。 | 2021-03-03 | 
| 核心规则集（CRS） | `RestrictedExtensions_URIPATH`  | 改进了规则的配置并添加了额外的 URL 解码。 | 2021-03-03 | 
| 管理保护 | `AdminProtection_URIPATH`  | 添加了双重 URL 解码。 | 2021-03-03 | 
| 已知错误输入 | `ExploitablePaths_URIPATH`  | 改进了规则的配置并添加了额外的 URL 解码。 | 2021-03-03 | 
| Linux 操作系统 | `LFI_QUERYARGUMENTS`  | 改进了规则的配置并添加了额外的 URL 解码。 | 2021-03-03 | 
| Windows 操作系统 | 全部 | 改进了规则的配置。 | 2020-09-23 | 
| PHP 应用程序 | `PHPHighRiskMethodsVariables_QUERYARGUMENTS` `PHPHighRiskMethodsVariables_BODY`  | 将文本转换从 HTML 解码更改为 URL 解码，以改善阻止。 | 2020-09-16 | 
| POSIX 操作系统 | `UNIXShellCommandsVariables_QUERYARGUMENTS` `UNIXShellCommandsVariables_BODY`  | 将文本转换从 HTML 解码更改为 URL 解码，以改善阻止。 | 2020-09-16 | 
| 核心规则集 | `GenericLFI_QUERYARGUMENTS` `GenericLFI_URIPATH` GenericLFI 正文  | 将文本转换从 HTML 解码更改为 URL 解码，以改善阻止。 | 2020-08-07 | 
| Linux 操作系统 | `LFI_URIPATH` `LFI_QUERYARGUMENTS` `LFI_BODY`  | 将文本转换从 HTML 实体解码更改为 URL 解码，以改善检测和阻止。 | 2020-05-19 | 
| 匿名 IP 列表 | 全部 | [IP 声誉规则组](aws-managed-rule-groups-ip-rep.md) 中新的规则组可阻止来自以下这些服务的请求：这些服务允许对查看者身份进行模糊处理，以帮助缓解自动程序和规避地理限制的情况。 | 2020-03-06 | 
| WordPress 应用程序 | `WordPressExploitableCommands_QUERYSTRING`  | 用于检查查询字符串中是否存在可利用的命令的新规则。 | 2020-03-03 | 
| 核心规则集（CRS） | `SizeRestrictions_QUERYSTRING` `SizeRestrictions_Cookie_HEADER` `SizeRestrictions_BODY` `SizeRestrictions_URIPATH`  | 调整了大小值约束以提高准确性。 | 2020-03-03 | 
| SQL 数据库 | `SQLi_URIPATH`  | 这些规则现在会检查消息 URI。 | 2020-01-23 | 
| SQL 数据库 | `SQLi_BODY` `SQLi_QUERYARGUMENTS` `SQLi_COOKIE`  | 更新了文本转换。 | 2019-12-20 | 
| 核心规则集（CRS） | `CrossSiteScripting_URIPATH` `CrossSiteScripting_BODY` `CrossSiteScripting_QUERYARGUMENTS` `CrossSiteScripting_COOKIE`  | 更新了文本转换。 | 2019-12-20 | 

# 管理您自己的规则组
<a name="waf-user-created-rule-groups"></a>

您可以创建您自己的规则组，以重复使用托管规则组产品中不包含或您希望自行处理的规则集合。

您创建的规则组保存规则的方式与保护包（web ACL）保存规则的方式类似，向规则组添加规则的方式与向保护包（web ACL）添加规则的方式相同。当您创建自己的规则组时，必须为其设置不可变的最大容量。

**Topics**
+ [创建规则组](waf-rule-group-creating.md)
+ [编辑规则组](waf-rule-group-editing.md)
+ [在保护包（web ACL）中使用规则组](waf-rule-group-using.md)
+ [删除规则组](waf-rule-group-deleting.md)
+ [共享规则组](waf-rule-group-sharing.md)

# 创建规则组
<a name="waf-rule-group-creating"></a>

要创建新规则组，请按照本页中的步骤操作。

**创建规则组**

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

1. 在导航窗格中，选择 **规则组**，然后选择 **创建规则组**。

1. 为规则输入名称和描述。您将使用名称和描述来标识该规则集以便管理和使用它。

   不要使用以 `AWS`、`Shield`、`PreFM` 或 `PostFM` 开头的名称。这些字符串要么是保留字符串，要么可能与其他服务所管理的规则组混淆。请参阅[识别其他服务提供的规则组](waf-service-owned-rule-groups.md)。
**注意**  
规则组在创建之后无法更改名称。

1. 对于 **区域**，选择要存储规则组的区域。要在保护包 (Web ACLs) 中使用规则组来保护 Amazon CloudFront 分配，您必须使用全局设置。您也可以对区域应用程序使用全局设置。

1. 选择**下一步**。

1. 使用**规则生成器**向导将规则添加到规则组，这与保护包（web ACL）管理中的操作相同。唯一区别在于您无法将规则组添加到另一个规则组。

1. 对于**容量**，设置规则组使用保护包 (Web ACL) 容量单位的最大值 (WCUs)。这是一个不可变的设置。有关的信息 WCUs，请参见[Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md)。

   向规则组添加规则时，**添加规则和设置容量** 窗格会显示所需的最小容量，该容量基于已添加的规则。您可以根据此容量和规则组的未来计划来帮助估算规则组将需要的容量。

1. 检查规则组的设置，然后选择**创建**。

# 编辑规则组
<a name="waf-rule-group-editing"></a>

要在规则组中添加或删除规则或更改配置设置，请使用本页面上的步骤访问规则组。

**生产流量风险**  
如果您更改当前在保护包（web ACL）中使用的规则组，则无论在何处使用保护包（web ACL），这些更改都将影响您的保护包（web ACL）行为。请务必在暂存或测试环境中对所有更改进行测试和调整，直到您可以接受可能对流量产生的影响。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**编辑规则组**

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

1. 在导航窗格中，选择 **规则组**。

1. 选择要编辑的规则组的名称。控制台会将您引入规则组的页面。
**注意**  
如果看不到要编辑的规则组，请查看**规则组**部分中的区域选择。对于用于保护 Amazon CloudFront 分配的规则组，请使用 **Global (CloudFront)** 设置。

1. 根据需要编辑规则组。您可以编辑规则组的可变属性，与创建时的操作类似。控制台会随时保存您的更改。
**注意**  
如果您更改了规则的名称，并且希望该规则的指标名称反映更改，则还必须更新该指标名称。 AWS WAF 当您更改规则名称时，不会自动更新规则的指标名称。在控制台中编辑规则时，您可以使用规则 JSON 编辑器更改指标名称。您还可以通过 APIs 和更改用于定义保护包 (Web ACL) 或规则组的任何 JSON 列表中的名称。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

# 在保护包（web ACL）中使用规则组
<a name="waf-rule-group-using"></a>

要在保护包（web ACL）中使用规则组，请在规则组参考语句中将其添加到保护包（web ACL）中。

**生产流量风险**  
在保护包（web ACL）中为生产流量部署更改之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对更新后的规则进行测试和调整。有关指南，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**注意**  
在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**使用规则组**

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

1. 在导航窗格中，选择 **规则组**。

1. 选择要使用的规则组的名称。

1. 选择**添加规则**，然后选择**添加自己的规则和规则组**。

1. 选择**规则组**，并从列表中选择规则组。

在保护包（web ACL）中，您可以通过将单个规则操作设置为 Count 或通过任何其他操作，更改规则组及其规则的行为。这可以帮助您执行测试规则组、识别规则组中规则的误报，以及自定义托管规则组处理请求的方式等操作。有关更多信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。

如果您的规则组包含基于速率的语句，则您使用该规则组的每个保护包（web ACL）都会对基于速率的规则分别进行费率跟踪和管理，与您使用规则组的任何其他保护包（web ACL）无关。有关更多信息，请参阅 [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

# 删除规则组
<a name="waf-rule-group-deleting"></a>

按照本部分中的指导删除规则组。

**删除引用的集合和规则组**  
删除可在保护包 (Web ACL) 中使用的实体（例如 IP 集、正则表达式模式集或规则组）时， AWS WAF 会检查该实体当前是否正在保护包 (Web ACL) 中使用。如果它发现它正在使用中，则 AWS WAF 会警告你。 AWS WAF 几乎总是能够确定保护包（Web ACL）是否引用了实体。但是在极少数情况下，它可能无法确定。如果您需要确保当前没有任何实体在使用该实体，请在将其删除之前在保护包 (Web ACLs) 中进行检查。如果实体是引用的集合，请确保没有规则组正在使用它。

**删除规则组**

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

1. 在导航窗格中，选择 **规则组**。

1. 选择要删除的规则组，然后选择**删除**。
**注意**  
如果看不到要删除的规则组，请查看**规则组**部分中的区域选择。对于用于保护 Amazon CloudFront 分配的规则组，请使用 **Global (CloudFront)** 设置。

# 共享规则组
<a name="waf-rule-group-sharing"></a>

您可以与其他账户共享规则组以供该账户使用。

**共享规则组**  
您可以与一个或多个特定账户共享，也可以与组织中的所有账户共享。

要共享规则组，您可以使用 AWS WAF API 为所需的规则组共享创建策略。有关更多信息，请参阅《AWS WAF API Reference》**中的 [PutPermissionPolicy](https://docs.aws.amazon.com/waf/latest/APIReference/API_PutPermissionPolicy.html)。

**使用已与您共享的规则组**  
如果已与您的账户共享规则组，则可以通过 API 访问该规则组，也可以在通过 API 创建或更新保护包（网页 ACLs）时引用该规则组。[有关更多信息 [GetRuleGroup](https://docs.aws.amazon.com/waf/latest/APIReference/API_GetRuleGroup.html)，CreateWeb请参阅 *AWS WAF API 参考UpdateWeb*[中的 ACL 和 ACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_UpdateWebACL.html)。](https://docs.aws.amazon.com/waf/latest/APIReference/API_CreateWebACL.html)与您共享的规则组不会出现在您的 AWS WAF 控制台规则组列表中。

# AWS Marketplace 规则组
<a name="marketplace-rule-groups"></a>

本节介绍如何使用 AWS Marketplace 规则组。

AWS Marketplace 规则组可通过 AWS Marketplace 控制台订阅获得，网址为[AWS Marketplace](https://aws.amazon.com/marketplace)。订阅 AWS Marketplace 规则组后，可以在中使用它 AWS WAF。要在 AWS Firewall Manager AWS WAF 策略中使用 AWS Marketplace 规则组，组织中的每个账户都必须订阅该规则组。

**您可以通过以下方式订阅不同类型的规则组 AWS Marketplace：**
+ AWS WAF 合作伙伴管理的规则组
+ 客户端保护

在将 AWS WAF 保护措施用于生产流量之前，请先对其进行测试和调整。有关信息，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

**AWS Marketplace 规则组定价**  
AWS Marketplace 规则组没有长期合同，也没有最低承诺。当您订阅规则组时，您需要支付月费（按小时按比例分配），并根据交易量向您收取持续的请求费用。但是，只有当您将订阅的规则组添加到 Web ACL 并开始使用它时，才需要支付订阅费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)和每个 AWS Marketplace 规则组的描述，网址为[AWS Marketplace](https://aws.amazon.com/marketplace)。

**对 AWS Marketplace 规则组有疑问吗？**  
如果对 AWS Marketplace 卖家管理的规则组有疑问或请求更改功能，请联系提供商的客户支持团队。要查找联系信息，请访问 [AWS Marketplace](https://aws.amazon.com/marketplace)，参阅提供程序的列表。

 AWS Marketplace 规则组提供者决定如何管理规则组，例如如何更新规则组以及规则组是否已版本控制。提供程序还会确定规则组的详细信息，包括规则、规则操作以及规则添加到匹配的 Web 请求中的任何标签。

## 订阅 AWS Marketplace 规则组
<a name="marketplace-rule-groups-subscribing"></a>

您可以在 AWS WAF 控制台上订阅和取消订阅 AWS Marketplace 规则组。

**重要**  
要在 AWS Firewall Manager 策略中使用 AWS Marketplace 规则组，组织中的每个账户都必须先订阅该规则组。

**订阅 AWS Marketplace 规则组**

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

1. 在导航窗格中，选择**附加组件保护**。

1. 在 **AWS Marketplace** 部分中，选择规则组的名称，以查看详细信息和定价信息。
**提示**  
使用筛选条件，快速排序您最感兴趣的规则。例如，您可以使用**类别**筛选条件，仅查看客户端保护。

1. 要订阅 AWS Marketplace 规则组，请执行以下操作：

   1. 导航到规则组，然后选择**通过 Marketplace 订阅**。

   1. 在打开的 Marketplace 页面中，选择**查看购买选项**，然后选择**订阅**。
**注意**  
如果您决定不订阅规则组，关闭弹出窗口即可。

订阅 AWS Marketplace 规则组后，可以在保护包 (Web ACLs) 中使用该规则组，就像在其他托管规则组中使用一样。有关信息，请参阅[在中创建保护包 (Web ACL) AWS WAF](web-acl-creating.md)。

将规则组添加到保护包（web ACL）时，可以覆盖规则组中规则的操作和规则组结果的操作。有关更多信息，请参阅 [覆盖中的规则组操作 AWS WAF](web-acl-rule-group-override-options.md)。

## 取消订阅规则组 AWS Marketplace
<a name="marketplace-rule-groups-unsubscribing"></a>

您可以在 AWS Marketplace 控制台上取消订阅 AWS Marketplace 规则组。

**重要**  
要停止对某个 AWS Marketplace 规则组收取订阅费用，除了取消订阅该规则组外，还必须将其从所有 Firewall Manager AWS WAF 策略中 AWS WAF 和其中的所有保护包（网页 ACLs）中删除。如果您取消订阅某个 AWS Marketplace 规则组，但未将其从保护包（网页 ACLs）中删除，则将继续向您收取订阅费用。

**取消订阅 AWS Marketplace 规则组**

1. 从所有保护包 (Web ACLs) 中移除规则组。有关更多信息，请参阅 [在中编辑保护包 (Web ACL) AWS WAF](web-acl-editing.md)。

1. 在 [https://console.aws.amazon.com/marketplac AWS](https://console.aws.amazon.com/marketplace) e 上打开控制台。

   此时将显示**管理订阅**页面。

1. 打开**交付方式**列表并选择 **SaaS**。

1. 在**协议**下，打开**操作列表**，然后选择想要取消订阅的规则组名称旁边的**取消订阅**。

1. 在**取消订阅**对话框中，输入 **confirm**，然后选择**是，取消订阅**。

## 对 AWS Marketplace 规则组进行故障排除
<a name="waf-managed-rule-group-troubleshooting"></a>

如果您发现某个 AWS Marketplace 规则组阻止了合法流量，则可以通过执行以下步骤来解决问题。

**对 AWS Marketplace 规则组进行故障排除**

1. 覆盖操作，以计入阻止合法流量的规则。您可以使用 AWS WAF 抽样请求或 AWS WAF 日志来确定哪些规则阻止了特定的请求。您可以通过查看日志中的 `ruleGroupId` 字段或采样请求中的 `RuleWithinRuleGroup` 来标识规则。您可以采用模式 `<Seller Name>#<RuleGroup Name>#<Rule Name>` 标识规则。

1. 如果将特定规则设置为仅计算请求数并不能解决问题，则可以覆盖所有规则操作，或者将 AWS Marketplace 规则组本身的操作从 “**不覆盖” 更改为 “覆盖****” 以计数**。这会允许 web 请求通过，而不管规则组中的各个规则操作是什么。

1. 覆盖单个规则操作或整个 AWS Marketplace 规则组操作后，请联系规则组提供商的客户支持团队以进一步解决问题。有关联系信息，请参阅 AWS Marketplace产品列表页面上的规则组列表。

### 联系 AWS 支持人员
<a name="waf-managed-rule-group-troubleshooting-support"></a>

有关问题 AWS WAF 或由其管理的规则组 AWS，请联系 AWS 支持。如果 AWS Marketplace 卖家管理的规则组存在问题，请联系提供商的客户支持团队。要查找联系信息，请参阅提供商的列表 AWS Marketplace。

# 识别其他服务提供的规则组
<a name="waf-service-owned-rule-groups"></a>

如果您或您组织中的管理员使用 AWS Firewall Manager 或 AWS Shield Advanced 使用管理资源保护 AWS WAF，则可能会在您的账户中看到添加到保护包 (Web ACLs) 中的规则组参考声明。

这些规则组的名称以以下字符串开头：
+ **`ShieldMitigationRuleGroup`**— 这些规则组由受保护的应用程序层（第 7 层 DDo）资源管理， AWS Shield Advanced 并用于为受保护的应用程序层（第 7 层）资源提供自动缓解。

  当您为受保护的资源启用自动应用层 DDo S 缓解时，Shield Advanced 会将其中一个规则组添加到您与该资源关联的保护包（Web ACL）中。Shield Advanced 为规则组参考语句分配了 100 万的优先级设置，以便其能够在保护包（web ACL）配置的规则之后运行。有关这些规则组的更多信息，请参阅 [使用 Shield Advanced 自动缓解应用层 DDo S](ddos-automatic-app-layer-response.md)。
**警告**  
不要尝试在保护包（web ACL）中手动管理此规则组。特别是，不要手动从保护包（web ACL）中删除 `ShieldMitigationRuleGroup` 规则组参考语句。这样可能会对与保护包（web ACL）关联的所有资源造成意外后果。应使用 Shield Advanced 来禁用与保护包（web ACL）相关联资源的自动缓解功能。当不需要自动缓解时，Shield Advanced 会为您移除规则组。
+ **`PREFMManaged`和 `POSTFMManaged`** — 这些规则组由 AWS Firewall Manager 根据 Firewall Manager AWS WAF 策略配置进行管理。Firewall Manager 在防火墙管理器管理的保护包 (Web ACLs) 中提供这些规则组。

  Firewall Manager 会为您创建名称以开头的保护包（网络 ACLs）`FMManagedWebACLV2`。您也可以将 Firewall Manager 配置为改造现有保护包（网络 ACLs）。对于这些列表，保护包（web ACL）名称就是创建保护包（web ACL）时指定的名称。无论哪种情况，Firewall Manager 都会将这些规则组添加至保护包（web ACL）。有关更多信息，请参阅 [在 Firewall Manager 中使用 AWS WAF 策略](waf-policies.md)。

# Web ACL 容量单位 (WCUs) AWS WAF
<a name="aws-waf-capacity-units"></a>

本节介绍什么是 Web ACL 容量单位 (WCUs) 及其工作原理。

AWS WAF WCUs 用于计算和控制运行规则、规则组和 Web 所需的操作资源 ACLs。 AWS WAF 在配置规则组和 Web 时强制执行 WCU 限制。 ACLs WCUs 不影响 AWS WAF 检查网络流量的方式。

AWS WAF 管理规则、规则组和 Web 的容量 ACLs。

**规则 WCUs**  
AWS WAF 在创建或更新规则时计算规则容量。 AWS WAF 以不同的方式计算每种规则类型的容量，以反映每条规则的相对成本。运行成本低的简单规则 WCUs 比使用更复杂但处理能力更高的规则更少。例如，大小限制规则语句使用的语句少 WCUs于使用正则表达式模式集检查请求的语句。

规则容量要求通常从规则类型的基本成本开始，并随着复杂性而增加，例如，当您在检查之前添加文本转换或检查 JSON 正文时。有关规则容量要求的信息，请参阅 [在中使用规则语句 AWS WAF](waf-rule-statements.md) 上的规则语句列表。

**规则组 WCUs**  
规则组的 WCU 要求由您在规则组中定义的规则决定。一个规则组的最大容量为 5,000 WCUs。

每个规则组都有一个不可变的容量设置，由所有者在创建时分配。对于您通过创建的托管规则组和规则组，情况确实如此 AWS WAF。修改规则组时，所做的更改必须使规则组保持在其容量 WCUs 范围内。这样可以确保使用规则组的保护包 (Web ACLs) 或 Web ACLs 保持在其容量要求范围内。

规则组中 WCUs 使用的等于规则 WCUs 的总和减去通过组合规则行为 AWS WAF 所能获得的任何处理优化。例如，如果您定义了两个规则来检查同一 Web 请求组件，并且每条规则在检查组件之前都对其应用了特定的转换，则 AWS WAF 可能只能向您收取一次应用转换的费用。在保护包（web ACL）中使用规则组的 WCU 成本，始终是您在创建规则组时定义的固定 WCU 设置。

创建规则组时，请注意将容量设置得足够高，以适应您要在规则组的整个生命周期中使用的规则。

**保护包或 Web ACL WCUs**  
保护包（web ACL）的 WCU 要求，由您在保护包（web ACL）中使用的规则和规则组决定。
+ 在保护包（web ACL）中使用规则组的成本，是规则组的容量设置。
+ 使用规则的成本等于规则的计算 WCUs 结果减去可以从保护包 (Web ACL) 的规则组合中获得的任何处理优化。 AWS WAF 例如，如果您定义了两个规则来检查同一 Web 请求组件，并且每条规则在检查组件之前都对其应用了特定的转换，则 AWS WAF 可能只能向您收取一次应用转换的费用。

保护包（Web ACL）的基本价格包括最多 1,500 WCUs。根据分层定价模型，使用超过 1,500 会 WCUs 产生额外费用。 AWS WAF 随着保护包 (Web ACL) WCU 使用量的变化，会自动调整保护包 (Web ACL) 的定价。有关定价的详细信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

保护包 (Web ACL) 的最大容量为 5,000 WCUs。

## 确定规则组、保护包 (Web ACL) 或 Web ACL WCUs
<a name="aws-waf-capacity-units-used"></a>

如前几节所述，规则组、保护包 (Web ACL) 或 Web ACL 中 WCUs 使用的总数将等*于或小于*在规则组、保护包 (Web ACL) 或 Web ACL 中定义的所有规则的总和。 WCUs 

在 AWS WAF 控制台中，您可以看到向保护包 (Web ACL)、Web ACL 或规则组添加规则时消耗的容量。控制台显示您添加规则时使用的容量单位。

通过 API，您可以检查要在保护包（web ACL）、web ACL 或规则组中使用的规则的最大容量要求。为此，请向检查容量调用提供规则的 JSON 列表。有关更多信息，请参阅 *AWS WAF V2 API 参考[CheckCapacity](https://docs.aws.amazon.com/waf/latest/APIReference/API_CheckCapacity.html)*中的。

# 中的 Web 请求组件过大 AWS WAF
<a name="waf-oversize-request-components"></a>

本节介绍了如何管理在 AWS WAF中检查 Web 请求正文、标头和 Cookie 的大小限制。

AWS WAF 不支持检查 Web 请求组件正文、标头或 Cookie 的超大内容。底层主机服务对转发给 AWS WAF 检查的内容有数量和大小限制。例如，主机服务向发送的标头不超过 200 个 AWS WAF，因此对于包含 205 个标头的 Web 请求， AWS WAF 无法检查最后 5 个标头。

当 AWS WAF 允许 Web 请求继续访问您的受保护资源时，将发送整个 Web 请求，包括超出可以检查的数量和大小限制的任何 AWS WAF 内容。

**组件检查大小限制**  
组件检查尺寸限制如下：
+ **`Body`和 `JSON Body`** — 对于 Application AWS AppSync Load Balancer 和， AWS WAF 可以检查请求正文的前 8 KB。对于 CloudFront，默认情况下，API Gateway、Amazon Cognito、App Runner 和 Verified Access AWS WAF 可以检查前 16 KB，你可以在保护包（Web ACL）配置中将限制提高到 64 KB。有关更多信息，请参阅 [管理人体检查的注意事项 AWS WAF](web-acl-setting-body-inspection-limit.md)。
+ **`Headers`**— 最多 AWS WAF 可以检查请求标头的前 8 KB（8,192 字节），最多可以检查前 200 个标头。在达到第一个限制之前 AWS WAF ，内容可供检查。

  当您检查请求中的所有标头时，这些限制适用。当您检查单个标头时， AWS WAF 可以检查该标头的全部内容，而不受这些大小或数量限制。
+ **`Cookies`**— 最多 AWS WAF 可以检查请求的 cookie 的前 8 KB（8,192 字节），最多可以检查前 200 个 cookie。在达到第一个限制之前 AWS WAF ，内容可供检查。

**规则语句的超大处理选项**  
在编写检查其中一种请求组件类型的规则语句时，您可以指定如何处理超大组件。超大处理 AWS WAF 告诉当规则检查的请求组件超过大小限制时，如何处理 Web 请求。

处理超大组件的选项如下：
+ **Continue**— 根据规则检查标准通常检查请求组件。 AWS WAF 将检查大小限制范围内的请求组件内容。
+ **Match**— 将 Web 请求视为与规则语句相匹配。 AWS WAF 将规则操作应用于请求，而不根据规则的检查标准对其进行评估。
+ **No match**— 如果不根据规则的检查标准进行评估，则将 Web 请求视为与规则声明不匹配。 AWS WAF 继续使用保护包 (Web ACL) 中的其余规则检查 Web 请求，就像对待任何不匹配的规则一样。

在 AWS WAF 控制台中，你需要选择其中一个处理选项。在控制台之外，默认选项为 Continue。

如果您在操作设置为 Block 的规则中使用 Match 选项，则该规则将阻止被检查组件过大的请求。对于任何其他配置，请求的最终处置取决于各种因素，例如保护包（web ACL）中其他规则的配置以及保护包（web ACL）的默认操作设置。

**非您拥有的规则组中的超大处理**  
组件大小和数量限制适用于您在保护包（web ACL）中使用的所有规则。这包括您在托管规则组以及其他账户与您共享的规则组中使用但未管理的任何规则。

当您使用您未管理的规则组时，该规则组可能有一条规则可以检查有限的请求组件，但不会按照您需要的方式处理超大内容。有关 AWS 托管规则如何管理超大尺寸组件的信息，请参阅[AWS 托管规则规则组列表](aws-managed-rule-groups-list.md)。有关其他规则组的信息，请咨询您的规则组提供程序。

**管理保护包（web ACL）中超大组件的指导原则**  
处理保护包（web ACL）中超大组件的方式可能取决于多种因素，例如请求组件内容的预期大小、保护包（web ACL）的默认请求处理以及保护包（web ACL）中的其他规则如何匹配和处理请求。

管理超大 Web 请求组件的一般准则如下：
+ 如果您需要允许某些包含超大组件内容的请求，请添加规则以明确仅允许这些请求。确定这些规则的优先级，使其在保护包（web ACL）中检查相同组件类型的任何其他规则之前运行。使用这种方法，您将无法使用 AWS WAF 来检查允许传递给受保护资源的超大组件的全部内容。
+ 对于所有其他请求，您可以通过阻止超过限制的请求来防止任何额外的字节通过：
  + **您的规则和规则组** – 在检查有大小限制的组件的规则中，配置超大处理，以便阻止超过限制的请求。例如，如果您的规则阻止具有特定标头内容的请求，请将超大处理设置为与标头内容过大的请求相匹配。或者，如果您的保护包（web ACL）默认会阻止请求，并且您的规则允许特定的标头内容，则将规则的超大处理配置为不匹配任何标头内容过大的请求。
  + **您不管理的规则组**：为了防止您不管理的规则组允许超大请求组件，您可以添加一个单独的规则来检查请求组件类型并阻止超出限制的请求。确定保护包（web ACL）中规则的优先级，使其在规则组之前运行。例如，在任何正文检查规则在保护包（web ACL）中运行之前，您可以阻止正文内容过大的请求。以下过程将介绍如何添加此类规则。

## 阻止超大 Web 请求组件
<a name="waf-oversize-request-components-blocking"></a>

可以在保护包（web ACL）中添加一条阻止过大组件请求的规则。

**添加阻止超大内容的规则**

1. 创建或编辑保护包（web ACL）时，在规则设置中，选择**添加规则**、**添加我自己的规则和规则组**、**规则生成器**，然后选择**规则可视化编辑器**。有关创建或编辑保护包（web ACL）的指导，请参阅 [在中查看 Web 流量指标 AWS WAF](web-acl-working-with.md)。

1. 输入规则的名称，然后将**类型**设置保留为**常规规则**。

1. 将以下匹配设置更改为其默认设置：

   1. 在**语句**中，对于**检查**，打开下拉列表并选择所需的 Web 请求组件，即**正文**、**标头**或 **Cookie**。

   1. 对于**匹配类型**，选择**大小大于**。

   1. 在**大小**中，键入一个至少等于该组件类型的最小大小的数字。对于标头和 Cookie，请键入 `8192`。在 Application Load Balancer 或 AWS AppSync 保护包 (Web ACLs) 中，对于主体，键入`8192`。对于 API Gateway、Amazon Cognito、App Runner 或已验证访问保护包（网络 ACLs）中的 CloudFront正文，如果您使用的是默认的主体大小限制，请键入。`16384`否则，请键入您为保护包（web ACL）定义的正文大小限制。

   1. 对于**超大处理**，请选择**匹配**。

1. 对于**操作**，选择**阻止**。

1. 选择**添加规则**。

1. 添加规则后，在**设置规则优先级**页面上，将其移至保护包（web ACL）中检查相同组件类型的所有规则或规则组上方。这使新规则具有较低的数字优先级设置，因此 AWS WAF 需要先对其进行评估。有关更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

# 中支持的正则表达式语法 AWS WAF
<a name="waf-regex-pattern-support"></a>

AWS WAF 支持 PCRE 库`libpcre`使用的正则表达式模式语法。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。

AWS WAF 不支持库的所有结构。例如，它支持一些零宽度断言，但不是全部。我们没有所支持构造的完整列表。但是，如果您提供的正则表达式模式无效或使用不支持的结构， AWS WAF API 会报告失败。

AWS WAF 不支持以下 PCRE 模式：
+ 反向引用和捕获子表达式
+ 子例程引用和递归模式
+ 条件模式
+ 回溯控制动词
+ \$1C 单字节指令
+ \$1R 换行符匹配指令
+ 匹配重置指令的 \$1K 开头
+ 标注和嵌入式代码
+ 原子分组和占有式限定符

# 中的 IP 集和正则表达式模式集 AWS WAF
<a name="waf-referenced-set-managing"></a>

本节介绍了有关 IP 集和正则表达式模式集的主题。

AWS WAF 将一些更复杂的信息存储在集合中，您可以通过在规则中引用这些信息来使用这些信息。其中每个集都有一个名称，并在创建时分配了一个 Amazon 资源名称 (ARN)。您可以在规则语句内部管理这些集，也可以通过控制台导航窗格自行访问和管理它们。

您可以在规则组或保护包（web ACL）中使用托管集。
+ 要使用 IP 集，请参阅 [IP 集匹配规则语句](waf-rule-statement-type-ipset-match.md)。
+ 要使用正则表达式模式集，请参阅 [正则表达式模式集匹配规则语句](waf-rule-statement-type-regex-pattern-set-match.md)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

**Topics**
+ [创建和管理中设置的 IP AWS WAF](waf-ip-set-managing.md)
+ [创建和管理中设置的正则表达式模式 AWS WAF](waf-regex-pattern-set-managing.md)

# 创建和管理中设置的 IP AWS WAF
<a name="waf-ip-set-managing"></a>

IP 集提供要在规则语句中一起使用的 IP 地址和 IP 地址范围的集合。IP 集就是 AWS 资源。

要使用保护包 (Web ACL) 或规则组中设置的 IP，请先`IPSet`使用您的地址规格创建一个 AWS 资源。然后，在将 IP 集规则语句添加到保护包（web ACL）或规则组时引用该集。

## 创建 IP 集
<a name="waf-ip-set-creating"></a>

按照本部分中的过程创建新的 IP 集。

**注意**  
除了本部分中的过程之外，您还可以选择在将 IP 匹配规则添加到保护包（web ACL）或规则组时添加新的 IP 集。选择该选项需要您提供与此过程所需相同的设置。

**创建 IP 集**

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

1. 在导航窗格中，选择 **IP sets (IP 集)**，然后选择 **Create IP set (创建 IP 集)**。

1. 输入 IP 集的名称和说明。当您想要使用集时，您可以使用这些信息来标识集。
**注意**  
IP 集在创建之后无法更改名称。

1. 对于**区域**，选择全局 (CloudFront) 或选择要存储 IP 集的区域。您只能在保护区域资源的保护包 (Web ACLs) 中使用区域 IP 集。要使用保护包（网页 ACLs）中设置的 IP 来保护亚马逊 CloudFront 分配，您必须使用 Global (CloudFront)。

1. 对于 **IP version (IP 版本)**，请选择要使用的版本。

1. 在 **IP 地址**文本框中，以 CIDR 表示法每行输入一个 IP 地址或 IP 地址范围。 AWS WAF 支持除之外的所有 IPv4 和 IPv6 CIDR 范围。`/0`有关 CIDR 表示法的更多信息，请参阅维基百科条目 [Classless Inter-Domain Routing](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)。

   下面是一些示例：
   + **要指定 IPv4 地址 192.0.2.44，请键入 192.0.2.44/32。**
   + **要指定 IPv6 地址 2620:0:2 d 0:200:0:0:0:0，请键入 2620:0:2 d 0:200:0:0:0:0 /128。**
   + **要指定从 192.0.2.0 到 192.0.2.255 IPv4 的地址范围，请键入 192.0.2.0/24。**
   + **要指定从 2620:0:2 d 0:200:0:0:0 到 2620:0:0:0 之间 IPv6 的地址范围 d 0:200: ffff: ffff: ffff: ffff: ffff，请输入 2620:0:2 d 0:200:: /64。**

1. 查看 IP 集的设置，然后选择 **Create IP set (创建 IP 集)**。

## 删除 IP 集
<a name="waf-ip-set-deleting"></a>

按照本部分中的指导删除引用集。

**删除引用的集合和规则组**  
删除可在保护包 (Web ACL) 中使用的实体（例如 IP 集、正则表达式模式集或规则组）时， AWS WAF 会检查该实体当前是否正在保护包 (Web ACL) 中使用。如果它发现它正在使用中，则 AWS WAF 会警告你。 AWS WAF 几乎总是能够确定保护包（Web ACL）是否引用了实体。但是在极少数情况下，它可能无法确定。如果您需要确保当前没有任何实体在使用该实体，请在将其删除之前在保护包 (Web ACLs) 中进行检查。如果实体是引用的集合，请确保没有规则组正在使用它。

**删除 IP 集**

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

1. 在导航窗格中，选择 **IP 集**。

1. 选择要删除的 IP 集，然后选择 **删除**。

# 创建和管理中设置的正则表达式模式 AWS WAF
<a name="waf-regex-pattern-set-managing"></a>

正则表达式模式集提供了要在规则语句中一起使用的正则表达式的集合。正则表达式模式集是资源。 AWS 

要使用保护包 (Web ACL) 或规则组中设置的正则表达式模式，请先使用正则表达式模式`RegexPatternSet`规范创建一个 AWS 资源。然后，在将正则表达式模式集规则语句添加到保护包（web ACL）或规则组时引用该集。正则表达式模式集必须至少包含一个正则表达式模式。

如果您的正则表达式模式集包含多个正则表达式模式，则在规则中使用时，模式匹配与 `OR` 逻辑组合使用。也就是说，如果请求组件与集合中的任何模式匹配，Web 请求将匹配模式集规则语句。

AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

## 创建正则表达式模式集
<a name="waf-regex-pattern-set-creating"></a>

按照本部分中的过程创建新的正则表达式模式集。

**创建正则表达式模式集**

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

1. 在导航窗格中，选择 **正则表达式模式集**，然后选择 **创建正则表达式模式集**。

1. 输入正则表达式模式集的名称和描述。当您想要使用集时，您可以使用这些信息来标识集。
**注意**  
正则表达式模式集在创建之后无法更改名称。

1. 对于**区域**，选择全局 (CloudFront) 或选择要存储正则表达式模式集的区域。只能在保护区域资源的保护包 (Web ACLs) 中使用区域正则表达式模式集。要使用保护包 (Web ACLs) 中设置的正则表达式模式来保护 Amazon CloudFront 分发，您必须使用 Global (CloudFront)。

1. 在**正则表达式**文本框中，每行输入一个正则表达式模式。

   例如，正则表达式 `I[a@]mAB[a@]dRequest` 与以下字符串匹配：`IamABadRequest`、`IamAB@dRequest`、`I@mABadRequest` 和 `I@mAB@dRequest`。

   AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

1. 查看正则表达式模式集的设置，然后选择 **创建正则表达式模式集**。

## 删除正则表达式模式集
<a name="waf-regex-pattern-set-deleting"></a>

按照本部分中的指导删除引用集。

**删除引用的集合和规则组**  
删除可在保护包 (Web ACL) 中使用的实体（例如 IP 集、正则表达式模式集或规则组）时， AWS WAF 会检查该实体当前是否正在保护包 (Web ACL) 中使用。如果它发现它正在使用中，则 AWS WAF 会警告你。 AWS WAF 几乎总是能够确定保护包（Web ACL）是否引用了实体。但是在极少数情况下，它可能无法确定。如果您需要确保当前没有任何实体在使用该实体，请在将其删除之前在保护包 (Web ACLs) 中进行检查。如果实体是引用的集合，请确保没有规则组正在使用它。

**删除正则表达式模式集**

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

1. 在导航窗格中，选择 **正则表达式模式集**。

1. 选择要删除的正则表达式模式集，然后选择 **删除**。

# 自定义的 Web 请求和响应 AWS WAF
<a name="waf-custom-request-response"></a>

本节介绍如何将自定义 Web 请求和响应处理行为添加到 AWS WAF 规则操作和默认保护包 (Web ACL) 操作中。只要您的自定义设置所附的操作适用，就会适用。

您可以通过以下方式自定义 web 请求和响应：
+ 使用 Allow、Count、CAPTCHA 和 Challenge 操作，您可以在 web 请求中插入自定义标头。当 AWS WAF 将 web 请求转发到受保护的资源时，该请求将包含整个原始请求以及您插入的自定义标头。对于 CAPTCHA 和 Challenge 操作，只有在该请求通过了验证码或质询令牌检查后， AWS WAF 才会应用此自定义响应。
+ 通过 Block 操作，您可以定义完整的自定义响应，包括响应代码、标头和正文。受保护的资源使用提供的自定义响应来响应请求 AWS WAF。您的自定义响应将取代 `403 (Forbidden)` 的默认 Block 操作响应。

**您可以自定义的操作设置**  
在定义以下操作设置时，可以指定自定义请求或响应：
+ 规则操作。有关信息，请参阅[在中使用规则操作 AWS WAF](waf-rule-action.md)。
+ 保护包（web ACL）的默认操作。有关信息，请参阅[在中设置保护包 (Web ACL) 的默认操作 AWS WAF](web-acl-default-action.md)。

**您无法自定义的操作设置**  
对于在保护包（web ACL）中使用的规则组，您*不能*在覆盖操作中指定自定义请求处理。请参阅[使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)。另请参阅 [在中使用托管规则组语句 AWS WAF](waf-rule-statement-type-managed-rule-group.md) 和 [在中使用规则组语句 AWS WAF](waf-rule-statement-type-rule-group.md)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

**对您使用自定义请求和响应的限制**  
AWS WAF 定义了您使用自定义请求和响应的最大设置。例如，每个保护包（web ACL）或规则组的最大请求标头数，以及单个自定义响应定义的最大自定义标头数。有关信息，请参阅[AWS WAF 配额](limits.md)。

**Topics**
+ [为非阻止操作插入自定义请求标头](customizing-the-incoming-request.md)
+ [发送 Block 操作的自定义响应](customizing-the-response-for-blocked-requests.md)
+ [自定义响应支持的状态码](customizing-the-response-status-codes.md)

# 为非阻止操作插入自定义请求标头
<a name="customizing-the-incoming-request"></a>

本节介绍当规则操作未阻止请求时， AWS WAF 如何指示将自定义标头插入到原始 HTTP 请求中。使用此选项，您只需添加到请求中。您不能修改或替换原始请求的任何部分。插入自定义标头的使用案例包括向下游应用程序发出信号，要求其根据插入的标头以不同方式处理该请求，以及标记该请求以进行分析。

**重要**  
此选项适用于规则操作 Allow、Count、CAPTCHA 和 Challenge，以及设置为 Allow 的保护包（web ACL）默认操作。有关规则操作的更多信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。有关默认保护包（web ACL）操作的更多信息，请参阅 [在中设置保护包 (Web ACL) 的默认操作 AWS WAF](web-acl-default-action.md)。

## 使用自定义请求标头名称时的注意事项
<a name="using-custom-request-header-names"></a>

**在请求标头中添加了前缀**  
AWS WAF 为其插入的所有请求标头添加前缀`x-amzn-waf-`，以避免与请求中已有的标头混淆。例如，如果您指定标题名称`sample`，则会 AWS WAF 插入标题`x-amzn-waf-sample`。

**重要**  
作为安全措施，您可以添加字符串匹配规则，以阻止标头以 `x-amzn-waf-` 开头的请求。这会阻止来自非AWS WAF 来源的请求，这些请求模仿处理自定义请求标头 AWS WAF 时插入`x-amzn-waf-`的前缀字符串。

以下示例显示了配置为阻止未插入`x-amzn-waf-`前缀的流量的字符串匹配规则 AWS WAF：

```
    "Rules": [
        {
          "Name": "CustomHeader",
          "Priority": 0,
          "Statement": {
            "ByteMatchStatement": {
              "SearchString": " x-amzn-waf-",
              "FieldToMatch": {
                "Headers": {
                  "MatchPattern": {
                    "All": {}
                  },
                  "MatchScope": "KEY",
                  "OversizeHandling": "MATCH"
                }
              },
              "TextTransformations": [
                {
                  "Priority": 0,
                  "Type": "NONE"
                }
              ],
              "PositionalConstraint": "STARTS_WITH"
            }
          },
          "Action": {
            "Block": {}
          },
          "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "CustomHeader"
          }
        }
      ]
```

有关使用字符串匹配规则的信息，请参阅 [字符串匹配规则语句](waf-rule-statement-type-string-match.md)。

**同名标头**  
如果请求中已经有 AWS WAF 正在插入的同名标头，则 AWS WAF 会覆盖该标头。因此，如果您在多个具有相同名称的规则中定义标头，则检查请求并查找匹配项的最后一条规则将添加其标头，而之前的任何规则都不会添加标头。

## 使用带有非终止规则操作的自定义标头
<a name="custom-request-header-non-terminating-rule-actions"></a>

与Allow操作不同，该Count操作不会停止 AWS WAF 使用保护包（Web ACL）中的其余规则处理 Web 请求。同样，当CAPTCHA并Challenge确定请求令牌有效时，这些操作不会停止 AWS WAF 处理 Web 请求。因此，如果采用具有这些操作之一的规则插入自定义标头，后续规则可能也会插入自定义标头。有关规则操作行为的更多信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

例如，假设您拥有以下规则，按所示顺序排列优先级：

1. RuleA，其中包含一个 Count 操作和一个名为 `RuleAHeader` 的自定义标头。

1. RuleB，其中包含一个 Allow 操作和一个名为 `RuleBHeader` 的自定义标头。

如果请求同时匹配 ruleA 和 RuleB，则 AWS WAF 插入标头`x-amzn-waf-RuleAHeader`和`x-amzn-waf-RuleBHeader`，然后将请求转发到受保护的资源。

AWS WAF 完成对请求的检查后，在 Web 请求中插入自定义标头。因此，如果您将自定义请求处理与将操作设置为 Count 的规则一起使用，则后续规则不会检查您添加的自定义标头。

## 自定义请求处理示例
<a name="example-custom-request-handling"></a>

您可以为规则的操作或保护包（web ACL）的默认操作定义自定义请求处理。下表显示保护包（web ACL）默认操作中添加的用于自定义处理的 JSON。

```
{
 "Name": "SampleWebACL",
 "Scope": "REGIONAL",
 "DefaultAction": {
  "Allow": {
   "CustomRequestHandling": {
    "InsertHeaders": [
     {
      "Name": "fruit",
      "Value": "watermelon"
     },
     {
      "Name": "pie",
      "Value": "apple"
     }
    ]
   }
  }
 },
 "Description": "Sample protection pack (web ACL) with custom request handling configured for default action.",
 "Rules": [],
 "VisibilityConfig": {
  "SampledRequestsEnabled": true,
  "CloudWatchMetricsEnabled": true,
  "MetricName": "SampleWebACL"
 }
}
```

# 发送 Block 操作的自定义响应
<a name="customizing-the-response-for-blocked-requests"></a>

本节介绍如何指示 AWS WAF 将设置为的规则操作或保护包 (Web ACL) 默认操作的自定义 HTTP 响应发送回客户端。Block有关规则操作的更多信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。有关默认保护包（web ACL）操作的更多信息，请参阅 [在中设置保护包 (Web ACL) 的默认操作 AWS WAF](web-acl-default-action.md)。

在为 Block 操作定义自定义响应处理时，您可以定义状态代码、标头和响应正文。有关可与配合使用的状态代码列表 AWS WAF，请参阅以下部分[自定义响应支持的状态码](customizing-the-response-status-codes.md)。

**使用案例**  
自定义响应的使用案例包括：
+ 将默认状态码发送回客户端。
+ 将自定义响应标头发送回客户端。您可以为指定任何标头名称，除 `content-type` 外。
+ 将静态错误页面发送回客户端。
+ 将客户端重定向到其他 URL。为此，您需要指定一个 `3xx` 重定向状态码，例如 `301 (Moved Permanently)` 或 `302 (Found)`，然后以新 URL 指定一个名为 `Location` 的新标头。

**与您在受保护资源中定义的响应进行交互**  
您为 AWS WAF Block操作指定的自定义响应优先于您在受保护资源中定义的任何响应规范。

您保护的 AWS 资源的主机服务 AWS WAF 可能允许对 Web 请求进行自定义响应处理。示例包括：
+ 借助 Amazon CloudFront，您可以根据状态代码自定义错误页面。有关信息，请参阅《*Amazon CloudFront 开发者指南》*中的[生成自定义错误响应](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html)。
+ 使用 Amazon API Gateway，您可以为网关定义响应和状态码。有关更多信息，请参阅 *Amazon API Gateway 开发人员指南*中的 [API Gateway 中的 Gateway 响应](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-gatewayResponse-definition.html)。

在受保护的 AWS 资源中，您不能将 AWS WAF 自定义响应设置与自定义响应设置结合使用。任何单个 web 请求的响应规范要么完全来自 AWS WAF ，要么完全来自受保护的资源。

对于 AWS WAF 阻塞的 Web 请求，以下显示了优先顺序。

1. **AWS WAF 自定义响应**-如果 AWS WAF Block操作启用了自定义响应，则受保护的资源会将配置的自定义响应发送回客户端。您在受保护的资源中定义的任何响应设置（如有）均无效。

1. **在受保护资源中定义的自定义响应**：否则，如果受保护资源有指定的自定义响应设置，则受保护资源将使用这些设置来响应客户端。

1. **AWS WAF 默认Block响应**-否则，受保护的资源将使用 AWS WAF 默认响应来Block响应客户端`403 (Forbidden)`。

对于 AWS WAF 允许的 Web 请求，您对受保护资源的配置决定了它发送回客户端的响应。您无法在中 AWS WAF 为允许的请求配置响应设置。您可以 AWS WAF 为允许的请求配置的唯一自定义是在原始请求中插入自定义标头，然后再将请求转发到受保护的资源。上一节 [为非阻止操作插入自定义请求标头](customizing-the-incoming-request.md) 中介绍了此选项。

**自定义响应标头**  
您可以为指定任何标头名称，除 `content-type` 外。

**自定义响应正文**  
您可以在要使用的保护包（web ACL）或规则组的上下文中定义自定义响应的正文。定义自定义响应正文后，您可以在保护包（web ACL）或创建它的规则组中任何其他位置通过引用来使用它。在单个 Block 操作设置中，您可以引用要使用的自定义正文，并定义自定义响应的状态代码和标头。

在控制台中创建自定义响应时，您可以从已定义的响应正文中进行选择，也可以创建新的响应正文。在控制台之外，您可以在保护包（web ACL）或规则组级别定义自定义响应正文，然后从 保护包（web ACL）或规则组中的操作设置中进行引用。这在下一节的 JSON 示例中有所体现。

**自定义响应示例**  
以下示例列出了具有自定义响应设置的规则组的 JSON。为整个规则组定义自定义响应正文，然后由规则操作中的键来引用。

```
{
 "ARN": "test_rulegroup_arn",
 "Capacity": 1,
 
 "CustomResponseBodies": {
  "CustomResponseBodyKey1": {
   "Content": "This is a plain text response body.",
   "ContentType": "TEXT_PLAIN"
  }
 },
 
 "Description": "This is a test rule group.",
 "Id": "test_rulegroup_id",
 "Name": "TestRuleGroup",
 
 "Rules": [
  {
   "Action": {
    "Block": {
     "CustomResponse": {
      "CustomResponseBodyKey": "CustomResponseBodyKey1",
      "ResponseCode": 404,
      "ResponseHeaders": [
       {
        "Name": "BlockActionHeader1Name",
        "Value": "BlockActionHeader1Value"
       }
      ]
     }
    }
   },
   "Name": "GeoMatchRule",
   "Priority": 1,
   "Statement": {
    "GeoMatchStatement": {
     "CountryCodes": [
      "US"
     ]
    }
   },
   "VisibilityConfig": {
    "CloudWatchMetricsEnabled": true,
    "MetricName": "TestRuleGroupReferenceMetric",
    "SampledRequestsEnabled": true
   }
  }
 ],
 "VisibilityConfig": {
  "CloudWatchMetricsEnabled": true,
  "MetricName": "TestRuleGroupMetric",
  "SampledRequestsEnabled": true
 }
}
```

# 自定义响应支持的状态码
<a name="customizing-the-response-status-codes"></a>

本节列出了可以在自定义响应中使用的状态码。有关 HTTP 状态码的详细信息，请参阅互联网工程任务组 (IETF) 的[状态码](https://www.rfc-editor.org/rfc/rfc9110.html#name-status-codes)和维基百科上的 [HTTP 状态码列表](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes)。

以下是 AWS WAF 支持自定义响应的 HTTP 状态代码。
+ `2xx Successful`
  + `200` – `OK`
  + `201` – `Created`
  + `202` – `Accepted` 
  + `204` – `No Content` 
  + `206` – `Partial Content`
+ `3xx Redirection `
  + `300` – `Multiple Choices`
  + `301` – `Moved Permanently`
  + `302` – `Found`
  + `303` –`See Other`
  + `304` – `Not Modified`
  + `307` – `Temporary Redirect`
  + `308` – `Permanent Redirect`
+ `4xx Client Error `
  + `400` – `Bad Request`
  + `401` – `Unauthorized`
  + `403` – `Forbidden`
  + `404` – `Not Found`
  + `405` – `Method Not Allowed`
  + `408` – `Request Timeout`
  + `409` – `Conflict`
  + `411` – `Length Required`
  + `412` – `Precondition Failed`
  + `413` – `Request Entity Too Large`
  + `414` – `Request-URI Too Long`
  + `415` – `Unsupported Media Type`
  + `416` – `Requested Range Not Satisfiable`
  + `421` – `Misdirected Request`
  + `429` – `Too Many Requests`
+ `5xx Server Error`
  + `500` – `Internal Server Error`
  + `501` – `Not Implemented`
  + `502` – `Bad Gateway`
  + `503` – `Service Unavailable`
  + `504` – `Gateway Timeout`
  + `505` – `HTTP Version Not Supported`

# 在 Web 请求中添加标签 AWS WAF
<a name="waf-labels"></a>

本节说明了什么是 AWS WAF 标签。

标签是规则与 web 请求匹配时添加到此请求中的元数据。一旦添加后，标签在请求中一直可用，直至保护包（web ACL）评估结束。您可以使用标签匹配语句访问稍后在保护包（web ACL）评估中所运行规则的标签。有关更多信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md)。

网络请求上的标签会生成 Amazon CloudWatch 标签指标。有关指标和维度的列表，请参阅 [标签指标和维度](waf-metrics.md#waf-metrics-label)。有关通过控制台和通过 AWS WAF 控制台访问指标 CloudWatch 和指标摘要的信息，请参阅[监控和调整您的 AWS WAF 保护措施](web-acl-testing-activities.md)。

**标签使用案例**  
 AWS WAF 标签的常见用例包括：
+ 在@@ **对请求采取操作之前，根据多个规则语句评估 Web 请求**-在发现与保护包 (Web ACL) 中的规则匹配后，如果规则操作未终止保护包 (Web ACL) 评估，则 AWS WAF 继续根据保护包 (Web ACL) 评估评估该请求。在决定允许或阻止请求之前，您可以使用标签来评估和收集来自多个规则的信息。为此，请将现有规则的操作更改为 Count，然后将其配置为为匹配的请求添加标签。然后，添加一个或多个新规则，在其他规则之后运行，并将它们配置为根据标签匹配组合评估标签并管理请求。
+ **按地理区域管理 web 请求**：您可以单独使用地理匹配规则来按来源国管理 web 请求。要将位置精细调整到区域级别，您可以使用带有 Count 操作和标签匹配规则的地理匹配规则。有关地理匹配规则的信息，请参阅 [地理匹配规则语句](waf-rule-statement-type-geo-match.md)。
+ **跨多个规则重复使用逻辑**：如果您需要在多个规则中重复使用相同的逻辑，则可以使用标签对逻辑进行单一来源化，然后测试结果。当您有多个使用嵌套规则语句的公共子集的复杂规则时，在复杂的规则中复制通用规则集可能非常耗时且容易出错。使用标签，您可以使用通用规则子集创建新规则，该子集计算匹配请求并为其添加标签。您将新规则添加到保护包（web ACL）中，使其在最初的复杂规则之前运行。然后，在原始规则中，将共享规则子集替换为检查标签的单个规则。

  例如，假设您有多条规则，而您只想应用于您的登录路径。与其让每条规则指定相同的逻辑来匹配潜在的登录路径，不如实施一条包含该逻辑的新规则。让新规则为匹配的请求添加标签，以表明该请求位于登录路径上。在您的保护包（web ACL）中，为该新规则设置比原始规则更低的数字优先级，使其首先运行。然后，在您的原始规则中，将共享逻辑替换为检查标签是否存在。有关优先级设置的信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。
+ **为规则组中的规则创建例外**：此选项对您无法查看或更改的托管规则组特别有用。许多托管规则组规则会为匹配的 web 请求添加标签，以指示匹配的规则，并可能提供有关匹配的更多信息。当您使用向请求添加标签的规则组时，您可以覆盖规则组规则来计算匹配次数，然后根据规则组标签在处理 web 请求的规则组之后运行规则。所有 AWS 托管规则都会将标签添加到匹配的 web 请求。有关详细说明，请参阅 [AWS 托管规则规则组列表](aws-managed-rule-groups-list.md) 的规则说明。
+ **使用标签指标监控流量模式**：您可以访问通过规则所添加标签的指标，以及您在保护包（web ACL）中使用任何托管规则组添加的指标。所有 AWS 托管规则组都会为其评估的 web 请求添加标签。有关标签指标和维度的列表，请参阅 [标签指标和维度](waf-metrics.md#waf-metrics-label)。您可以通过或通过 AWS WAF 控制台中的保护包 (Web ACL) 页面访问指标 CloudWatch 和指标摘要。有关信息，请参阅[监控和调整您的 AWS WAF 保护措施](web-acl-testing-activities.md)。

# 标签的工作原理 AWS WAF
<a name="waf-rule-label-overview"></a>

本节介绍 AWS WAF 标签的工作原理。

当规则与 Web 请求匹配时，如果该规则定义了标签，则会在规则评估结束时将标签 AWS WAF 添加到请求中。在保护包（web ACL）中的匹配规则之后评估的规则可能与规则添加的标签进行匹配。

**谁在请求中添加标签**  
评估请求的保护包（web ACL）组件可以为请求添加标签。
+ 任何不是规则组参考语句的规则都可以为匹配的 Web 请求添加标签。标签标准是规则定义的一部分，当 Web 请求与规则匹配时， AWS WAF 会将规则的标签添加到请求中。有关信息，请参阅[AWS WAF 添加标签的规则](waf-rule-label-add.md)。
+ 地理匹配规则语句会为其检查的任何请求添加国家和区域标签，无论该语句是否产生匹配。有关信息，请参阅[地理匹配规则语句](waf-rule-statement-type-geo-match.md)。
+  AWS WAF 所有人的 AWS 托管规则会为他们检查的请求添加标签。它们根据规则组中的规则匹配添加一些标签，并根据托管规则组使用的 AWS 流程添加一些标签，例如使用智能威胁缓解规则组时添加的令牌标签。有关每个托管规则组添加的标签的信息，请参阅 [AWS 托管规则规则组列表](aws-managed-rule-groups-list.md)。

**如何 AWS WAF 管理标签**  
AWS WAF 在规则对请求的检查结束时，将规则的标签添加到请求中。标记是规则匹配活动的一部分，与操作类似。

保护包（web ACL）评估结束后，标签不会保留在 web 请求中。为使其他规则与您规则添加的标签相匹配，您的规则操作不得终止保护包（web ACL）对 web 请求的评估。规则操作必须设置为 Count、CAPTCHA 或 Challenge。当保护包（web ACL）评估未终止时，保护包（web ACL）中的后续规则可以根据请求运行其标签匹配条件。有关规则操作的更多信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

**在保护包（web ACL）评估期间访问标签**  
添加后，只要 AWS WAF 根据保护包（Web ACL）评估请求，标签就会在请求上保持可用。保护包（web ACL）中的任何规则都可以访问已在同一保护包（web ACL）中运行的规则所添加的标签。这包括直接在保护包（web ACL）中定义的规则和在保护包（web ACL）中所使用规则组中定义的规则。
+ 您可以使用标签匹配语句与规则的请求检查条件中的标签进行匹配。您可以与请求中附加的任何标签进行匹配。有关语句的详细信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md)。
+ 地理匹配语句会添加带或不带匹配项的标签，但只有在该语句的包含保护包（web ACL）规则完成请求评估后，这些标签才可用。
  + 您不能使用单个规则（例如逻辑 `AND` 语句）对地理标签运行地理匹配语句和标签匹配语句。您必须将标签匹配语句放在单独的规则中，该规则在包含地理匹配语句的规则之后运行。
  + 如果您在基于速率的规则语句或托管规则组参考语句中使用地理匹配语句作为范围缩小语句，则该地理匹配语句添加的标签无法由包含规则的语句进行检查。如果您需要在基于速率的规则语句或规则组中检查地理标记，则必须在事先运行的单独规则中运行地理匹配语句。

**在保护包（web ACL）评估之外访问标签信息**  
保护包（web ACL）评估结束后，标签不会保留在 web 请求中，而是 AWS WAF 将标签信息记录在日志和指标中。
+ AWS WAF 存储任意请求中前 100 个标签的 Amazon CloudWatch 指标。有关访问标签指标的信息，请参阅 [使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md) 和 [标签指标和维度](waf-metrics.md#waf-metrics-label)。
+ AWS WAF 汇总了 AWS WAF 控制台中保护包 (Web ACL) 流量概述仪表板中的 CloudWatch 标签指标。您可以在任何保护包（web ACL）页面上访问控制面板。有关更多信息，请参阅 [保护包的流量概述仪表板 (Web ACLs)](web-acl-dashboards.md)。
+ AWS WAF 在日志中记录请求中前 100 个标签的标签。您可以使用标签和规则操作来筛选 AWS WAF 记录的日志。有关信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

您的保护包 (Web ACL) 评估可以将 100 多个标签应用于 Web 请求并与 100 多个标签进行匹配，但 AWS WAF 只会在日志和指标中记录前 100 个标签。

# 中的标签语法和命名要求 AWS WAF
<a name="waf-rule-label-requirements"></a>

本节介绍如何构造 AWS WAF 标签并与之匹配。

标签是由前缀、可选命名空间和名称组成的字符串。标签的组成部分用冒号分隔。标签具有以下要求和特征：
+ 标签区分大小写。
+ 每个标签命名空间或标签名称最多可包含 128 个字符。
+ 您最多可以在标签中指定 5 个命名空间。
+ 标签的组成部分用冒号 (`:`) 分隔。
+ 不能在为标签指定的命名空间或名称中使用以下保留字符串：`awswaf`、`aws`、`waf`、`rulegroup`、`webacl`、`regexpatternset`、`ipset` 和 `managed`。

## 标签语法
<a name="waf-rule-label-syntax"></a>

完全限定的标签具有前缀、可选命名空间和标签名称。前缀用于标识添加标签的规则的规则组或保护包（web ACL）上下文。命名空间可用于为标签添加更多上下文。标签名称提供了标签的最低详细级别。它通常表示在请求中添加标签的特定规则。

标签前缀因其来源而异。
+ **您的标签**：以下内容显示了您在保护包（web ACL）和规则组规则中所创建标签的完整标签语法。实体类型为 `rulegroup` 和 `webacl`。

  ```
  awswaf:<entity owner account id>:<entity type>:<entity name>:<custom namespace>:...:<label name>
  ```
  + 标签命名空间前缀：`awswaf:<entity owner account id>:<entity type>:<entity name>:`
  + 添加的自定义命名空间：`<custom namespace>:…:`

  在规则组或保护包（web ACL）中为规则定义标签时，您可以控制自定义命名空间字符串和标签名称。其余的由你生成 AWS WAF。 AWS WAF 自动在所有标签前加`awswaf`上账户和保护包 (Web ACL) 或规则组实体设置。
+ **托管规则组标签**：以下内容显示了由托管规则组中的规则创建的标签的完整标签语法。

  ```
  awswaf:managed:<vendor>:<rule group name>:<custom namespace>:...:<label name>
  ```
  + 标签命名空间前缀：`awswaf:managed:<vendor>:<rule group name>:`
  + 添加的自定义命名空间：`<custom namespace>:…:`

  所有 AWS 托管规则规则组都会添加标签。有关托管规则组的信息，请参阅 [在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)。
+ **来自其他 AWS 进程的标签**- AWS 托管规则规则组使用这些进程，因此您可以看到它们已添加到使用托管规则组评估的 Web 请求中。下面显示了由托管规则组调用的进程所创建的标签的完整标签语法。

  ```
  awswaf:managed:<process>:<custom namespace>:...:<label name>
  ```
  + 标签命名空间前缀：`awswaf:managed:<process>:`
  + 添加的自定义命名空间：`<custom namespace>:…:`

  这种类型的标签是为调用 AWS 进程的托管规则组而列出的。有关托管规则组的信息，请参阅 [在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)。

## 为您的规则添加标签的示例
<a name="waf-rule-label-examples-rules"></a>

以下示例标签由属于账户 111122223333 的名为 `testRules` 的规则组中的规则定义。

```
awswaf:111122223333:rulegroup:testRules:testNS1:testNS2:LabelNameA
```

```
awswaf:111122223333:rulegroup:testRules:testNS1:LabelNameQ
```

```
awswaf:111122223333:rulegroup:testRules:LabelNameZ
```

下面的列表显示了 JSON 中的示例标签规范。这些标签名称在结尾标签名称之前包含自定义命名空间字符串。

```
Rule: {
    Name: "label_rule",
    Statement: {...}
    RuleLabels: [
        Name: "header:encoding:utf8",
        Name: "header:user_agent:firefox"
    ],
    Action: { Count: {} }
}
```

**注意**  
您可以通过规则 JSON 编辑器在控制台中访问此类列表。

如果您在与前面的标签示例相同的规则组和账户中运行上述规则，则将生成以下完全限定标签：

```
awswaf:111122223333:rulegroup:testRules:header:encoding:utf8
```

```
awswaf:111122223333:rulegroup:testRules:header:user_agent:firefox
```

## 托管规则组的标签示例
<a name="waf-rule-label-examples-rule-groups"></a>

以下显示了 AWS 托管规则组及其调用的流程的示例标签。

```
awswaf:managed:aws:core-rule-set:NoUserAgent_Header
```

```
awswaf:managed:aws:sql-database:SQLiExtendedPatterns_QueryArguments
```

```
awswaf:managed:aws:atp:aggregate:attribute:compromised_credentials
```

```
awswaf:managed:token:accepted
```

# AWS WAF 添加标签的规则
<a name="waf-rule-label-add"></a>

在几乎所有规则中，您都可以定义标签并将其 AWS WAF 应用于任何匹配的请求。

以下规则类型是唯一的例外：
+ **基于速率的规则仅在速率受限时打标签**：基于速率的规则只在特定聚合实例受 AWS WAF的速率限制时为该实例的 Web 请求添加标签。有关基于速率的规则的更多信息，请参阅 [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)。
+ **不允许在规则组参考语句中添加标签**：控制台不接受规则组语句或托管规则组语句的标签。通过 API 为任一语句类型指定标签都会产生验证异常。有关这些语句类型的信息，请参阅 [在中使用托管规则组语句 AWS WAF](waf-rule-statement-type-managed-rule-group.md) 和 [在中使用规则组语句 AWS WAF](waf-rule-statement-type-rule-group.md)。

**WCUs **— 您在保护包 (Web ACL) 或规则组规则中定义的每 5 个标签为 1 个 WCU。

**此语句的查找位置**
+ 控制台上的**规则生成器**：在规则的**操作**设置中的**标签**下。
+ **API 数据类型**：`Rule` `RuleLabels`

通过指定要附加到标签命名空间前缀的自定义命名空间字符串和名称，可以在规则中定义标签。 AWS WAF 从定义规则的上下文中派生前缀。有关这方面的信息，请参阅 [中的标签语法和命名要求 AWS WAF](waf-rule-label-requirements.md) 下面的标签语法信息。

# AWS WAF 与标签匹配的规则
<a name="waf-rule-label-match"></a>

本节介绍了如何使用标签匹配语句来评估 Web 请求标签。您可以与*标签*（需要标签名称）或*命名空间*（需要命名空间规范）进行匹配。对于标签或命名空间，您可以选择在规范中包含前面的命名空间和前缀。有关此语句类型的更多信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md)。

标签的前缀用于定义标签规则的规则组或保护包（web ACL）的上下文。在规则的标签匹配语句中，如果您的标签或命名空间匹配字符串未指定前缀，则 AWS WAF 使用标签匹配规则的前缀。
+ 直接在保护包（web ACL）中定义的规则的标签具有指定保护包（web ACL）上下文的前缀。
+ 规则组内规则的标签带有指定规则组上下文的前缀。这可以是您自己的规则组，也可以是为您管理的规则组。

有关这方面的信息，请参阅 [中的标签语法和命名要求 AWS WAF](waf-rule-label-requirements.md) 下面的标签语法。

**注意**  
一些托管规则组会添加标签。您可以调用 `DescribeManagedRuleGroup`，从而通过 API 来检索这些信息。标签列在响应的 `AvailableLabels` 属性中。

如果要匹配与规则上下文不同的上下文中的规则，则必须在匹配字符串中提供前缀。例如，如果要匹配由托管规则组中的规则添加的标签，可以在保护包（web ACL）中添加一条带有标签匹配语句的规则，其匹配字符串指定规则组的前缀，然后是附加的匹配条件。

在标签匹配语句的匹配字符串中，您可以指定标签或命名空间：
+ **标签**：匹配项的标签规范由标签的结尾部分组成。您可以添加任意数量的连续命名空间，这些命名空间紧接在标签名称之前，其后是名称。您也可以通过以前缀开头的规范来提供完全限定的标签。

  示例规范：
  + `testNS1:testNS2:LabelNameA`
  + `awswaf:managed:aws:managed-rule-set:testNS1:testNS2:LabelNameA`
+ **命名空间**：匹配项的命名空间规范由标签规范中除名称之外的任意连续子集组成。可以包含前缀，也可以包含一个或多个命名空间字符串。

  示例规范：
  + `testNS1:testNS2:`
  + `awswaf:managed:aws:managed-rule-set:testNS1:`

# AWS WAF 标签匹配示例
<a name="waf-rule-label-match-examples"></a>

本节提供标签匹配规则语句的匹配规范示例。

**注意**  
这些 JSON 列表是在控制台中创建的，方法是向保护包（web ACL）添加一条带有标签匹配规范的规则，然后编辑规则并切换到**规则 JSON 编辑器**。您还可以通过或命令行界面获取规则组或保护包 (Web ACL) 的 JSON。 APIs 

**Topics**
+ [与本地标签匹配](#waf-rule-label-match-examples-local-label)
+ [与来自其他上下文的标签进行匹配](#waf-rule-label-match-examples-label)
+ [与托管规则组标签匹配](#waf-rule-label-match-examples-mgd-rg-label)
+ [与本地命名空间匹配](#waf-rule-label-match-examples-local-namespace)
+ [与托管规则组命名空间匹配](#waf-rule-label-match-examples-mgd-rg-namespace)

## 与本地标签匹配
<a name="waf-rule-label-match-examples-local-label"></a>

以下 JSON 列表显示了与本规则上下文相同的标签匹配语句，该标签添加了到本地 Web 请求中。

```
Rule: {
    Name: "match_rule",
    Statement: {
        LabelMatchStatement: {
            Scope: "LABEL",
            Key: "header:encoding:utf8"
        }
    },
    RuleLabels: [
        ...generate_more_labels...
    ],
    Action: { Block: {} }
}
```

如果您在账户 111122223333 中使用此匹配语句，则在为保护包（web ACL）`testWebACL` 定义的规则中，它将匹配以下标签。

```
awswaf:111122223333:webacl:testWebACL:header:encoding:utf8
```

```
awswaf:111122223333:webacl:testWebACL:testNS1:testNS2:header:encoding:utf8
```

它与以下标签不匹配，因为标签字符串不完全匹配。

```
awswaf:111122223333:webacl:testWebACL:header:encoding2:utf8
```

它与以下标签不匹配，因为上下文不一样，因此前缀不匹配。即使您将规则组 `productionRules` 添加到定义规则的保护包（web ACL）`testWebACL` 中，也是如此。

```
awswaf:111122223333:rulegroup:productionRules:header:encoding:utf8
```

## 与来自其他上下文的标签进行匹配
<a name="waf-rule-label-match-examples-label"></a>

以下 JSON 列表显示了一条标签匹配规则，该规则与用户创建的规则组内规则的标签相匹配。对于保护包（web ACL）中运行的所有规则（不属于已命名规则组），规范中都要求使用前缀。此示例标签规范仅匹配确切的标签。

```
Rule: {
    Name: "match_rule",
    Statement: {
        LabelMatchStatement: {
            Scope: "LABEL",
            Key: "awswaf:111122223333:rulegroup:testRules:header:encoding:utf8"
        }
    },
    RuleLabels: [
        ...generate_more_labels...
    ],
    Action: { Block: {} }
}
```

## 与托管规则组标签匹配
<a name="waf-rule-label-match-examples-mgd-rg-label"></a>

这是一种特殊情况，即与来自另一种上下文的标签进行匹配，而不是与匹配规则的上下文进行匹配。以下 JSON 列表显示了托管规则组标签的标签匹配语句。这仅匹配标签匹配语句的键设置中指定的确切标签。

```
Rule: {
    Name: "match_rule",
    Statement: {
        LabelMatchStatement: {
            Scope: "LABEL",
            Key: "awswaf:managed:aws:managed-rule-set:header:encoding:utf8"
        }
    },
    RuleLabels: [
        ...generate_more_labels...
    ],
    Action: { Block: {} }
}
```

## 与本地命名空间匹配
<a name="waf-rule-label-match-examples-local-namespace"></a>

以下 JSON 列表显示了本地命名空间的标签匹配语句。

```
Rule: {
    Name: "match_rule",
    Statement: {
        LabelMatchStatement: {
            Scope: "NAMESPACE",
            Key: "header:encoding:"
        }
    },
    Labels: [
        ...generate_more_labels...
    ],
    Action: { Block: {} }
}
```

与本地 `Label` 匹配类似，如果您在账户 111122223333 中使用此语句，在为保护包（web ACL）`testWebACL` 定义的规则中，它将匹配以下标签。

```
awswaf:111122223333:webacl:testWebACL:header:encoding:utf8
```

它与以下标签不匹配，因为账户不一样，因此前缀不匹配。

```
awswaf:444455556666:webacl:testWebACL:header:encoding:utf8
```

该前缀也与托管规则组应用的任何标签都不匹配，如下所示。

```
awswaf:managed:aws:managed-rule-set:header:encoding:utf8
```

## 与托管规则组命名空间匹配
<a name="waf-rule-label-match-examples-mgd-rg-namespace"></a>

以下 JSON 列表显示了托管规则组命名空间的标签匹配语句。对于您拥有的规则组，您还需要提供前缀，以便匹配规则上下文之外的命名空间。

```
Rule: {
    Name: "match_rule",
    Statement: {
        LabelMatchStatement: {
            Scope: "NAMESPACE",
            Key: "awswaf:managed:aws:managed-rule-set:header:"
        }
    },
    RuleLabels: [
        ...generate_more_labels...
    ],
    Action: { Block: {} }
}
```

此规范与以下示例标签相匹配。

```
awswaf:managed:aws:managed-rule-set:header:encoding:utf8
```

```
awswaf:managed:aws:managed-rule-set:header:encoding:unicode
```

它与以下标签不匹配。

```
awswaf:managed:aws:managed-rule-set:query:badstring
```

# 中的智能威胁缓解 AWS WAF
<a name="waf-managed-protections"></a>

本节介绍由提供的托管智能威胁缓解功能 AWS WAF。您可以实施这些高级的专业保护，以防范恶意机器人和账户盗用尝试等威胁。

**注意**  
除基本使用 AWS WAF费用外，此处描述的功能还会产生额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

本节提供的指南适用于一般了解如何创建和管理 AWS WAF Web ACLs、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。

**Topics**
+ [中的智能威胁缓解选项 AWS WAF](waf-managed-protections-comparison-table.md)
+ [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md)
+ [代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)
+ [AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)](waf-acfp.md)
+ [AWS WAF 防欺诈控制账户接管 (ATP)](waf-atp.md)
+ [AWS WAF 机器人控制](waf-bot-control.md)
+ [AWS WAF 分布式拒绝服务防护 DDo](waf-anti-ddos.md)
+ [中的客户端应用程序集成 AWS WAF](waf-application-integration.md)
+ [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)

# 中的智能威胁缓解选项 AWS WAF
<a name="waf-managed-protections-comparison-table"></a>

本节详细比较了实施智能威胁缓解的选项。

AWS WAF 为智能威胁缓解提供以下类型的保护。
+ AWS WAF F@@ **raud Control 账户创建防作弊 (ACFP)**-检测和管理应用程序注册页面上的恶意账户创建尝试。核心功能由 ACFP 托管规则组提供。有关更多信息，请参阅[AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)](waf-acfp.md)和[AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。
+ **AWS WAF Fraud Control 账户盗用预防 (ATP)**-检测和管理应用程序登录页面上的恶意接管企图。核心功能由 ATP 托管规则组提供。有关更多信息，请参阅[AWS WAF 防欺诈控制账户接管 (ATP)](waf-atp.md)和[AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。
+ **AWS WAF 机器人控制**-识别、标记和管理友好和恶意的机器人。该功能可管理具有各种应用程序中的唯一签名的普通机器人，也可管理具有特定应用程序签名的定向机器人。核心功能由机器人控制功能托管规则组提供。有关更多信息，请参阅[AWS WAF 机器人控制](waf-bot-control.md)和[AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。
+ **客户端应用程序集成 SDKs**-验证网页上的客户端会话和最终用户，并获取 AWS WAF 令牌供客户在网络请求中使用。如果您使用 ACFP、ATP 或 Bot Control，请尽可能 SDKs 在客户端应用程序中实现应用程序集成，以充分利用规则组的所有功能。我们只建议在需要快速保护关键资源而又没有足够时间进行软件开发工具包集成时，作为临时措施使用这些未集成软件开发工具包的规则组。有关实现的信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。
+ **Challenge和CAPTCHA规则操作** — 验证客户端会话和最终用户，并获取 AWS WAF 令牌供客户在其 Web 请求中使用。您可以在任何您指定规则操作的地方以及您的规则中实施这些操作，也可以在您使用的规则组中作为替换来实施。这些操作使用 AWS WAF JavaScript 插页式广告来询问客户或最终用户，并且它们需要支持的客户端应用程序。 JavaScript有关更多信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。

智能威胁缓解 AWS 托管规则组 ACFP、ATP 和 Bot Control 使用令牌进行高级检测。有关令牌在规则组中启用的功能的信息，请参阅 [使用 SDKs 与 ACFP 的应用程序集成](waf-acfp-with-tokens.md)、[使用 SDKs 与 ATP 的应用程序集成](waf-atp-with-tokens.md) 和 [使用应用程序 SDKs 与 Bot Control 集成](waf-bot-with-tokens.md)。

实施智能威胁缓解的选项从基本使用规则操作来运行挑战和强制获取令牌，到智能威胁缓解 AWS 托管规则组提供的高级功能。

下表详细比较了基本功能和高级功能的选项。

**Topics**
+ [质询和令牌获取选项](waf-managed-protections-comparison-table-token.md)
+ [智能威胁缓解托管规则组的选项](waf-managed-protections-comparison-table-rg.md)
+ [基于速率的规则和定向机器人控制功能规则中的速率限制选项](waf-rate-limiting-options.md)

# 质询和令牌获取选项
<a name="waf-managed-protections-comparison-table-token"></a>

本节比较了质询和令牌管理选项。

您可以使用 AWS WAF 应用程序集成 SDKs 或规则操作来提供挑战并获取令牌，Challenge以及CAPTCHA. 从广义上讲，规则操作更易于实施，但它们会产生额外的成本，更多地干扰您的客户体验，并且需要。 JavaScript它们 SDKs 需要在您的客户端应用程序中进行编程，但它们可以提供更好的客户体验，它们可以免费使用，并且可以与 Android 或 iOS 应用程序一起使用，也可以在 Android JavaScript 或 iOS 应用程序中使用。您只能将应用程序 SDKs 与使用付费智能威胁缓解托管规则组之一的保护包 (Web ACLs) 集成，如下一节所述。


**质询和令牌获取选项的比较**  

|  | Challenge 规则操作 | CAPTCHA 规则操作 | JavaScript SDK 挑战赛 | 移动软件开发工具包质询 | 
| --- | --- | --- | --- | --- | 
| 什么是 | 规则动作，通过向浏览器客户端提供静默质询插页式广告来强制获取 AWS WAF 令牌  | 通过向客户端最终用户展示视觉或音频挑战插页式广告来强制获取 AWS WAF 代币的规则操作  |  应用程序集成层，适用于客户端浏览器和其他执行设备JavaScript。呈现静默质询并获取令牌  |  应用集成层，适用于 Android 和 iOS 应用程序。原生呈现静默质询并获取令牌  | 
| 不错的选择…… | 针对机器人会话进行静默验证，并强制支持支持的客户获取代币 JavaScript  | 终端用户和针对机器人会话的静默验证，并强制执行令牌获取，适用于支持的客户端 JavaScript | 对机器人会话进行静默验证，并对支持的客户强制获取代币 JavaScript。它们 SDKs 提供了最低的延迟，并可以最好地控制挑战脚本在应用程序中的运行位置。 | 针对 Android 和 iOS 上的原生移动应用进行静默验证和令牌强制获取。它们 SDKs 提供了最低的延迟，并可以最好地控制挑战脚本在应用程序中的运行位置。 | 
| 实施的注意事项 | 作为规则操作设置实施 | 作为规则操作设置实施 | 需要保护包（web ACL）中的 ACFP、ATP 或机器人控制功能付费规则组之一。需要在客户端应用程序中进行编码。 | 需要保护包（web ACL）中的 ACFP、ATP 或机器人控制功能付费规则组之一。需要在客户端应用程序中进行编码。 | 
| 运行时系统注意事项 | 没有有效令牌的请求的侵入性流。客户被重定向到 AWS WAF 挑战插页式广告。添加网络往返行程，并且需要对 web 请求进行二次评估。 | 没有有效令牌的请求的侵入性流。客户端被重定向到 AWS WAF 验证码插页式广告。添加网络往返行程，并且需要对 web 请求进行二次评估。 | 可以在幕后运行。让您更好地控制质询体验。 | 可以在幕后运行。让您更好地控制质询体验。 | 
| 需要 JavaScript | 支持 | 是 | 是 | 否 | 
| 支持的客户端 | 执行 Javascript 的浏览器和设备 | 执行 Javascript 的浏览器和设备 | 执行 Javascript 的浏览器和设备 | Android 和 iOS 设备 | 
| 支持单页应用程序 (SPA) | 仅限强制执行。您可以将该Challenge操作与结合使用 SDKs，以确保请求具有有效的质询令牌。您不能使用规则操作将质询脚本传送到页面。 | 仅限强制执行。您可以将该CAPTCHA操作与结合使用SDKs，以确保请求具有有效的验证码令牌。您不能使用规则操作将验证码脚本传送到页面。 | 是 | 不适用 | 
| 额外费用 | 可以，适用于您在定义的规则中或在您使用的规则组中作为规则操作优先级明确指定的操作设置。在所有其他情况下都不是。 | 可以，适用于您在定义的规则中或在您使用的规则组中作为规则操作优先级明确指定的操作设置。在所有其他情况下都不是。 | 不需要，但需要付费规则组 ACFP、ATP 或 机器人控制功能。 | 不需要，但需要付费规则组 ACFP、ATP 或 机器人控制功能。 | 

有关与这些选项相关的成本的详细信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)中的智能威胁缓解信息。

只需添加带有 Challenge 或 CAPTCHA 操作的规则，即可更轻松地运行质询并提供基本的令牌强制执行。例如，如果您无权访问应用程序代码，则可能需要使用规则操作。

 SDKs 但是，与使用以下Challenge操作相比，如果可以实施，则可以节省成本并减少客户端 Web 请求的保护包 (Web ACL) 评估中的延迟：
+ 您可以编写自己的软件开发工具包实施，以便在应用程序中的任何位置运行质询。您可以在后台获取令牌，然后再进行任何会向您的受保护资源发送 web 请求的客户操作。这样，令牌就可以随客户端的第一个请求一起发送。
+ 相反，如果您通过实施带有 Challenge 操作的规则来获取令牌，则在客户端首次发送请求和令牌到期时，规则和操作需要额外的 web 请求评估和处理。Challenge 操作会阻止不具备有效的未过期令牌的请求，并将质询插页式广告发送回客户端。在客户端成功响应质询后，插页式广告会重新发送包含有效令牌的原始 web 请求，然后由保护包（web ACL）对其进行第二次评估。

# 智能威胁缓解托管规则组的选项
<a name="waf-managed-protections-comparison-table-rg"></a>

本节比较了托管规则组选项。

智能威胁缓解 AWS Managed Rules 规则组提供基本机器人管理、检测和缓解复杂的恶意机器人、检测和缓解账户接管企图，以及检测和缓解欺诈性账户创建尝试。这些规则组与上一节中 SDKs 描述的应用程序集成相结合，可为您的客户端应用程序提供最先进的保护和安全耦合。


**托管规则组选项的比较**  

|  | ACFP  | ATP  | 机器人控制功能的普通级别 | 机器人控制功能的目标级别 | 
| --- | --- | --- | --- | --- | 
| 什么是 | 在应用程序的注册和登录页面上管理可能属于欺诈账户创建尝试的请求。不管理机器人。请参阅[AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。 | 管理应用程序登录页面上可能属于恶意盗用尝试一部分的请求。不管理机器人。请参阅[AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。 | 管理可自我识别的普通机器人，其签名在不同应用中都是唯一的。请参阅[AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。 | 使用特定于应用程序的签名，管理无法自我识别的定向机器人。请参阅[AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。 | 
| 不错的选择…… | 检查账户创建流量是否存在欺诈账户创建攻击，例如通过用户名遍历和从单个 IP 地址创建许多新账户的尝试进行攻击。 | 检查登录流量是否存在账户盗用攻击，例如使用密码遍历的登录尝试和来自同一 IP 地址的多次登录尝试。与令牌一起使用时，还可以提供聚合保护，例如针对大量失败登录尝试的速率限制 IPs 和客户端会话。 | 基本机器人保护和普通自动机器人流量标记。 | 针对复杂机器人的目标保护，包括客户端会话级别的速率限制以及浏览器自动化工具（例如 Selenium 和 Puppeteer）的检测和缓解。 | 
| 添加表示评估结果的标签 | 支持 | 是 | 是 | 是 | 
| 添加令牌标签 | 支持 | 是 | 是 | 是 | 
| 阻止没有有效令牌的请求 | 不包括。请参阅 [阻止没有有效 AWS WAF 令牌的请求](waf-tokens-block-missing-tokens.md)。 | 不包括。请参阅 [阻止没有有效 AWS WAF 令牌的请求](waf-tokens-block-missing-tokens.md)。 | 不包括。请参阅[阻止没有有效 AWS WAF 令牌的请求](waf-tokens-block-missing-tokens.md)。 | 阻止在没有令牌的情况下发送 5 个请求的客户端会话。 | 
| 需要代 AWS WAF 币 aws-waf-token | 要求所有规则。请参阅[使用 SDKs 与 ACFP 的应用程序集成](waf-acfp-with-tokens.md)。 | 要求许多规则。请参阅 [使用 SDKs 与 ATP 的应用程序集成](waf-atp-with-tokens.md)。 | 否 | 是 | 
| 获取代币 AWS WAF aws-waf-token | 是的，由规则 AllRequests 强制执行 | 否 | 否 | 一些规则使用 Challenge 或 CAPTCHA 规则操作来获取令牌。 | 

有关与这些选项相关的成本的详细信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)中的智能威胁缓解信息。

# 基于速率的规则和定向机器人控制功能规则中的速率限制选项
<a name="waf-rate-limiting-options"></a>

本节比较了基于速率的缓解选项。

 AWS WAF Bot Control 规则组的目标级别和 AWS WAF 基于速率的规则语句都提供 Web 请求速率限制。下表比较了这两个选项。


**基于速率的检测和缓解选项的比较**  

|  | AWS WAF 基于费率的规则 | AWS WAF 机器人控制目标规则 | 
| --- | --- | --- | 
| 如何应用速率限制 | 对速率过高的请求组进行操作。您可以应用除 Allow 之外的任何操作。 | 通过使用请求令牌强制执行类似人类的访问模式并应用动态速率限制。 | 
| 基于历史流量基线？ | 否  | 是  | 
| 累积历史流量基线所需的时间 | 不适用  | 动态阈值需要五分钟。 N/A 因为缺少代币。 | 
| 缓解延迟 | 通常是 30-50 秒。最多可能需要几分钟。 | 通常不到 10 秒。最多可能需要几分钟。 | 
| 缓解目标 | 可配置。可以使用范围缩小语句和一个或多个聚合键，例如 IP 地址、HTTP 方法和查询字符串，对请求进行分组。 | IP 地址和客户端会话  | 
| 触发缓解所需的流量级别 | 中：在指定时间窗口内可以低至 10 个请求  | 低 – 旨在检测客户端模式，例如慢速抓取器  | 
| 可自定义的阈值 | 是  | 否  | 
| 默认缓解操作 | 控制台默认值为 Block。API 中没有默认设置；该设置是必需的。您可以将其设置为除 Allow 之外的任何规则操作。 | 规则组规则操作设置为 Challenge（不使用令牌）和 CAPTCHA（来自单个客户端会话的大流量）。您可以将其中任一规则设置为任何有效的规则操作。 | 
| 抵御高度分布式攻击的弹性 | 中：最多有 10000 个 IP 地址，可单独进行 IP 地址限制 | 中 – IP 地址和令牌之间的总数限制为 50,000  | 
| [AWS WAF 定价](https://aws.amazon.com/waf/pricing/) | 包含在的标准费用中 AWS WAF。 | 包含在机器人控制功能智能威胁缓解的目标级别费用中。 | 
| 有关更多信息 | [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md) | [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md) | 

# 中智能缓解威胁的最佳实践 AWS WAF
<a name="waf-managed-protections-best-practices"></a>

请遵循本节中的最佳实践，以最有效、最具成本效益的方式实施智能威胁缓解功能。
+ **实施 JavaScript 和移动应用程序集成 SDKs** — 实施应用程序集成，以尽可能有效的方式启用全套 ACFP、ATP 或 Bot Control 功能。托管规则组使用提供的令牌在会话级别 SDKs 将合法的客户端流量与不需要的流量区分开来。应用程序集成可 SDKs 确保这些令牌始终可用。有关详细信息，请参阅：
  + [使用 SDKs 与 ACFP 的应用程序集成](waf-acfp-with-tokens.md)
  + [使用 SDKs 与 ATP 的应用程序集成](waf-atp-with-tokens.md)
  + [使用应用程序 SDKs 与 Bot Control 集成](waf-bot-with-tokens.md)

  使用集成在您的客户端中实现挑战，并自定义向最终用户展示验证码谜题的方式。 JavaScript有关更多信息，请参阅 [中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。

  如果您使用 JavaScript API 自定义验证码谜题，并且在保护包（Web ACL）中的任何位置使用CAPTCHA规则操作，请按照客户端中处理 AWS WAF 验证码响应的指南进行操作，网址为。[处理来自的验证码响应 AWS WAF](waf-js-captcha-api-conditional.md)本指南适用于使用该 CAPTCHA 操作的任何规则，包括 ACFP 托管规则组中的规则和机器人控制功能托管规则组的目标保护级别。
+ **限制您发送到 ACFP、ATP 和 Bot Control 规则组的请求** — 使用智能威胁缓解 AWS 托管规则组会产生额外费用。ACFP 规则组检查向您指定的账户注册和创建端点发出的请求。ATP 规则组检查发往您指定的登录端点的请求。机器人控制功能规则组会在保护包（web ACL）评估中检查到达它的每个请求。

  请考虑以下方法来减少对这些规则组的使用：
  + 使用托管规则组语句中的范围缩小语句将请求排除在检查范围之外。您可以用任何可嵌套的语句来做到这一点。有关信息，请参阅[在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。
  + 通过在规则组之前添加规则，将请求排除在检查范围之外。对于不能在范围缩小语句中使用的规则以及更复杂的情况（例如标签后进行标签匹配），您可能需要添加在规则组之前运行的规则。有关更多信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md) 和 [在中使用规则语句 AWS WAF](waf-rule-statements.md)。
  + 按照成本较低的规则运行规则组。如果您有其他标准 AWS WAF 规则出于任何原因阻止请求，请在这些付费规则组之前运行它们。有关规则和规则管理的更多信息，请参阅 [在中使用规则语句 AWS WAF](waf-rule-statements.md)。
  + 如果您使用多个智能威胁缓解托管规则组，请按以下顺序运行这些规则组以降低成本：机器人控制功能、ATP、ACFP。

  有关详细定价信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。
+ **不要限制发送到 Anti-DDo S 规则组的请求 — 当您将**该规则组配置为监控所有未明确允许通过的 Web 流量时，该规则组的运行效果最佳。将该规则组放置在您的 web ACL 中，使其仅在使用 Allow 规则操作的规则之后及所有其他规则之前进行评估。
+ **要进行分布式拒绝服务 (DDoS) 防护，请使用 Anti-DDo S 或 Shield Advanced 自动应用层 DDo S 缓**解 — 其他智能威胁缓解规则组不提供 DDo S 保护。ACFP 可防止有人尝试在您的应用程序的注册页面上创建欺诈账户。ATP 可防止有人企图盗用您的登录页面。机器人控制功能侧重于使用令牌强制执行类似人类的访问模式，并对客户端会话进行动态速率限制。

  Anti-DDo S 允许您监视和控制 DDo S 攻击，从而实现快速响应和缓解威胁。具有自动应用层 DDo S 缓解功能的 Shield Advanced 通过代表您创建、评估和部署自定义 AWS WAF 缓解措施，自动响应检测到的 DDo S 攻击。

  有关 Shield Advanced 的更多信息，请参阅 [AWS Shield Advanced 概览](ddos-advanced-summary.md) 和 [使用和保护应用层（第 7 层） AWS Shield Advanced AWS WAF](ddos-app-layer-protections.md)。

  有关分布式拒绝服务 (DDoS) 防护的更多信息，请参阅[反 DDo S 规则组](aws-managed-rule-groups-anti-ddos.md)和[分布式拒绝服务防护 DDo](waf-anti-ddos.md)。
+  **在正常网络流量期间启用 Anti-DDo S 规则组和 Bot Control 规则组的目标保护级别** — 这些规则类别需要时间来建立正常流量的基准。

   **在正常 web 流量期间启用机器人控制功能规则组的目标保护级别**：某些目标保护级别的规则需要一段时间来建立正常流量模式的基准，然后才能识别和响应不规则或恶意的流量模式。例如，`TGT_ML_*` 规则最长需要 24 小时才能预热。

  当您没有遇到攻击时，可以添加这些保护，让他们有时间确定基准，然后再期望他们做出适当的反应。如果您在攻击期间添加这些规则，则需要在计数模式下启用 Anti-DDo S 规则组。攻击消退后，由于攻击流量会增加偏差，因此建立基准的时间通常是正常所需时间的两倍到三倍。有关规则及其所需的任何预热时间的更多信息，请参阅 [规则列表](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-rules)。
+ **要进行分布式拒绝服务 (DDoS) 防护，请使用 Shield Advanced 自动应用层 DDo S 缓**解 — 智能威胁缓解规则组不提供 DDo S 保护。ACFP 可防止有人尝试在您的应用程序的注册页面上创建欺诈账户。ATP 可防止有人企图盗用您的登录页面。机器人控制功能侧重于使用令牌强制执行类似人类的访问模式，并对客户端会话进行动态速率限制。

  当你在启用自动应用层 DDo S 缓解的情况下使用 Shield Advanced 时，Shield Advanced 会通过代表你创建、评估和部署自定义 AWS WAF 缓解措施来自动响应检测到的 DDo S 攻击。有关 Shield Advanced 的更多信息，请参阅 [AWS Shield Advanced 概览](ddos-advanced-summary.md) 和 [使用和保护应用层（第 7 层） AWS Shield Advanced AWS WAF](ddos-app-layer-protections.md)。
+ 在为 **Anti-DDo S 规则组建立基准时使用生产流量负载** — 通常的做法是使用人工测试流量来测试其他规则组。但是，在测试和建立 Anti-DDo S 规则组的基准时，我们建议您使用反映生产环境负载的流量。在生产环境中启用规则组后，使用典型流量建立 Anti-DDo S 基准是确保您的资源得到保护的最佳方法。
+ **调整和配置令牌处理**：调整保护包（web ACL）的令牌处理以获得最佳用户体验。
  + 要降低运营成本并改善最终用户的体验，请将令牌管理免疫时间调整为安全要求允许的最长时间。这样可以最大限度地减少使用验证码拼图和静默质询。有关信息，请参阅[将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。
  + 要在受保护的应用程序之间启用令牌共享，请为您的保护包（web ACL）配置令牌域列表。有关信息，请参阅[在中指定令牌域和域名列表 AWS WAF](waf-tokens-domains.md)。
+ **拒绝具有任意主机规格的请求**：将您的受保护资源配置为要求 web 请求中的 `Host` 标头与目标资源匹配。您可以接受一个值或一组特定的值，例如 `myExampleHost.com` 和 `www.myExampleHost.com`，但不接受主机的任意值。
+ **对于作为 CloudFront 分配来源的应用程序负载均衡器，请配置 CloudFront 并 AWS WAF 进行适当的令牌处理** — 如果您将保护包 (Web ACL) 关联到应用程序负载均衡器，并将应用程序负载均衡器部署为 CloudFront 分配的来源，请参阅[作为来源的应用程序负载均衡器的必需配置 CloudFront](waf-tokens-with-alb-and-cf.md)。
+ **部署前进行测试和调整**：在对保护包（web ACL）进行任何更改之前，请按照本指南中的测试和调整程序进行操作，以确保获得预期的行为。这对于这些付费功能特别重要。有关一般指导，请参阅 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。有关付费托管规则组的特定信息，请参阅 [测试和部署 ACFP](waf-acfp-deploying.md)、[测试和部署 ATP](waf-atp-deploying.md) 和 [测试和部署 AWS WAF 机器人控制](waf-bot-control-deploying.md)。

# 代币在 AWS WAF 智能威胁缓解中的使用
<a name="waf-tokens"></a>

本节解释了 AWS WAF 代币的作用。

AWS WAF 代币是 AWS WAF 智能威胁缓解提供的增强保护不可或缺的一部分。令牌（有时也称为指纹）是有关单个客户端会话的信息的集合，客户端会话存储并随其发送的每个 Web 请求一起提供。 AWS WAF 使用令牌识别恶意客户端会话并将其与合法会话区分开来，即使两者都来自单个 IP 地址。使用令牌给合法用户带来的成本可以忽略不计，但对于僵尸网络来说，大规模使用令牌的成本却很高。

AWS WAF 使用令牌来支持其浏览器和最终用户质询功能，该功能由应用程序集成 SDKs 和规则操作Challenge提供CAPTCHA。此外，令牌还支持 AWS WAF 机器人控制和账户盗用防护托管规则组的功能。

AWS WAF 为成功应对无声挑战和验证码难题的客户创建、更新和加密令牌。当拥有令牌的客户端发送 Web 请求时，它会包含加密的令牌，并 AWS WAF 解密令牌并验证其内容。

**Topics**
+ [如何 AWS WAF 使用代币](waf-tokens-usage.md)
+ [AWS WAF 代币特征](waf-tokens-details.md)
+ [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)
+ [在中指定令牌域和域名列表 AWS WAF](waf-tokens-domains.md)
+ [中的代币标签类型 AWS WAF](waf-tokens-labeling.md)
+ [阻止没有有效 AWS WAF 令牌的请求](waf-tokens-block-missing-tokens.md)
+ [作为来源的应用程序负载均衡器的必需配置 CloudFront](waf-tokens-with-alb-and-cf.md)

# 如何 AWS WAF 使用代币
<a name="waf-tokens-usage"></a>

本节介绍如何 AWS WAF 使用令牌。

AWS WAF 使用令牌来记录和验证以下类型的客户端会话验证：
+ **验证码** – 验证码拼图有助于区分机器人和人类用户。验证码只能通过 CAPTCHA 规则操作运行。成功完成拼图后，验证码脚本会更新令牌的验证码时间戳。有关更多信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。
+ **质询** – 质询以静默方式运行，以帮助区分常规客户端会话和机器人会话，并提高机器人的操作成本。挑战成功完成后，挑战脚本会根据需要自动从中 AWS WAF 获取新代币，然后更新代币的挑战时间戳。

  AWS WAF 在以下情况下运行挑战：
  + **应用程序集成 SDKs**-应用程序集成在您的客户端应用程序会话中 SDKs 运行，有助于确保只有在客户端成功响应挑战后才允许尝试登录。有关更多信息，请参阅 [中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。
  + **Challenge 规则操作** – 更多信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。
  + **CAPTCHA** – 当验证码插页式广告运行时，如果客户端还没有令牌，则脚本会自动先运行质询，以验证客户端会话并初始化令牌。

智能威胁 AWS 托管规则组中的许多规则都需要令牌。这些规则使用标记来区分会话级别的客户端、确定浏览器特征以及了解应用网页上的人机交互程度。这些规则组调用 AWS WAF 令牌管理，令牌管理应用令牌标签，然后规则组会检查这些标签。
+ AWS WAF F@@ **raud Control 账户创建防作弊 (ACFP)** — ACFP 规则要求使用有效令牌进行网络请求。有关规则的更多信息，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。
+ **AWS WAF Fraud Control 账户接管预防 (ATP)** — 防止大量和长期客户会话的 ATP 规则要求网络请求必须具有有效令牌和未过期的质询时间戳。有关更多信息，请参阅 [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。
+ **AWS WAF Bot Control** — 此规则组中的目标规则限制了客户端在没有有效令牌的情况下可以发送的 Web 请求的数量，它们使用令牌会话跟踪进行会话级别的监控和管理。根据需要，这些规则应用 Challenge 和 CAPTCHA 规则操作来强制执行令牌获取和有效的客户行为。有关更多信息，请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

# AWS WAF 代币特征
<a name="waf-tokens-details"></a>

每个令牌都具有以下特性：
+ 令牌存储在名为 `aws-waf-token` 的 Cookie 中。
+ 令牌已加密。
+ 该令牌使用包含以下信息的粘性粒度标识符对客户端会话进行指纹识别：
  + 客户端最近一次成功响应静默质询的时间戳。
  + 最终用户最近一次成功响应验证码的时间戳。仅当您在保护中使用验证码时，才会出现这种情况。
  + 有关客户端和客户端行为的其他信息，可帮助将合法客户端与不想要的流量区分开来。这些信息包括可用于检测自动活动的各种客户端标识符和客户端信号。收集的信息不是唯一的，无法映射到个体上。
    + 所有令牌都包含来自客户端浏览器查询的数据，例如自动化和浏览器设置不一致的迹象。此信息由Challenge操作运行的脚本和客户端应用程序检索 SDKs。脚本会主动询问浏览器并将结果放入令牌中。
    + 此外，在实施客户端应用程序集成软件开发工具包时，令牌包括被动收集的有关最终用户与应用程序页面交互的信息。交互包括鼠标移动、按键以及与页面上存在的任何 HTML 表单的交互。这些信息有助于 AWS WAF 检测客户端中的人机交互程度，以质询看似不是人类的用户。有关客户端集成的更多信息，请参阅 [中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。

出于安全考虑， AWS 未提供对 AWS WAF 令牌内容的完整描述或有关令牌加密过程的详细信息。

# 将时间戳到期时间和令牌免疫时间设置为 AWS WAF
<a name="waf-tokens-immunity-times"></a>

本节介绍了质询和验证码时间戳是如何过期的。

AWS WAF 使用质询和 CAPTCHA 免疫时间来控制向单个客户会话提出质询或 CAPTCHA 的频率。在最终用户成功响应验证码后，验证码免疫时间决定了最终用户在多长时间内不再受其他验证码的影响。同样，质询免疫时间决定了客户端会话在成功响应质询后多长时间内不再受到质询。

** AWS WAF 代币免疫时间是如何运作的**

AWS WAF 通过更新令牌内的相应时间戳来记录对质询或 CAPTCHA 的成功响应。当 AWS WAF 检查代币是否存在挑战或验证码时，它会从当前时间中减去时间戳。如果结果大于配置的免疫时间，则时间戳过期。

** AWS WAF 代币免疫时间的可配置方面**

您可以在保护包（web ACL）以及任何使用 CAPTCHA 或 Challenge 规则操作的规则中配置质询和验证码免疫时间。
+ 这两项免疫时间的默认保护包（web ACL）设置均为 300 秒。
+ 您可以为任何使用 CAPTCHA 或 Challenge 操作的规则指定免疫时间。如果您未为规则指定免疫时间，则规则将从保护包（web ACL）继承设置。
+ 对于规则组中使用 CAPTCHA 或 Challenge 操作的规则，如果您没有为该规则指定免疫时间，则该规则将继承您使用该规则组的每个保护包（web ACL）的设置。
+ 应用程序集成 SDKs 使用保护包 (Web ACL) 的挑战免疫时间。
+ 质询免疫时间的最小值为 300 秒。验证码免疫时间的最小值为 60 秒。两项免疫时间的最大值均为 25.92 万秒，即三天。

您可以使用保护包（web ACL）和规则级别免疫时间设置，以调整 CAPTCHA 操作 Challenge 或 SDK 质询管理行为。例如，您可以配置规则，控制对免疫时间较低的高度敏感数据的访问，然后在保护包 (Web ACL) 中为其他规则设置更高的免疫时间，并继承其他规则。 SDKs 

特别是对于验证码来说，解答拼图问题会降低客户的网站体验，因此调整验证码免疫时间可以帮助您减轻对客户体验的影响，同时仍能提供您想要的保护。

有关调整免疫时间以使用 Challenge 和 CAPTCHA 规则操作的更多信息，请参阅 [使用 CAPTCHA 和Challenge 操作的最佳实践](waf-captcha-and-challenge-best-practices.md)。

# 在哪里设置代 AWS WAF 币免疫时间
<a name="waf-tokens-immunity-times-setting"></a>

您可以在保护包（web ACL）以及使用 Challenge 和 CAPTCHA 规则操作的规则中设置免疫时间。

有关管理保护包（web ACL）及其规则的一般信息，请参阅 [在中查看 Web 流量指标 AWS WAF](web-acl-working-with.md)。

**在何处设置保护包（web ACL）的免疫时间**
+ **控制台**：编辑保护包（web ACL）时，在**规则**选项卡中，编辑和更改**保护包（web ACL）验证码配置**和**保护包（web ACL）质询配置**窗格中的设置。在控制台中，只有在创建保护包（web ACL）之后，才能配置保护包（web ACL）验证码和质询免疫时间。
+ **在控制台之外**：保护包（web ACL）数据类型具有验证码和质询配置参数，您可以配置这些参数并将其提供给保护包（web ACL）上的创建和更新操作。

**在何处设置规则的免疫时间**
+ **控制台**：当您创建或编辑规则并指定 CAPTCHA 或 Challenge 操作时，可以修改该规则的免疫时间设置。
+ **在控制台之外**：规则数据类型具有验证码和质询配置参数，您可以在定义规则时对其进行配置。

# 在中指定令牌域和域名列表 AWS WAF
<a name="waf-tokens-domains"></a>

本节介绍如何配置在令牌中 AWS WAF 使用的域以及它在令牌中接受的域。

在为客户端 AWS WAF 创建令牌时，它会使用令牌域对其进行配置。在 AWS WAF 检查 web 请求中的令牌时，如果该令牌的域与任何被认为对保护包（web ACL）有效的域都不匹配，则会将该令牌视为无效因而拒绝。

默认情况下， AWS WAF 仅接受其域设置与保护包（Web ACL）关联的资源的主机域完全匹配的令牌。这是 web 请求中 `Host` 标头的值。在浏览器中，您可以在 JavaScript `window.location.hostname`属性中找到该域名，也可以在用户在地址栏中看到的地址中找到该域名。

您还可以在保护包（web ACL）配置中指定可接受的令牌域，如下一节所述。在这种情况下， AWS WAF 接受与主机标头的精确匹配项和与令牌域列表中的域名匹配。

您可以指定令牌域， AWS WAF 以便在设置域名和评估保护包 (Web ACL) 中的令牌时使用。您指定的域名不能是公共后缀，例如 `gov.au`。对于您无法使用的域名，请参阅[公共后缀列表](https://publicsuffix.org/list/)下的列表 [https://publicsuffix.org/list/public_suffix_list.dat](https://publicsuffix.org/list/public_suffix_list.dat)。

## AWS WAF 保护包 (Web ACL) 令牌域列表配置
<a name="waf-tokens-domain-lists"></a>

您可以将保护包 (Web ACL) 配置为在多个受保护资源之间共享令牌，方法是提供包含您 AWS WAF 要接受的其他域的令牌域列表。使用令牌域列表时， AWS WAF 仍然接受资源的主机域。此外，它接受令牌域列表中的所有域，包括其前缀子域。

例如，令牌域列表 `example.com` 中的域名规范与 `example.com`（来自 `http://example.com/`）、`api.example.com`（来自 `http://api.example.com/`）和 `www.example.com`（来自 `http://www.example.com/`）匹配。它与 `example.api.com`（来自 `http://example.api.com/`）或 `apiexample.com`（来自 `http://apiexample.com/`）不匹配。

创建或编辑令牌域列表时，可以在保护包（web ACL）中对其进行配置。有关管理保护包（web ACL）的一般信息，请参阅 [在中查看 Web 流量指标 AWS WAF](web-acl-working-with.md)。

## AWS WAF 令牌域设置
<a name="waf-tokens-domain-in-token"></a>

AWS WAF 应质询脚本的请求创建令牌，这些脚本由应用程序集成 SDKs 和Challenge和CAPTCHA规则操作运行。

在令牌中 AWS WAF 设置的域名由请求令牌的质询脚本的类型以及您提供的任何其他令牌域配置决定。 AWS WAF 将令牌中的域设置为它可以在配置中找到的最短、最通用的设置。
+ **JavaScript SDK** — 您可以使用令牌域规范配置 JavaScript SDK，该规范可以包含一个或多个域。根据受保护的主机域和保护包 (Web ACL) 的令牌域列表，您配置的域必须是可以接受的域。 AWS WAF 

  当向客户端 AWS WAF 发出令牌时，它会将令牌域设置为与主机域匹配的令牌域，并且是主机域和您配置列表中的域中最短的令牌域。例如，如果主机域是，`api.example.com`而令牌域列表有`example.com`，则`example.com`在令牌中 AWS WAF 使用，因为它与主机域匹配并且更短。如果您未在 JavaScript API 配置中提供令牌域列表，请 AWS WAF 将该域设置为受保护资源的主机域。

  有关更多信息，请参阅 [提供用于令牌的域名](waf-js-challenge-api-set-token-domain.md)。
+ **移动软件开发工具包** – 在应用程序代码中，必须使用令牌域属性配置移动软件开发工具包。根据受保护的主机域和保护包（web ACL）的令牌域列表，此属性必须是 AWS WAF 可接受的域。

  当为客户端 AWS WAF 发放令牌时，它会使用此属性作为令牌域。 AWS WAF 在为移动 SDK 客户端发放的令牌中不使用主机域。

  有关更多信息，请参阅 [AWS WAF 移动 SDK 规范](waf-mobile-sdk-specification.md) 的 `WAFConfiguration` `domainName` 设置。
+ Challengeacti@@ **on** — 如果您在保护包 (Web ACL) 中指定令牌域列表，则将令牌域 AWS WAF 设置为与主机域匹配且最短的令牌域，即主机域和列表中的域中最短的令牌域。例如，如果主机域是，`api.example.com`而令牌域列表有`example.com`，则`example.com`在令牌中 AWS WAF 使用，因为它与主机域匹配并且更短。如果您未在保护包（Web ACL）中提供令牌域列表，请 AWS WAF 将该域设置为受保护资源的主机域。

# 中的代币标签类型 AWS WAF
<a name="waf-tokens-labeling"></a>

本节介绍令 AWS WAF 牌管理向 Web 请求添加的标签。有关标签的一般信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

当您使用任何 AWS WAF 机器人或欺诈控制托管规则组时，规则组使用 AWS WAF 令牌管理来检查 Web 请求令牌并对请求应用令牌标签。有关托管规则组的信息，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)、[AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md) 和 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

**注意**  
AWS WAF 仅当您使用这些智能威胁缓解托管规则组之一时，才会应用令牌标签。

令牌管理可以将以下标签添加到 web 请求中。

**客户端会话标签**  
该标签`awswaf:managed:token:id:identifier`包含一个唯一标识符， AWS WAF 令牌管理使用该标识符来标识客户端会话。如果客户端获取了新令牌，例如在丢弃其正在使用的令牌之后，标识符可能会更改。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**浏览器指纹标签**  
该标签`awswaf:managed:token:fingerprint:fingerprint-identifier`包含一个强大的浏览器指纹标识符， AWS WAF 令牌管理根据各种客户端浏览器信号计算该标识符。多次尝试获取令牌时，此标识符保持不变。指纹标识符并非仅属于单个客户端。

**注意**  
AWS WAF 不报告该标签的 Amazon CloudWatch 指标。

**令牌状态标签：标签命名空间前缀**  
令牌状态标签报告令牌的状态、质询以及其中包含的 CAPTCHA 信息。

每个令牌状态标签都以下列命名空间前缀之一开头：
+ `awswaf:managed:token:`：用于报告令牌的一般状态以及令牌的质询信息的状态。
+ `awswaf:managed:captcha:`：用于报告令牌的 CAPTCHA 信息的状态。

**令牌状态标签：标签名称**  
在前缀之后，标签的其余部分提供详细的令牌状态信息：
+ `accepted`：请求令牌存在且包含以下内容：
  + 有效的质询或 CAPTCHA 解决方案。
  + 未过期的质询或 CAPTCHA 时间戳。
  + 对保护包（web ACL）有效的域规范。

  示例：标签 `awswaf:managed:token:accepted` 表明 web 请求的令牌具有有效的质询解决方案、未过期的质询时间戳以及有效的域。
+ `rejected`：请求令牌存在但不符合接受标准。

  除了被拒绝的标签外，令牌管理还添加了一个自定义标签命名空间和名称来指示原因。
  + `rejected:not_solved`：令牌缺少质询或 CAPTCHA 解决方案。
  + `rejected:expired`：根据保护包（web ACL）配置的令牌免疫时间，令牌的质询或 CAPTCHA 时间戳已过期。
  + `rejected:domain_mismatch`：令牌的域与保护包（web ACL）的令牌域配置不匹配。
  + `rejected:invalid`— AWS WAF 无法读取指示的标记。

  示例：标签 `awswaf:managed:captcha:rejected` 和 `awswaf:managed:captcha:rejected:expired` 共同表示请求未提供有效的 CAPTCHA 解决方案，因为令牌中的 CAPTCHA 时间戳已超过保护包（web ACL）中配置的 CAPTCHA 令牌免疫时间。
+ `absent`：请求没有令牌，或者令牌管理器无法读取它。

  示例：标签 `awswaf:managed:captcha:absent` 表示请求没有令牌。

# 阻止没有有效 AWS WAF 令牌的请求
<a name="waf-tokens-block-missing-tokens"></a>

本节介绍如何阻止在使用 AWS WAF 移动 SDK 时缺少令牌的登录请求。

当您使用智能威胁 AWS 托管规则组`AWSManagedRulesACFPRuleSet``AWSManagedRulesATPRuleSet``AWSManagedRulesBotControlRuleSet`、和时，规则组会调用 AWS WAF 令牌管理来评估 Web 请求令牌的状态并相应地标记请求。

**注意**  
令牌标签仅适用于您使用其中一个托管规则组评估的 web 请求。

有关令牌管理应用的标签的信息，请参阅前面的部分 [中的代币标签类型 AWS WAF](waf-tokens-labeling.md)。

然后，智能威胁缓解托管规则组按如下方式处理令牌要求：
+ 该 `AWSManagedRulesACFPRuleSet` `AllRequests` 规则配置为对所有请求运行 Challenge 操作，从而有效地阻止任何没有 `accepted` 令牌标签的请求。
+ `AWSManagedRulesATPRuleSet` 会阻止带有 `rejected` 令牌标签的请求，但不会阻止带有 `absent` 令牌标签的请求。
+ 在客户端发送五个没有 `accepted` 令牌标签的请求后，`AWSManagedRulesBotControlRuleSet` 目标保护级别会向他们提出质询。它不会阻止没有有效令牌的单个请求。规则组的通用保护级别不管理令牌要求。

有关智能威胁规则组的其他详细信息，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)、[AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md) 和 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

**使用机器人控制功能或 ATP 托管规则组时阻止缺少令牌的请求**  
使用机器人控制功能和 ATP 规则组时，没有有效令牌的请求可以退出规则组评估并继续由保护包（web ACL）进行评估。

要阻止所有缺少令牌或令牌被拒绝的请求，请添加一条规则，使其在托管规则组之后立即运行，以捕获并阻止该规则组未处理的请求。

以下是使用 ATP 托管规则组的保护包（web ACL）的 JSON 列表示例。保护包（web ACL）添加了一条规则，用于捕获 `awswaf:managed:token:absent` 标签并对其进行处理。该规则将其评估范围缩小到发送到登录端点的 web 请求，以匹配 ATP 规则组的范围。添加的规则以粗体列出。

```
{
  "Name": "exampleWebACL",
  "Id": "55555555-6666-7777-8888-999999999999",
  "ARN": "arn:aws:wafv2:us-east-1:111111111111:regional/webacl/exampleWebACL/55555555-4444-3333-2222-111111111111",
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "",
  "Rules": [
    {
      "Name": "AWS-AWSManagedRulesATPRuleSet",
      "Priority": 1,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesATPRuleSet",
          "ManagedRuleGroupConfigs": [
            {
              "AWSManagedRulesATPRuleSet": {
                "LoginPath": "/web/login",
                "RequestInspection": {
                  "PayloadType": "JSON",
                  "UsernameField": {
                    "Identifier": "/form/username"
                  },
                  "PasswordField": {
                    "Identifier": "/form/password"
                  }
                },
                "ResponseInspection": {
                  "StatusCode": {
                    "SuccessCodes": [
                      200
                    ],
                    "FailureCodes": [
                      401,
                      403,
                      500
                    ]
                  }
                }
              }  
            }
          ]
        }
      },
      "OverrideAction": {
        "None": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSManagedRulesATPRuleSet"
      }
    },
    {
      "Name": "RequireTokenForLogins",
      "Priority": 2,
      "Statement": {
        "AndStatement": {
          "Statements": [
            {
              "Statement": {
                "LabelMatchStatement": {
                  "Scope": "LABEL",
                  "Key": "awswaf:managed:token:absent"
                }
              }
            },
            {
              "ByteMatchStatement": {
                "SearchString": "/web/login",
                "FieldToMatch": {
                  "UriPath": {}
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                 }
                ],
                "PositionalConstraint": "STARTS_WITH"
              }
            },
            {
              "ByteMatchStatement": {
                "SearchString": "POST",
                "FieldToMatch": {
                  "Method": {}
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ],
                "PositionalConstraint": "EXACTLY"
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "RequireTokenForLogins"
      } 
    }
  ],
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "exampleWebACL"
  },
  "Capacity": 51,
  "ManagedByFirewallManager": false,
  "RetrofittedByFirewallManager": false,
  "LabelNamespace": "awswaf:111111111111:webacl:exampleWebACL:"
}
```

# 作为来源的应用程序负载均衡器的必需配置 CloudFront
<a name="waf-tokens-with-alb-and-cf"></a>

如果您将保护包 (Web ACL) 关联到应用程序负载均衡器，并将应用程序负载均衡器部署为 CloudFront 分配的来源，请阅读本节。

使用此架构，您需要提供以下额外配置才能正确处理令牌信息。
+ 配置为将 `aws-waf-token` Cookie 转发 CloudFront 到 Application Load Balancer。默认情况下， CloudFront 会先从网络请求中删除 Cookie，然后再将其转发到源。要在网络请求中保留令牌 cookie，请将 CloudFront 缓存行为配置为仅包含令牌 cookie 或所有 Cookie。有关如何执行此操作的信息，请参阅《*亚马逊 CloudFront开发者指南》*中的[基于 Cookie 缓存内容](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Cookies.html)。
+ 进行配置， AWS WAF 使其将 CloudFront分配的域识别为有效的令牌域。默认情况下， CloudFront 将`Host`标头设置为 Application Load Balan AWS WAF cer 来源，并将其用作受保护资源的域。但是，客户端浏览器将 CloudFront分配视为主机域，而为客户端生成的令牌使用该 CloudFront 域作为令牌域。如果不进行任何其他配置，当根据令牌域 AWS WAF 检查受保护的资源域时，它将出现不匹配的情况。要修复此问题，请将 CloudFront 分发域名添加到保护包 (Web ACL) 配置中的令牌域列表中。有关如何执行此操作的信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。

# AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)
<a name="waf-acfp"></a>

本节说明了 AWS WAF 欺诈控制账户创建欺诈预防 (ACFP) 的作用。

账户创建欺诈是一种在线非法活动，攻击者试图创建一个或多个虚假账户。攻击者使用虚假账户进行欺诈活动，例如滥用促销和注册奖金、冒充他人以及网络攻击（例如网络钓鱼）。虚假账户的存在会损害您在客户中的声誉并面临财务欺诈，从而对您的业务产生负面影响。

您可以通过实施 ACFP 功能来监控和控制账户创建欺诈企图。 AWS WAF 在 “ AWS 托管规则” 规则组中提供此功能`AWSManagedRulesACFPRuleSet`以及配套的应用程序集成 SDKs。

ACFP 托管规则组标记并管理可能属于恶意账户创建尝试一部分的请求。规则组通过检查客户端发送到账户登录端点的账户创建尝试来实现此目的。

ACFP 通过监控账户注册请求中是否存在异常活动以及自动阻止可疑请求来保护您的账户注册页面。规则组使用请求标识符、行为分析和机器学习来检测欺诈性请求。
+ **请求检查** – ACFP 可让您查看和控制异常账户创建尝试和使用被盗凭证的尝试，以防止创建欺诈账户。ACFP 根据被盗凭证数据库检查电子邮件和密码组合，当在暗网上发现新的泄露凭证时，会定期更新。ACFP 评估电子邮件地址中使用的域名，并监控电话号码和地址字段的使用情况，以验证条目并检测欺诈行为。ACFP 按 IP 地址和客户端会话汇总数据，以检测和阻止发送过多可疑请求的客户端。
+ **响应检查** — 对于 CloudFront 分配，除了检查传入的账户创建请求外，ACFP 规则组还会检查您的应用程序对账户创建尝试的响应，以跟踪成功率和失败率。利用这些信息，ACFP 可以暂时阻止尝试失败次数过多的客户端会话或 IP 地址。 AWS WAF 异步执行响应检查，因此这不会增加 Web 流量的延迟。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**注意**  
ACFP 功能不适用于 Amazon Cognito 用户群体。

**Topics**
+ [AWS WAF ACFP 组件](waf-acfp-components.md)
+ [使用 SDKs 与 ACFP 的应用程序集成](waf-acfp-with-tokens.md)
+ [将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)
+ [测试和部署 ACFP](waf-acfp-deploying.md)
+ [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 示例](waf-acfp-control-examples.md)

# AWS WAF ACFP 组件
<a name="waf-acfp-components"></a>

F AWS WAF raud Control 账户创建防作弊 (ACFP) 的主要组成部分如下：
+ **`AWSManagedRulesACFPRuleSet`**— 此 AWS 托管规则组中的规则可检测、标记和处理各种类型的欺诈性账户创建活动。规则组检查客户端发送到指定账户注册端点的 HTTP `GET` text/html 请求和客户端发送到指定账户注册端点的 `POST` Web 请求。对于受保护的 CloudFront 分配，规则组还会检查分配向账户创建请求发回的响应。有关此规则组的规则列表，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。您可以使用托管规则组参考语句，将此规则组包含在保护包（web ACL）中。有关使用规则组的信息，请参阅 [将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)。
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。
+ **有关应用程序的账户注册和创建页面的详细信息**：将 `AWSManagedRulesACFPRuleSet` 规则组添加到保护包（web ACL）时，您必须提供有关账户注册和创建页面的信息。这允许规则组缩小其检查的请求范围，并正确验证账户创建 web 请求。注册页面必须接受`GET` text/html 申请。账户创建路径必须接受 `POST` 请求。ACFP 规则组使用电子邮件格式的用户名。有关更多信息，请参阅 [将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)。
+ **对于受保护的 CloudFront 分配，有关您的应用程序如何响应账户创建尝试**的详细信息 — 您可以提供有关您的应用程序对账户创建尝试的响应的详细信息，ACFP 规则组会跟踪和管理来自单个 IP 地址或单个客户端会话的批量账户创建尝试。有关配置此选项的信息，请参阅 [将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)。
+ **JavaScript 和移动应用程序集成 SDKs** — 在您的 ACFP 实施中实施 AWS WAF JavaScript 和移动 SDKs ，以启用规则组提供的全套功能。许多 ACFP 规则使用提供的信息进行会话级别的客户端验证和行为聚合，这些 SDKs 信息是将合法的客户端流量与机器人流量区分开来所必需的。有关更多信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。

您可以将 ACFP 实施与以下实施相结合，以帮助您监控、调整和自定义保护。
+ **日志和指标** — 通过配置和启用日志、Amazon Security Lake 数据收集以及保护包（Web ACL）的亚马逊 CloudWatch 指标，您可以监控您的流量，并了解 ACFP 托管规则组对流量的影响。`AWSManagedRulesACFPRuleSet` 为您的 web 请求添加的标签包含在此数据中。有关这些选项的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)、[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md) 和[什么是 Amazon Security Lake](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html)。

  根据您的需求和看到的流量，您可能需要自定义您的 `AWSManagedRulesACFPRuleSet` 实施。例如，您可能想将某些流量排除在ACFP评估之外，或者您可能想使用范围缩小声明或标签匹配规则等 AWS WAF 功能，更改其处理其识别的某些帐户创建欺诈企图的方式。
+ **标签和标签匹配规则**：对于 `AWSManagedRulesACFPRuleSet` 中的任何规则，您可以将阻止行为切换为计数，然后与规则添加的标签进行匹配。使用此方法自定义如何处理由 ACFP 托管规则组标识的 web 请求。有关标记和使用标签匹配语句的更多信息，请参见 [标签匹配规则语句](waf-rule-statement-type-label-match.md) 和 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。
+ **自定义请求和响应**：您可以在允许的请求中添加自定义标头，也可以为被阻止的请求发送自定义响应。为此，您需要将匹配的标签与 AWS WAF 自定义请求和响应功能配对。有关请求和响应格式的更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

# 使用 SDKs 与 ACFP 的应用程序集成
<a name="waf-acfp-with-tokens"></a>

我们强烈建议实施应用程序集成 SDKs，以便最有效地使用 ACFP 规则组。
+ **完整的规则组功能** – ACFP 规则 `SignalClientHumanInteractivityAbsentLow` 仅适用于由应用程序集成填充的令牌。该规则检测并管理与应用程序页面的异常人机交互。应用程序集成 SDKs 可以通过鼠标移动、按键和其他测量来检测正常的人类交互性。由规则操作 CAPTCHA 和 Challenge 发送但无法提供此类数据的插页式广告。
+ **减少延迟** – 规则组规则 `AllRequests` 将 Challenge 规则操作应用于任何还没有质询令牌的请求。发生这种情况时，规则组会对请求进行两次评估：一次没有令牌，另一次是在通过 Challenge 操作插页式广告获取令牌之后。仅使用 `AllRequests` 规则不会向您收取任何额外费用，但是这种方法会增加您的 Web 流量开销，并增加最终用户体验的延迟。如果您使用应用程序集成在客户端获取令牌，则在发送账户创建请求之前，ACFP 规则组会对请求进行一次评估。

有关这些功能的更多信息，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。

有关的信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。有关 AWS WAF 令牌的信息，请参阅[代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。有关规则操作的信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。

# 将 ACFP 托管规则组添加到您的 web ACL
<a name="waf-acfp-rg-using"></a>

本节介绍了如何添加和配置 `AWSManagedRulesACFPRuleSet` 规则组。

要将 ACFP 托管规则组配置为识别 web 流量中的账户创建欺诈活动，您需要提供有关客户端如何访问您的注册页面以及如何向您的应用程序发送账户创建请求的信息。对于受保护的 Amazon CloudFront 分配，您还需要提供有关您的应用程序如何响应账户创建请求的信息。此配置是对托管规则组的常规配置的补充。

有关规则组的描述和规则列表，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。

**注意**  
ACFP 被盗凭证数据库仅包含电子邮件格式的用户名。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。有关如何将托管规则组添加到保护包（web ACL）的基本信息，请参阅 [通过控制台向保护包（web ACL）添加托管规则组](waf-using-managed-rule-group.md)。

**遵循最佳实践**  
按照 [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md) 中的最佳实践使用 ACFP 规则组。

**在保护包（web ACL）中使用 `AWSManagedRulesACFPRuleSet` 规则组**

1. 将 AWS 托管规则组`AWSManagedRulesACFPRuleSet`添加到您的保护包（Web ACL）中，并在保存之前**编辑**规则组设置。
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

1. 在**规则组配置**窗格中，提供 ACFP 规则组用于检查账户创建请求的信息。

   1. 对于 “**在路径中使用正则表达式**”，如果您 AWS WAF 想对注册和账户创建页面路径规范执行正则表达式匹配，请将其选中。

      AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

   1. 对于**注册页面路径**，请提供应用程序的注册页面端点路径。此页面必须接受 `GET` text/html 请求。规则组仅检查发往您指定的注册页面端点的 HTTP `GET` text/html 请求。
**注意**  
端点的匹配不区分大小写。正则表达式规范不得包含标志 `(?-i)`，该标志会禁用不区分大小写的匹配。字符串规范必须以正斜杠 `/` 开头。

      例如，对于 URL `https://example.com/web/registration`，您可以提供字符串路径规范 `/web/registration`。以您提供的路径开头的注册页面路径被视为匹配路径。例如，`/web/registration` 匹配注册路径 `/web/registration`、`/web/registration/`、`/web/registrationPage` 和 `/web/registration/thisPage`，但与路径 `/home/web/registration` 或 `/website/registration` 不匹配。
**注意**  
确保您的最终用户在提交账户创建请求之前加载注册页面。这有助于确保来自客户端的账户创建请求包括有效的令牌。

   1. 对于**账户创建路径**，请在您的网站上提供接受已完成的新用户详细信息的 URI。此页面必须接受 `POST` 请求。
**注意**  
端点的匹配不区分大小写。正则表达式规范不得包含标志 `(?-i)`，该标志会禁用不区分大小写的匹配。字符串规范必须以正斜杠 `/` 开头。

      例如，对于 URL `https://example.com/web/newaccount`，您可以提供字符串路径规范 `/web/newaccount`。以您提供的路径开头的账户创建路径被视为匹配路径。例如，`/web/newaccount` 匹配账户创建路径 `/web/newaccount`、`/web/newaccount/`、`/web/newaccountPage` 和 `/web/newaccount/thisPage`，但与路径 `/home/web/newaccount` 或 `/website/newaccount` 不匹配。

   1. 对于**请求检查**，请提供请求负载类型以及请求正文中提供用户名、密码和其他账户创建详细信息的字段名称，从而指定您的应用程序如何接受账户创建尝试。
**注意**  
对于主要地址和电话号码字段，请按照它们在请求负载中的显示顺序提供字段。

      字段名称的指定取决于有效载荷类型。
      + **JSON 负载类型**：使用 JSON 指针语法指定字段名称。有关 JSON 指针语法的信息，请参阅互联网工程任务组 (IETF) 文档[JavaScript对象表示法 (JSON) 指针](https://tools.ietf.org/html/rfc6901)。

        例如，对于以下 JSON 负载示例，用户名字段规范为 `/signupform/username`，主地址字段规范为 `/signupform/addrp1`、`/signupform/addrp2` 和 `/signupform/addrp3`。

        ```
        {
            "signupform": {
                "username": "THE_USERNAME",
                "password": "THE_PASSWORD",
                "addrp1": "PRIMARY_ADDRESS_LINE_1",
                "addrp2": "PRIMARY_ADDRESS_LINE_2",
                "addrp3": "PRIMARY_ADDRESS_LINE_3",
                "phonepcode": "PRIMARY_PHONE_CODE",
                "phonepnumber": "PRIMARY_PHONE_NUMBER"
            }
        }
        ```
      + **FORM\$1ENCODED 有效负载类型**：使用 HTML 表单名称。

        例如，对于用户和密码输入元素名为 `username1` 和 `password1` 的 HTML 表单，用户名字段规范为 `username1`，密码字段规范为 `password1`。

   1. 如果您要保护 Amazon CloudFront 分销，请在 “**响应检查**” 下，指定您的应用程序在响应账户创建尝试时如何指示成功或失败。
**注意**  
ACFP 响应检查仅在保护 CloudFront 发行版的保护包 (Web ACLs) 中可用。

      在账户创建响应中指定您希望 ACFP 检查的单个组件。对于 B **ody** 和 **JSON** 组件类型， AWS WAF 可以检查组件的前 65,536 字节 (64 KB)。

      如界面所示，提供组件类型的检查条件。您必须提供成功和失败条件以供在组件中进行检查。

      例如，假设您的应用程序在响应的状态码中指示账户创建尝试的状态，并使用 `200 OK` 指示成功，使用 `401 Unauthorized` 或 `403 Forbidden` 指示失败。您可以将响应检查**组件类型**设置为**状态码**，然后在**成功**文本框中输入 `200`，并在**失败**文本框的第一行输入 `401`，在第二行输入 `403`。

      ACFP 规则组仅计算符合您的成功或失败检查条件的响应。当客户在计入的响应中成功率太高时，规则组规则会对客户端采取行动，以减少批量创建账户的尝试。为了确保规则组规则的行为准确，请务必提供成功和失败的账户创建尝试的完整信息。

      要查看检查账户创建响应的规则，请在 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md) 中的规则列表中查找 `VolumetricIPSuccessfulResponse` 和 `VolumetricSessionSuccessfulResponse`。

1. 为规则组提供所需的任何其他配置。

   您可以通过在托管规则组语句中添加范围缩小语句来进一步限制规则组检查的请求范围。例如，您只能检查带有特定查询参数或 Cookie 的请求。规则组将仅检查与您的范围缩小语句中的条件相匹配且发送到您在规则组配置中指定的账户注册和账户创建路径的请求。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

1. 保存对保护包（web ACL）的更改。

在为生产流量部署 ACFP 实施之前，请在暂存或测试环境中对其进行测试和调整，直到您能够适应对流量的潜在影响。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。有关指导，请参阅以下部分。

# 测试和部署 ACFP
<a name="waf-acfp-deploying"></a>

本节提供有关为您的网站配置和测试 AWS WAF 欺诈控制账户创建防作弊 (ACFP) 实施的一般指导。您选择遵循的具体步骤将取决于您的需求、资源和收到的 web 请求。

此信息是对 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md) 中提供的有关测试和调整的一般信息的补充。

**注意**  
AWS 托管规则旨在保护您免受常见 Web 威胁的侵害。根据文档使用 AWS 托管规则组时，可以为您的应用程序增加另一层安全保护。但是， AWS 托管规则规则组并不是用来取代您的安全职责，后者由您选择的 AWS 资源决定。请参阅[分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，确保您的资源 AWS 得到适当保护。

**生产流量风险**  
在为生产流量部署 ACFP 实施之前，请在暂存或测试环境中对其进行测试和调整，直到您能够适应对流量的潜在影响。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。

AWS WAF 提供了可用于验证 ACFP 配置的测试凭证。在以下步骤中，您将配置测试保护包（web ACL）以使用 ACFP 托管规则组，配置规则以捕获规则组添加的标签，然后使用这些测试凭证尝试创建账户。您可以通过查看账户创建尝试的亚马逊 CloudWatch 指标，验证您的保护包（Web ACL）是否正确管理了该尝试。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。

**配置和测试 AWS WAF 欺诈控制账户创建防作弊 (ACFP) 实施方案**

首先在测试环境中执行这些步骤，然后在生产环境中执行这些步骤。

1. 

**在计数模式下 AWS WAF 添加 Fraud Control 账户创建防作弊 (ACFP) 托管规则组**
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

   将 AWS 托管规则组`AWSManagedRulesACFPRuleSet`添加到新的或现有的保护包 (Web ACL) 中，并对其进行配置，使其不会改变当前保护包 (Web ACL) 的行为。有关此规则组的规则和标签的详细信息，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。
   + 添加托管规则组时，对其进行编辑并执行以下操作：
     + 在**规则组配置**窗格中，提供您的应用程序的账户注册和创建页面的详细信息。ACFP 规则组使用此信息来监控登录活动。有关更多信息，请参阅 [将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)。
     + 在**规则**窗格中，打开**覆盖所有规则操作**下拉列表并选择 **Count**。使用此配置， AWS WAF 可以根据规则组中的所有规则评估请求，并仅计算结果的匹配项，同时仍将标签添加到请求中。有关更多信息，请参阅 [覆盖规则组的规则操作](web-acl-rule-group-settings.md#web-acl-rule-group-rule-action-override)。

       通过此覆盖，您可以监控 ACFP 托管规则的潜在影响，以确定是否要添加例外，例如内部使用案例的例外。
   + 定位规则组，使其按照您在保护包（web ACL）中的现有规则进行评估，优先级设置在数值上要高于您已在使用的任何规则或规则组。有关更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

     这样，您当前的流量处理就不会中断。例如，如果您有检测恶意流量的规则，例如 SQL 注入或跨站脚本，它们将继续检测并记录这些流量。或者，如果您的规则允许已知的非恶意流量，则它们可以继续允许该流量，而不必被 ACFP 托管规则组阻止。在测试和调整活动期间，您可能会决定调整处理顺序。

1. 

**实现应用程序集成 SDKs**

   将 AWS WAF JavaScript SDK 集成到浏览器的账户注册和账户创建路径中。 AWS WAF 还提供用于集成 SDKs iOS 和安卓设备的移动设备。有关集成的更多信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。有关此建议的信息，请参阅 [使用 SDKs 与 ACFP 的应用程序集成](waf-acfp-with-tokens.md)。
**注意**  
如果您无法使用应用程序集成 SDKs，则可以通过在保护包（Web ACL）中编辑 ACFP 规则组并删除您在规则上放置的替代项来测试 ACFP `AllRequests` 规则组。这将启用规则的 Challenge 操作设置，以确保请求中包含有效的质询令牌。  
*首先在测试环境中执行此操作，然后在生产环境中要格外小心。*这种方法有可能阻止用户。例如，如果您的注册页面路径不接受`GET` text/html 请求，则此规则配置可以有效地阻止注册页面上的所有请求。

1. 

**为保护包（web ACL）启用日志记录和指标**

   根据需要，为保护包（Web ACL）配置日志、Amazon Security Lake 数据收集、请求采样和亚马逊 CloudWatch 指标。您可以使用这些可见性工具来监控 ACFP 托管规则组与您的流量的交互情况。
   + 有关日志记录的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。
   + 有关 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)。
   + 有关 Amazon CloudWatch 指标的信息，请参阅[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。
   + 有关 web 请求采样的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

1. 

**将保护包（web ACL）与资源关联**

   如果保护包（web ACL）尚未与测试资源关联，请将其关联。有关信息，请参阅[将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

1. 

**监控流量和 ACFP 规则匹配情况**

   确保您的正常流量畅通，并且 ACFP 托管规则组规则正在为匹配的 web 请求添加标签。您可以在日志中看到标签，也可以在 Amazon 指标中查看 ACFP 和标签 CloudWatch 指标。在日志中，您在规则组中覆盖计数的规则会显示在 `ruleGroupList` 中，`action` 设置为计数，`overriddenAction` 表示您覆盖的已配置规则操作。

1. 

**测试规则组的凭证检查功能**

   尝试使用已泄露的凭证创建账户，并检查规则组是否按预期与这些凭证匹配。

   1. 访问受保护资源的账户注册页面，然后尝试添加新账户。使用以下 AWS WAF 测试凭证对并输入任意考试 
      + 用户：`WAF_TEST_CREDENTIAL@wafexample.com`
      + 密码：`WAF_TEST_CREDENTIAL_PASSWORD`

      这些测试凭证被归类为已泄露的凭证，ACFP 托管规则组会将 `awswaf:managed:aws:acfp:signal:credential_compromised` 标签添加到账户创建请求中，您可以在日志中看到该标签。

   1. 在您的保护包（web ACL）日志中，在测试账户创建请求的日志条目 `labels` 字段中查找 `awswaf:managed:aws:acfp:signal:credential_compromised` 标签。有关日志记录的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

   确认规则组按预期捕获被泄露的凭证后，您可以采取措施根据受保护资源的需要配置其实施。

1. 

**对于 CloudFront 分配，请测试规则组对批量账户创建尝试的管理**

   针对您为 ACFP 规则组配置的每个成功响应条件运行此测试。两次测试之间应至少等待 30 分钟。

   1. 对于您的每个成功条件，请确定在响应中符合成功条件的账户创建尝试。然后，在一次客户端会话中，不到 30 分钟内应至少成功完成 5 次账户创建尝试。用户通常只能在您的网站上创建一个账户。

      首次成功创建账户后，该 `VolumetricSessionSuccessfulResponse` 规则应开始与您的其余账户创建响应进行匹配，根据您的规则操作覆盖对其进行标记并进行计数。由于延迟，该规则可能会错过前一两个。

   1. 在您的保护包（web ACL）日志中，在测试账户创建 web 请求的日志条目 `labels` 字段中查找 `awswaf:managed:aws:acfp:aggregate:volumetric:session:successful_creation_response:high` 标签。有关日志记录的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

   这些测试通过检查规则汇总的成功计数是否超过规则的阈值，来验证您的成功条件是否与您的响应相符。达到阈值后，如果您继续从同一会话发送账户创建请求，则该规则将继续匹配，直到成功率降至阈值以下。当超过阈值时，该规则会匹配来自会话地址的成功或失败的账户创建尝试。

1. 

**自定义 ACFP web 请求处理**

   根据需要，添加明确允许或阻止请求的规则，以更改 ACFP 规则处理请求的方式。

   例如，您可以使用 ACFP 标签来允许或阻止请求或自定义请求处理。您可以在 ACFP 托管规则组之后添加标签匹配规则，以筛选要应用的处理的已标记请求。测试后，将相关的 ACFP 规则保持在计数模式，并在自定义规则中维护请求处理决策。有关示例，请参阅[ACFP 示例：针对被泄漏凭证的自定义响应](waf-acfp-control-example-compromised-credentials.md)。

1. 

**移除您的测试规则并启用 ACFP 托管规则组设置**

   根据您的情况，您可能决定将某些 ACFP 规则保留为计数模式。对于要按照规则组内的配置运行的规则，请在保护包（web ACL）规则组配置中禁用计数模式。完成测试后，您还可以移除测试标签匹配规则。

1. 

**监控和调整**

   为确保按照您的要求处理 web 请求，请在启用您打算使用的 ACFP 功能后密切监控流量。根据需要调整行为，使用规则组上的规则计数覆盖和您自己的规则。

在您完成 ACFP 规则组实现的测试后，如果您尚未将 AWS WAF JavaScript SDK 集成到浏览器的账户注册和账户创建页面，我们强烈建议您这样做。 AWS WAF 还提供用于集成 SDKs iOS 和安卓设备的移动设备。有关集成的更多信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。有关此建议的信息，请参阅 [使用 SDKs 与 ACFP 的应用程序集成](waf-acfp-with-tokens.md)。

# AWS WAF 欺诈控制账户创建防作弊 (ACFP) 示例
<a name="waf-acfp-control-examples"></a>

本节例示了满足 AWS WAF 欺诈控制账户创建欺诈预防（ACFP）实施的常见使用案例的配置。

每个示例都提供了使用案例的描述，然后在 JSON 列表中显示了自定义配置规则的解决方案。

**注意**  
您可以通过控制台保护包 (Web ACL) JSON 下载或规则 JSON 编辑器，或者通过 APIs 和命令行界面中的`getWebACL`操作来检索 JSON 列表，例如这些示例中所示的列表。

**Topics**
+ [ACFP 示例：简单配置](waf-acfp-control-example-basic.md)
+ [ACFP 示例：针对被泄漏凭证的自定义响应](waf-acfp-control-example-compromised-credentials.md)
+ [ACFP 示例：响应检查配置](waf-acfp-control-example-response-inspection.md)

# ACFP 示例：简单配置
<a name="waf-acfp-control-example-basic"></a>

以下 JSON 列表显示了带有 AWS WAF 欺诈控制账户创建欺诈 (ACFP) 托管规则组的示例保护包 (Web ACL)。注意其他 `CreationPath` 和 `RegistrationPagePath` 配置，以及有效载荷类型和在有效载荷中查找新账户信息所需的信息，以便对其进行验证。规则组使用此信息来监控和管理您的账户创建请求。此 JSON 包含保护包（web ACL）自动生成的设置，例如标签命名空间和保护包（web ACL）的应用程序集成 URL。

```
{
  "Name": "simpleACFP",
  "Id": "... ",
  "ARN": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/simpleACFP/... ",
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "",
  "Rules": [
    {
      "Name": "AWS-AWSManagedRulesACFPRuleSet",
      "Priority": 0,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesACFPRuleSet",
          "ManagedRuleGroupConfigs": [
            {
              "AWSManagedRulesACFPRuleSet": {
                "CreationPath": "/web/signup/submit-registration",
                "RegistrationPagePath": "/web/signup/registration",
                "RequestInspection": {
                  "PayloadType": "JSON",
                  "UsernameField": {
                    "Identifier": "/form/username"
                  },
                  "PasswordField": {
                    "Identifier": "/form/password"
                  },
                  "EmailField": {
                    "Identifier": "/form/email"
                  },
                  "PhoneNumberFields": [
                    {
                      "Identifier": "/form/country-code"
                    },
                    {
                      "Identifier": "/form/region-code"
                    },
                    {
                      "Identifier": "/form/phonenumber"
                    }
                  ],
                  "AddressFields": [
                    {
                      "Identifier": "/form/name"
                    },
                    {
                      "Identifier": "/form/street-address"
                    },
                    {
                      "Identifier": "/form/city"
                    },
                    {
                      "Identifier": "/form/state"
                    },
                    {
                      "Identifier": "/form/zipcode"
                    }
                  ]
                },
                "EnableRegexInPath": false
              }
            }
          ]
        }
      },
      "OverrideAction": {
        "None": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSManagedRulesACFPRuleSet"
      }
    }
  ],
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "simpleACFP"
  },
  "Capacity": 50,
  "ManagedByFirewallManager": false,
  "RetrofittedByFirewallManager": false,
  "LabelNamespace": "awswaf:111122223333:webacl:simpleACFP:"
}
```

# ACFP 示例：针对被泄漏凭证的自定义响应
<a name="waf-acfp-control-example-compromised-credentials"></a>

默认情况下，规则组 `AWSManagedRulesACFPRuleSet` 执行的凭证检查通过标记请求并阻止请求来处理被泄露的凭证。有关规则组和规则行为的详细信息，请参阅 [AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。

要通知用户其提供的账户凭证已被泄漏，您可以执行以下操作：
+ **将 `SignalCredentialCompromised` 规则覆盖为 Count**：这会使规则仅对匹配的请求进行计数和标记。
+ **添加带有自定义处理的标签匹配规则**：配置此规则，以便与 ACFP 标签匹配并执行自定义处理。

以下保护包（web ACL）列表显示前一个示例中的 ACFP 托管规则组，其中的 `SignalCredentialCompromised` 规则操作被覆盖为计数。使用此配置，当此规则组评估任何使用已泄露凭证的 web 请求时，它将标记该请求，但不会阻止该请求。

此外，保护包（web ACL）现在有一个名为 `aws-waf-credential-compromised` 的自定义响应和一个名为 `AccountSignupCompromisedCredentialsHandling` 的新规则。规则优先级是比规则组更高的数值设置，因此在保护包（web ACL）评估中，规则优先级在规则组之后运行。新规则将任何带有规则组已泄露凭证标签的请求进行匹配。当规则找到匹配项时，它会使用自定义响应正文将 Block 操作应用于请求。自定义响应正文向最终用户提供其凭证已被泄露的信息，并建议应对操作。

```
{
  "Name": "compromisedCreds",
  "Id": "... ",
  "ARN": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/compromisedCreds/...",
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "",
  "Rules": [
    {
      "Name": "AWS-AWSManagedRulesACFPRuleSet",
      "Priority": 0,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesACFPRuleSet",
          "ManagedRuleGroupConfigs": [
            {
              "AWSManagedRulesACFPRuleSet": {
                "CreationPath": "/web/signup/submit-registration",
                "RegistrationPagePath": "/web/signup/registration",
                "RequestInspection": {
                  "PayloadType": "JSON",
                  "UsernameField": {
                    "Identifier": "/form/username"
                  },
                  "PasswordField": {
                    "Identifier": "/form/password"
                  },
                  "EmailField": {
                    "Identifier": "/form/email"
                  },
                  "PhoneNumberFields": [
                    {
                      "Identifier": "/form/country-code"
                    },
                    {
                      "Identifier": "/form/region-code"
                    },
                    {
                      "Identifier": "/form/phonenumber"
                    }
                  ],
                  "AddressFields": [
                    {
                      "Identifier": "/form/name"
                    },
                    {
                      "Identifier": "/form/street-address"
                    },
                    {
                      "Identifier": "/form/city"
                    },
                    {
                      "Identifier": "/form/state"
                    },
                    {
                      "Identifier": "/form/zipcode"
                    }
                  ]
                },
                "EnableRegexInPath": false
              }
            }
          ],
          "RuleActionOverrides": [
            {
              "Name": "SignalCredentialCompromised",
              "ActionToUse": {
                "Count": {}
              }
            }
          ]
        }
      },
      "OverrideAction": {
        "None": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSManagedRulesACFPRuleSet"
      }
    },
    {
      "Name": "AccountSignupCompromisedCredentialsHandling",
      "Priority": 1,
      "Statement": {
        "LabelMatchStatement": {
          "Scope": "LABEL",
          "Key": "awswaf:managed:aws:acfp:signal:credential_compromised"
        }
      },
      "Action": {
        "Block": {
          "CustomResponse": {
            "ResponseCode": 406,
            "CustomResponseBodyKey": "aws-waf-credential-compromised",
            "ResponseHeaders": [
              {
                "Name": "aws-waf-credential-compromised",
                "Value": "true"
              }
            ]
          }
        }
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AccountSignupCompromisedCredentialsHandling"
      }
    }
  ],
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "compromisedCreds"
  },
  "Capacity": 51,
  "ManagedByFirewallManager": false,
  "RetrofittedByFirewallManager": false,
  "LabelNamespace": "awswaf:111122223333:webacl:compromisedCreds:",
  "CustomResponseBodies": {
    "aws-waf-credential-compromised": {
      "ContentType": "APPLICATION_JSON",
      "Content": "{\n  \"credentials-compromised\": \"The credentials you provided have been found in a compromised credentials database.\\n\\nTry again with a different username, password pair.\"\n}"
    }
  }
}
```

# ACFP 示例：响应检查配置
<a name="waf-acfp-control-example-response-inspection"></a>

以下 JSON 列表显示了一个示例保护包 (Web ACL)，其中包含配置为检查源站响应的欺 AWS WAF 诈控制账户创建欺诈 (ACFP) 托管规则组。请注意响应检查配置，它指定了成功和响应状态代码。您还可以根据标头、正文和正文 JSON 匹配来配置成功和响应设置。此 JSON 包含保护包（web ACL）自动生成的设置，例如标签命名空间和保护包（web ACL）的应用程序集成 URL。

**注意**  
ATP 响应检查仅在保护 CloudFront 分发的保护包（网络 ACLs）中可用。

```
{
  "Name": "simpleACFP",
  "Id": "... ",
  "ARN": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/simpleACFP/... ",
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "",
  "Rules": [
    {
      "Name": "AWS-AWSManagedRulesACFPRuleSet",
      "Priority": 0,
      "Statement": {
        "ManagedRuleGroupStatement": {
          "VendorName": "AWS",
          "Name": "AWSManagedRulesACFPRuleSet",
          "ManagedRuleGroupConfigs": [
            {
              "AWSManagedRulesACFPRuleSet": {
                "CreationPath": "/web/signup/submit-registration",
                "RegistrationPagePath": "/web/signup/registration",
                "RequestInspection": {
                  "PayloadType": "JSON",
                  "UsernameField": {
                    "Identifier": "/form/username"
                  },
                  "PasswordField": {
                    "Identifier": "/form/password"
                  },
                  "EmailField": {
                    "Identifier": "/form/email"
                  },
                  "PhoneNumberFields": [
                    {
                      "Identifier": "/form/country-code"
                    },
                    {
                      "Identifier": "/form/region-code"
                    },
                    {
                      "Identifier": "/form/phonenumber"
                    }
                  ],
                  "AddressFields": [
                    {
                      "Identifier": "/form/name"
                    },
                    {
                      "Identifier": "/form/street-address"
                    },
                    {
                      "Identifier": "/form/city"
                    },
                    {
                      "Identifier": "/form/state"
                    },
                    {
                      "Identifier": "/form/zipcode"
                    }
                  ]
                },
                "ResponseInspection": {
                  "StatusCode": {
                    "SuccessCodes": [
                      200
                    ],
                    "FailureCodes": [
                      401
                    ]
                  }
                },
                "EnableRegexInPath": false
              }
            }
          ]
        }
      },
      "OverrideAction": {
        "None": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "AWS-AWSManagedRulesACFPRuleSet"
      }
    }
  ],
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "simpleACFP"
  },
  "Capacity": 50,
  "ManagedByFirewallManager": false,
  "RetrofittedByFirewallManager": false,
  "LabelNamespace": "awswaf:111122223333:webacl:simpleACFP:"
  }
```

# AWS WAF 防欺诈控制账户接管 (ATP)
<a name="waf-atp"></a>

本节介绍 AWS WAF 欺诈控制账户盗用预防 (ATP) 的作用。

账户盗用是一种在线非法活动，在这种活动中，攻击者未经授权即可访问个人的账户。攻击者可以通过多种方式执行此操作，例如使用被盗的凭证或通过一系列尝试猜测受害者的密码。当攻击者获得访问权限时，他们可能会从受害者那里窃取金钱、信息或服务。攻击者可能冒充受害者，以获得受害者拥有的其他账户的访问权限，或者访问其他人或组织的账户。此外，他们可能会尝试更改用户的密码，以阻止受害者使用自己的账户。

您可以通过实施 ATP 功能来监控和控制账户接管尝试。 AWS WAF 在 “ AWS 托管规则” 规则组`AWSManagedRulesATPRuleSet`和配套应用程序集成中提供了此功能 SDKs。

ATP 托管规则组对可能属于恶意账户盗用尝试的请求进行标记和管理。规则组通过检查客户端发送到应用程序登录端点的登录尝试来实现此目的。
+ **请求检查** – ATP 允许您查看和控制异常登录尝试和使用被盗凭证的登录尝试，以防止可能导致欺诈活动的账户盗用。ATP 根据被盗凭证数据库检查电子邮件和密码组合，当在暗网上发现新的泄露凭证时，会定期更新。ATP 按 IP 地址和客户端会话汇总数据，以检测和阻止发送过多可疑请求的客户端。
+ **响应检查**-对于 CloudFront 分配，除了检查传入的登录请求外，ATP 规则组还会检查您的应用程序对登录尝试的响应，以跟踪成功率和失败率。利用这些信息，ATP 可以暂时阻止登录失败次数过多的客户端会话或 IP 地址。 AWS WAF 会异步执行响应检查，因此不会增加 Web流量的延迟。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**注意**  
ATP 功能不适用于 Amazon Cognito 用户群体。

**Topics**
+ [AWS WAF ATP 成分](waf-atp-components.md)
+ [使用 SDKs 与 ATP 的应用程序集成](waf-atp-with-tokens.md)
+ [将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md)
+ [测试和部署 ATP](waf-atp-deploying.md)
+ [AWS WAF 防欺诈控制账户接管 (ATP) 示例](waf-atp-control-examples.md)

# AWS WAF ATP 成分
<a name="waf-atp-components"></a>

防 AWS WAF 欺诈控制账户盗用 (ATP) 的主要组成部分如下：
+ **`AWSManagedRulesATPRuleSet`**— 此 AWS 托管规则组中的规则检测、标记和处理各种类型的账户接管活动。规则组检查客户端发送到指定登录端点的 HTTP `POST` web 请求。对于受保护的 CloudFront 分配，规则组还会检查分配向这些请求发回的响应。有关此规则组的规则列表，请参阅 [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。您可以使用托管规则组参考语句，将此规则组包含在保护包（web ACL）中。有关使用规则组的信息，请参阅 [将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md)。
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。
+ **有关应用程序登录页面的详细信息**：将 `AWSManagedRulesATPRuleSet` 规则组添加到保护包（web ACL）时，您必须提供有关登录页面的信息。这允许规则组缩小其检查的请求范围，并正确验证 web 请求中的凭证使用。ATP 规则组使用电子邮件格式的用户名。有关更多信息，请参阅 [将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md)。
+ **对于受保护的 CloudFront 分发，有关您的应用程序如何响应登录尝试**的详细信息 — 您可以提供有关应用程序对登录尝试的响应的详细信息，规则组会跟踪和管理发送过多失败登录尝试的客户端。有关配置此选项的信息，请参阅 [将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md)。
+ **JavaScript 和移动应用程序集成 SDKs** — 在 ATP 实施中实现 AWS WAF JavaScript 和移动 SDKs ，以启用规则组提供的全套功能。许多 ATP 规则使用提供的信息 SDKs 进行会话级别的客户端验证和行为汇总，这些信息是将合法的客户端流量与机器人流量区分开来所必需的。有关更多信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。

您可以将 ATP 实施与以下内容相结合，以帮助您监控、调整和自定义保护。
+ **日志和指标** — 通过配置和启用日志、Amazon Security Lake 数据收集以及保护包（Web ACL）的亚马逊 CloudWatch 指标，您可以监控您的流量，并了解 ACFP 托管规则组对流量的影响。`AWSManagedRulesATPRuleSet` 为您的 web 请求添加的标签包含在此数据中。有关这些选项的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)、[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md) 和[什么是 Amazon Security Lake](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html)。

  根据您的需求和看到的流量，您可能需要自定义您的 `AWSManagedRulesATPRuleSet` 实施。例如，您可能想将某些流量排除在 ATP 评估之外，或者您可能想使用范围缩小语句或标签匹配规则等 AWS WAF 功能，更改其处理所识别的某些账户接管尝试的方式。
+ **标签和标签匹配规则**：对于 `AWSManagedRulesATPRuleSet` 中的任何规则，您可以将阻止行为切换为计数，然后与规则添加的标签进行匹配。使用此方法自定义如何处理由 ATP 托管规则组标识的 web 请求。有关标记和使用标签匹配语句的更多信息，请参见 [标签匹配规则语句](waf-rule-statement-type-label-match.md) 和 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。
+ **自定义请求和响应**：您可以在允许的请求中添加自定义标头，也可以为被阻止的请求发送自定义响应。为此，您需要将匹配的标签与 AWS WAF 自定义请求和响应功能配对。有关请求和响应格式的更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

# 使用 SDKs 与 ATP 的应用程序集成
<a name="waf-atp-with-tokens"></a>

本节介绍如何使用 SDKs 与 ATP 的应用程序集成。

ATP 托管规则组需要应用程序集成 SDKs 生成的质询令牌。这些令牌支持规则组提供的全套保护。

我们强烈建议实施应用程序集成 SDKs，以便最有效地使用 ATP 规则组。质询脚本必须在 ATP 规则组之前运行，这样规则组才能从脚本获取的令牌中受益。应用程序集成会自动发生这种情况 SDKs。如果您无法使用 SDKs，则可以交替配置您的保护包 (Web ACL)，使其对所有将由 ATP CAPTCHA 规则组检查的请求运行Challenge或规则操作。使用 Challenge 或 CAPTCHA 规则操作可能会产生额外费用。有关定价的详细信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**不需要令牌的 ATP 规则组的功能**  
当 web 请求没有令牌时，ATP 托管规则组能够阻止以下类型的流量：
+ 发出大量登录请求的单个 IP 地址。
+ 在短时间内发出大量失败登录请求的单个 IP 地址。
+ 尝试使用密码遍历登录，使用相同的用户名但更改了密码。

**需要令牌的 ATP 规则组的功能**  
质询令牌中提供的信息扩展了规则组的功能和您的客户端应用程序的整体安全性。

该令牌为每个 web 请求提供客户端信息，使 ATP 规则组能够将合法的客户端会话与行为不端的客户端会话区分开来，即使两者都来自单个 IP 地址。规则组使用令牌中的信息来汇总客户端会话请求行为，以进行微调的检测和缓解。

当令牌在 web 请求中可用时，ATP 规则组可以在会话级别检测和阻止以下其他类别的客户端：
+ 未通过其 SDKs 管理的静默挑战的客户端会话。
+ 遍历用户名或密码的客户端会话。这也称作凭证填充。
+ 反复使用被盗凭证登录的客户端会话。
+ 花费很长时间尝试登录的客户端会话。
+ 发出大量登录请求的客户端会话。与 AWS WAF 基于速率的规则相比，ATP 规则组提供了更好的客户端隔离，后者可以按 IP 地址阻止客户端。ATP 规则组还使用较低的阈值。
+ 在短时间内发出大量失败登录请求的客户端会话。此功能适用于受保护的 Amazon CloudFront 分配。

有关这些功能的更多信息，请参阅 [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。

有关的信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。有关 AWS WAF 令牌的信息，请参阅[代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。有关规则操作的信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。

# 将 ATP 托管规则组添加到您的保护包（web ACL）
<a name="waf-atp-rg-using"></a>

本节介绍了如何添加和配置 `AWSManagedRulesATPRuleSet` 规则组。

要配置 ATP 托管规则组以识别网络流量中的账户盗用活动，您需要提供有关客户端如何向您的应用程序发送登录请求的信息。对于受保护的 Amazon CloudFront 分配，您还需要提供有关您的应用程序如何响应登录请求的信息。此配置是对托管规则组的常规配置的补充。

有关规则组的描述和规则列表，请参阅 [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。

**注意**  
ATP 被盗凭证数据库仅包含电子邮件格式的用户名。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。有关如何将托管规则组添加到保护包（web ACL）的基本信息，请参阅 [通过控制台向保护包（web ACL）添加托管规则组](waf-using-managed-rule-group.md)。

**遵循最佳实践**  
按照 [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md) 中的最佳实践使用 ATP 规则组。

**在保护包（web ACL）中使用 `AWSManagedRulesATPRuleSet` 规则组**

1. 将 AWS 托管规则组`AWSManagedRulesATPRuleSet`添加到您的保护包（Web ACL）中，并在保存之前**编辑**规则组设置。
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

1. 在**规则组配置**窗格中，提供 ATP 规则组用于检查登录请求的信息。

   1. 对于 “**在路径中使用正则表达式**”，如果 AWS WAF 要对登录页面路径规范执行正则表达式匹配，请将其选中。

      AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

   1. 对于**登录路径**，提供应用程序登录端点的路径。规则组仅检查发往您指定的登录端点的 HTTP `POST` 请求。
**注意**  
端点的匹配不区分大小写。正则表达式规范不得包含标志 `(?-i)`，该标志会禁用不区分大小写的匹配。字符串规范必须以正斜杠 `/` 开头。

      例如，对于 URL `https://example.com/web/login`，您可以提供字符串路径规范 `/web/login`。以您提供的路径开头的登录路径被视为匹配路径。例如，`/web/login` 匹配登录路径 `/web/login`、`/web/login/`、`/web/loginPage` 和 `/web/login/thisPage`，但与登录路径 `/home/web/login` 或 `/website/login` 不匹配。

   1. 对于**请求检查**，请通过提供请求负载类型以及请求正文中提供用户名和密码的字段的名称来指定您的应用程序如何接受登录尝试。字段名称的指定取决于有效载荷类型。
      + **JSON 负载类型**：使用 JSON 指针语法指定字段名称。有关 JSON 指针语法的信息，请参阅互联网工程任务组 (IETF) 文档[JavaScript对象表示法 (JSON) 指针](https://tools.ietf.org/html/rfc6901)。

        例如，对于以下示例 JSON 负载，用户名字段规范为 `/login/username`，密码字段规范为 `/login/password`。

        ```
        {
            "login": {
                "username": "THE_USERNAME",
                "password": "THE_PASSWORD"
            }
        }
        ```
      + **FORM\$1ENCODED 有效负载类型**：使用 HTML 表单名称。

        例如，对于输入元素名为 `username1` 和 `password1` 的 HTML 表单，用户名字段规范为 `username1`，密码字段规范为 `password1`。

   1. 如果您要保护 Amazon CloudFront 分配，请在 “**响应检查**” 下，指定您的应用程序在响应登录尝试时如何指示成功或失败。
**注意**  
ATP 响应检查仅在保护 CloudFront 分发的保护包（网络 ACLs）中可用。

      在登录响应中指定您希望 ATP 检查的单个组件。对于**正文**和 **JSON** 组件类型， AWS WAF 可以检查组件的前 65536 字节（64 KB）。

      如界面所示，提供组件类型的检查条件。您必须提供成功和失败条件以供在组件中进行检查。

      例如，假设您的应用程序在响应的状态码中指示登录尝试的状态，并使用 `200 OK` 指示成功，使用 `401 Unauthorized` 或 `403 Forbidden` 指示失败。您可以将响应检查**组件类型**设置为**状态码**，然后在**成功**文本框中输入 `200`，并在**失败**文本框的第一行输入 `401`，在第二行输入 `403`。

      ATP 规则组仅计算符合您的成功或失败检查条件的响应。当客户端在计算的响应中失败率太高时，规则组规则会对客户端采取行动。为了确保规则组规则的行为准确，请务必提供成功和失败的登录尝试的完整信息。

      要查看检查登录响应的规则，请在 [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md) 中的规则列表中查找 `VolumetricIpFailedLoginResponseHigh` 和 `VolumetricSessionFailedLoginResponseHigh`。

1. 为规则组提供所需的任何其他配置。

   您可以通过在托管规则组语句中添加范围缩小语句来进一步限制规则组检查的请求范围。例如，您只能检查带有特定查询参数或 Cookie 的请求。规则组将仅检查发往您指定的登录端点的、与您的范围缩小语句中的条件相匹配的 HTTP `POST` 请求。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

1. 保存对保护包（web ACL）的更改。

在为生产流量部署 ATP 实施之前，请在暂存或测试环境中对其进行测试和调整，直到您能够适应对流量的潜在影响。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。有关指导，请参阅以下部分。

# 测试和部署 ATP
<a name="waf-atp-deploying"></a>

本节提供有关为您的网站配置和测试 AWS WAF 欺诈控制账户接管预防 (ATP) 实施的一般指导。您选择遵循的具体步骤将取决于您的需求、资源和收到的 web 请求。

此信息是对 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md) 中提供的有关测试和调整的一般信息的补充。

**注意**  
AWS 托管规则旨在保护您免受常见 Web 威胁的侵害。根据文档使用 AWS 托管规则组时，可以为您的应用程序增加另一层安全保护。但是， AWS 托管规则规则组并不是用来取代您的安全职责，后者由您选择的 AWS 资源决定。请参阅[分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，确保您的资源 AWS 得到适当保护。

**生产流量风险**  
在为生产流量部署 ATP 实施之前，请在暂存或测试环境中对其进行测试和调整，直到您能够适应对流量的潜在影响。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。

AWS WAF 提供了可用于验证 ATP 配置的测试凭证。在以下步骤中，您将配置测试保护包（web ACL）以使用 ATP 托管规则组，配置规则以捕获规则组添加的标签，然后使用这些测试凭证尝试登录。您可以通过检查登录尝试的 Amazon CloudWatch 指标来验证您的网络 ACL 是否正确管理了该尝试。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。

**配置和测试 AWS WAF 欺诈控制账户接管预防 (ATP) 实施方案**

首先在测试环境中执行这些步骤，然后在生产环境中执行这些步骤。

1. 

**在计数模式下添加 F AWS WAF raud Control 账户接管预防 (ATP) 托管规则组**
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

   将 AWS 托管规则组`AWSManagedRulesATPRuleSet`添加到新的或现有的保护包 (Web ACL) 中，并对其进行配置，使其不会改变当前保护包 (Web ACL) 的行为。有关此规则组的规则和标签的详细信息，请参阅 [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。
   + 添加托管规则组时，对其进行编辑并执行以下操作：
     + 在**规则组配置**窗格中，提供您的应用程序的登录页面的详细信息。ATP 规则组使用此信息来监控登录活动。有关更多信息，请参阅 [将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md)。
     + 在**规则**窗格中，打开**覆盖所有规则操作**下拉列表并选择 **Count**。使用此配置， AWS WAF 可以根据规则组中的所有规则评估请求，并仅计算结果的匹配项，同时仍将标签添加到请求中。有关更多信息，请参阅 [覆盖规则组的规则操作](web-acl-rule-group-settings.md#web-acl-rule-group-rule-action-override)。

       通过此覆盖，您可以监控 ATP 托管规则的潜在影响，以确定是否要添加例外，例如内部使用案例的例外。
   + 定位规则组，使其按照您在保护包（web ACL）中的现有规则进行评估，优先级设置在数值上要高于您已在使用的任何规则或规则组。有关更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

     这样，您当前的流量处理就不会中断。例如，如果您有检测恶意流量的规则，例如 SQL 注入或跨站脚本，它们将继续检测并记录这些流量。或者，如果您的规则允许已知的非恶意流量，则它们可以继续允许该流量，而不必被 ATP 托管规则组阻止。在测试和调整活动期间，您可能会决定调整处理顺序。

1. 

**为保护包（web ACL）启用日志记录和指标**

   根据需要，为保护包（Web ACL）配置日志、Amazon Security Lake 数据收集、请求采样和亚马逊 CloudWatch 指标。您可以使用这些可见性工具来监控 ATP 托管规则组与您的流量的交互情况。
   + 有关配置和使用日志记录的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。
   + 有关 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)。
   + 有关 Amazon CloudWatch 指标的信息，请参阅[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。
   + 有关 web 请求采样的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

1. 

**将保护包（web ACL）与资源关联**

   如果保护包（web ACL）尚未与测试资源关联，请将其关联。有关信息，请参阅[将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

1. 

**监控流量和 ATP 规则匹配情况**

   确保您的正常流量畅通，并且 ATP 托管规则组规则正在为匹配的 web 请求添加标签。您可以在日志中看到标签，也可以在 Amazon 指标中查看 ATP 和标签 CloudWatch 指标。在日志中，您在规则组中覆盖计数的规则会显示在 `ruleGroupList` 中，`action` 设置为计数，`overriddenAction` 表示您覆盖的已配置规则操作。

1. 

**测试规则组的凭证检查功能**

   尝试使用已泄露的凭证进行登录，并检查规则组是否按预期与这些凭证匹配。

   1. 使用以下 AWS WAF 测试凭据对登录到受保护资源的登录页面：
      + 用户：`WAF_TEST_CREDENTIAL@wafexample.com`
      + 密码：`WAF_TEST_CREDENTIAL_PASSWORD`

      这些测试凭证被归类为已泄露的凭证，ATP 托管规则组会将 `awswaf:managed:aws:atp:signal:credential_compromised` 标签添加到登录请求中，您可以在日志中看到该标签。

   1. 在保护包（web ACL）日志中，在测试登录 web 请求的日志条目 `labels` 字段中查找 `awswaf:managed:aws:atp:signal:credential_compromised` 标签。有关日志记录的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

   确认规则组按预期捕获被泄露的凭证后，您可以采取措施根据受保护资源的需要配置其实施。

1. 

**对于 CloudFront 分配，请测试规则组的登录失败管理**

   

   1. 针对您为 ATP 规则组配置的每个失败响应条件运行测试。两次测试之间应至少等待 10 分钟。

      要测试单个失败条件，请在响应中根据该条件确定将失败的登录尝试。然后，在不到 10 分钟的时间内，从单个客户端 IP 地址执行至少 10 次失败的登录尝试。

      在前 6 次失败之后，容量失败登录规则应开始与您的其余尝试进行匹配，对其进行标记和计数。由于延迟，该规则可能会错过前一两个。

   1. 在保护包（web ACL）日志中，在测试登录 web 请求的日志条目 `labels` 字段中查找 `awswaf:managed:aws:atp:aggregate:volumetric:ip:failed_login_response:high` 标签。有关日志记录的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

   这些测试通过检查失败的登录计数是否超过规则 `VolumetricIpFailedLoginResponseHigh` 的阈值来验证您的失败条件是否与您的响应相符。达到阈值后，如果您继续从同一 IP 地址发送登录请求，则该规则将继续匹配，直到失败率降至阈值以下。当超过阈值时，该规则会匹配从 IP 地址成功或失败的登录。

1. 

**自定义 ATP web 请求处理**

   根据需要，添加您自己的明确允许或阻止请求的规则，以更改 ATP 规则处理请求的方式。

   例如，您可以使用 ATP 标签来允许或阻止请求或自定义请求处理。您可以在 ATP 托管规则组之后添加标签匹配规则，以筛选要应用的处理的带标签的请求。测试后，将相关的 ATP 规则保持在计数模式，并在自定义规则中维护请求处理决策。有关示例，请参阅[ATP 示例：针对缺失和被盗凭证的自定义处理](waf-atp-control-example-user-agent-exception.md)。

1. 

**移除您的测试规则并启用 ATP 托管规则组设置**

   根据您的情况，您可能已经决定将某些 ATP 规则保留为计数模式。对于要按照规则组内的配置运行的规则，请在保护包（web ACL）规则组配置中禁用计数模式。完成测试后，您还可以移除测试标签匹配规则。

1. 

**监控和调整**

   为确保 web 请求按您的意愿处理，请在启用要使用的 ATP 功能后密切监控您的流量。根据需要调整行为，使用规则组上的规则计数覆盖和您自己的规则。

在您完成 ATP 规则组实现的测试后，如果您还没有这样做，我们强烈建议您将 AWS WAF JavaScript 软件开发工具包集成到浏览器登录页面中，以增强检测功能。 AWS WAF 还提供用于集成 SDKs iOS 和安卓设备的移动设备。有关集成的更多信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。有关此建议的信息，请参阅 [使用 SDKs 与 ATP 的应用程序集成](waf-atp-with-tokens.md)。

# AWS WAF 防欺诈控制账户接管 (ATP) 示例
<a name="waf-atp-control-examples"></a>

本节显示了满足 AWS WAF 欺诈控制账户盗用防护（ATP）实施常见使用案例的配置示例。

每个示例都提供了用例的描述，然后在 JSON 列表中显示了自定义配置规则的解决方案。

**注意**  
您可以通过控制台保护包 (Web ACL) JSON 下载或规则 JSON 编辑器，或者通过 APIs 和命令行界面中的`getWebACL`操作来检索 JSON 列表，例如这些示例中所示的列表。

**Topics**
+ [ATP 示例：简单配置](waf-atp-control-example-basic.md)
+ [ATP 示例：针对缺失和被盗凭证的自定义处理](waf-atp-control-example-user-agent-exception.md)
+ [ATP 示例：响应检查配置](waf-atp-control-example-response-inspection.md)

# ATP 示例：简单配置
<a name="waf-atp-control-example-basic"></a>

以下 JSON 列表显示了带有防 AWS WAF 欺诈控制账户接管 (ATP) 托管规则组的示例保护包 (Web ACL)。请注意额外的登录页面配置，它为规则组提供了监控和管理您的登录请求所需的信息。此 JSON 包含保护包（web ACL）自动生成的设置，例如标签命名空间和保护包（web ACL）的应用程序集成 URL。

```
{
    "WebACL": {
        "LabelNamespace": "awswaf:111122223333:webacl:ATPModuleACL:",
        "Capacity": 50,
        "Description": "This is a test protection pack (web ACL) for ATP.",
        "Rules": [
            {
                "Priority": 1,
                "OverrideAction": {
                    "None": {}
                },
                "VisibilityConfig": {
                    "SampledRequestsEnabled": true,
                    "CloudWatchMetricsEnabled": true,
                    "MetricName": "AccountTakeOverValidationRule"
                },
                "Name": "DetectCompromisedUserCredentials",
                "Statement": {
                    "ManagedRuleGroupStatement": {
                        "VendorName": "AWS",
                        "Name": "AWSManagedRulesATPRuleSet",
                        "ManagedRuleGroupConfigs": [
                          {
                            "AWSManagedRulesATPRuleSet": {
                              "LoginPath": "/web/login",
                              "RequestInspection": {
                                "PayloadType": "JSON",
                                "UsernameField": {
                                  "Identifier": "/form/username"
                                },
                                "PasswordField": {
                                  "Identifier": "/form/password"
                                }
                              },
                              "EnableRegexInPath": false
                            }
                          }
                        ]
                    }
                }
            }
        ],
        "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "ATPValidationAcl"
        },
        "DefaultAction": {
            "Allow": {}
        },
        "ManagedByFirewallManager": false,
        "RetrofittedByFirewallManager": false,
        "Id": "32q10987-65rs-4tuv-3210-98765wxyz432",
        "ARN": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/ATPModuleACL/32q10987-65rs-4tuv-3210-98765wxyz432",
        "Name": "ATPModuleACL"
    },
    "ApplicationIntegrationURL": "https://9z87abce34ea.us-east-1.sdk.awswaf.com/9z87abce34ea/1234567a1b10/",
    "LockToken": "6d0e6966-95c9-48b6-b51d-8e82e523b847"
}
```

# ATP 示例：针对缺失和被盗凭证的自定义处理
<a name="waf-atp-control-example-user-agent-exception"></a>

默认情况下，规则组 `AWSManagedRulesATPRuleSet` 执行的凭证检查按如下方式处理 Web 请求：
+ **缺少凭证** – 标记和阻止请求。
+ **凭证泄露** – 为请求添加标签，但不要将其阻止或计数。

有关规则组和规则行为的详细信息，请参阅 [AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。

您可以通过执行以下操作为凭证缺失或泄露的 Web 请求添加自定义处理：
+ **将 `MissingCredential` 规则覆盖为 Count** – 此规则操作覆盖会使规则仅对匹配的请求进行计数和标记。
+ **添加带有自定义处理的标签匹配规则** – 配置此规则以匹配两个 ATP 标签并执行您的自定义处理。例如，您可以将客户重定向到您的注册页面。

以下规则显示了前一个示例中的 ATP 托管规则组，其中的 `MissingCredential` 规则操作被覆盖为计数。这会导致规则将其标签应用于匹配的请求，然后只计算请求数，而不是阻止请求。

```
"Rules": [
    {
        "Priority": 1,
        "OverrideAction": {
            "None": {}
        },
        "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "AccountTakeOverValidationRule"
        },
        "Name": "DetectCompromisedUserCredentials",
        "Statement": {
            "ManagedRuleGroupStatement": {
                "ManagedRuleGroupConfigs": [
                  {
                    "AWSManagedRulesATPRuleSet": {
                      "LoginPath": "/web/login",
                      "RequestInspection": {
                        "PayloadType": "JSON",
                        "UsernameField": {
                          "Identifier": "/form/username"
                        },
                        "PasswordField": {
                          "Identifier": "/form/password"
                        }
                      },
                      "EnableRegexInPath": false
                    }
                  }
                ]
                "VendorName": "AWS",
                "Name": "AWSManagedRulesATPRuleSet",
                "RuleActionOverrides": [
                  {
                    "ActionToUse": {
                      "Count": {}
                    },
                    "Name": "MissingCredential"
                  }
                ],
                "ExcludedRules": []
            }
        }
    }
],
```

使用此配置，当此规则组评估任何缺少凭证或已泄露的 Web 请求时，它将标记该请求，但不会阻止该请求。

以下规则的优先级设置在数字上高于前面的规则组。 AWS WAF 按数字顺序评估规则，从最低开始，因此将在规则组评估之后评估此规则。该规则配置为匹配任一凭证标签，并为匹配的请求发送自定义响应。

```
"Name": "redirectToSignup",
      "Priority": 10,
      "Statement": {
        "OrStatement": {
          "Statements": [
            {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:atp:signal:missing_credential"
              }
            },
            {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:atp:signal:credential_compromised"
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {
          "CustomResponse": {
             your custom response settings 
          }
        }
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "redirectToSignup"
      }
```

# ATP 示例：响应检查配置
<a name="waf-atp-control-example-response-inspection"></a>

以下 JSON 列表显示了一个保护包 (Web ACL) 示例，其中包含一个配置为检查源站响应的 AWS WAF 欺诈控制账户接管预防 (ATP) 托管规则组。请注意响应检查配置，它指定了成功和响应状态代码。您还可以根据标头、正文和正文 JSON 匹配来配置成功和响应设置。此 JSON 包含保护包（web ACL）自动生成的设置，例如标签命名空间和保护包（web ACL）的应用程序集成 URL。

**注意**  
ATP 响应检查仅在保护 CloudFront 分发的保护包（网络 ACLs）中可用。

```
{
    "WebACL": {
        "LabelNamespace": "awswaf:111122223333:webacl:ATPModuleACL:",
        "Capacity": 50,
        "Description": "This is a test protection pack (web ACL) for ATP.",
        "Rules": [
            {
                "Priority": 1,
                "OverrideAction": {
                    "None": {}
                },
                "VisibilityConfig": {
                    "SampledRequestsEnabled": true,
                    "CloudWatchMetricsEnabled": true,
                    "MetricName": "AccountTakeOverValidationRule"
                },
                "Name": "DetectCompromisedUserCredentials",
                "Statement": {
                    "ManagedRuleGroupStatement": {
                        "VendorName": "AWS",
                        "Name": "AWSManagedRulesATPRuleSet",
                        "ManagedRuleGroupConfigs": [
                          {
                            "AWSManagedRulesATPRuleSet": {
                              "LoginPath": "/web/login",
                              "RequestInspection": {
                                "PayloadType": "JSON",
                                "UsernameField": {
                                  "Identifier": "/form/username"
                                },
                                "PasswordField": {
                                  "Identifier": "/form/password"
                                }
                              },
                              "ResponseInspection": {
                                "StatusCode": {
                                  "SuccessCodes": [
                                    200
                                  ],
                                  "FailureCodes": [
                                    401
                                  ]
                                }
                              },
                              "EnableRegexInPath": false
                            }
                          }
                        ]
                    }
                }
            }
        ],
        "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "ATPValidationAcl"
        },
        "DefaultAction": {
            "Allow": {}
        },
        "ManagedByFirewallManager": false,
        "RetrofittedByFirewallManager": false,
        "Id": "32q10987-65rs-4tuv-3210-98765wxyz432",
        "ARN": "arn:aws:wafv2:us-east-1:111122223333:regional/webacl/ATPModuleACL/32q10987-65rs-4tuv-3210-98765wxyz432",
        "Name": "ATPModuleACL"
    },
    "ApplicationIntegrationURL": "https://9z87abce34ea.us-east-1.sdk.awswaf.com/9z87abce34ea/1234567a1b10/",
    "LockToken": "6d0e6966-95c9-48b6-b51d-8e82e523b847"
}
```

# AWS WAF 机器人控制
<a name="waf-bot-control"></a>

本节介绍了机器人控制功能的用途。

借助机器人控制功能，您可以轻松监控、阻止机器人或限制速率，例如抓取器、扫描器、爬虫、状态监视器和搜索引擎。如果您使用规则组的目标检查级别，则还可以质询无法自我识别的机器人，这使得恶意机器人对您的网站进行操作变得更加困难，成本也更高。您可以单独使用 Bot Control 托管规则组来保护您的应用程序，也可以与其他 AWS 托管规则组和您自己的自定义 AWS WAF 规则结合使用。

机器人控制功能包括一个控制台控制面板，根据请求采样显示您当前的流量中有多少来自机器人。将机器人控制功能托管规则组添加到保护包（web ACL）后，您可以对机器人流量采取操作，并接收有关进入应用程序的常见机器人流量的详细、实时信息。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

机器人控制功能托管规则组提供了基本的通用保护级别，可为自我识别的机器人添加标签，验证普遍需要的机器人，并检测高度可信的机器人签名。这使您能够监控和控制常见的机器人流量类别。

机器人控制功能规则组还提供目标保护级别，增加了对无法自我识别的复杂机器人的检测。所有目标保护都使用浏览器查询、指纹识别和行为启发式等检测技术来识别恶意机器人流量。此外，目标保护还可对网站流量统计数据进行可选的自动机器学习分析，以检测与机器人相关的活动。启用机器学习后， AWS WAF 会使用有关网站流量的统计信息（例如时间戳、浏览器特征和之前访问的 URL）来改进机器人控制功能机器学习模型。

在根据 Bot Control 托管规则组 AWS WAF 评估 Web 请求时，规则组会为其检测为与机器人相关的请求添加标签，例如机器人类别和机器人名称。您可以在自己的 AWS WAF 规则中与这些标签进行匹配以自定义处理。Bot Control 托管规则组生成的标签包含在 Amazon CloudWatch 指标和您的保护包 (Web ACL) 日志中。

您还可以使用 AWS Firewall Manager AWS WAF 策略在属于您组织的多个账户中跨应用程序部署 Bot Control 托管规则组 AWS Organizations。

有关机器人控制功能托管规则组的更多信息，请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

## AI 代理的 Web 机器人身份验证
<a name="waf-bot-ai-agents"></a>

AWS WAF Bot Control 现在支持 Web Bot 身份验证 (WBA) 作为机器人和 AI 代理访问您的 CloudFront 发行版的加密验证方法。此功能使合法的 AI 爬虫和代理无需传统的质询响应机制即可证明其身份。

版本要求：`AWSManagedRulesBotControlRuleSet`版本\$14.0 或更高版本。（必须明确选择静态版本。） 有关标签分类和规则行为的详细信息，请参阅：
+ [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)
+ [在 Web 请求中添加标签 AWS WAF](waf-labels.md)
+ [AWS 托管规则变更日志](aws-managed-rule-groups-changelog.md)

# AWS WAF 机器人控制组件
<a name="waf-bot-control-components"></a>

机器人控制功能实施的主要组件如下：
+ **`AWSManagedRulesBotControlRuleSet`**：机器人控制功能托管规则组，其规则可检测和处理各种类别的机器人。此规则组为其检测为机器人流量的 web 请求添加标签。
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

机器人控制功能托管规则组提供两种保护级别供您选择：
  + **常见**：检测各种自我识别的机器人，例如 web 抓取框架、搜索引擎和自动浏览器。此级别的机器人控制功能保护使用传统的机器人检测技术（例如静态请求数据分析）来识别常见的机器人。这些规则会标记来自这些机器人的流量，并阻止他们无法验证的流量。
  + **定向**：包括通用级保护，并针对无法自我识别的复杂机器人添加定向检测。目标保护结合了速率限制和验证码以及后台浏览器质询，缓解了机器人活动。
    + **`TGT_`**：提供目标保护的规则的名称以 `TGT_` 开头。所有目标保护都使用浏览器查询、指纹识别和行为启发式等检测技术来识别恶意机器人流量。
    + **`TGT_ML_`**：使用机器学习的目标保护规则的名称以 `TGT_ML_` 开头。这些规则使用对网站流量统计数据的自动机器学习分析来检测表明分布式、协调的机器人活动的异常行为。 AWS WAF 分析有关您的网站流量的统计信息，例如时间戳、浏览器特征和之前访问的 URL，以改进 Bot Control 机器学习模型。默认情况下，机器学习功能处于启用状态，但您可以在规则组配置中将其禁用。禁用机器学习时， AWS WAF 不评估这些规则。

  有关详细信息（包括有关规则组规则的信息），请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

  您可以使用托管规则组参考语句，将此规则组包含在保护包（web ACL）中，并指明要使用的检查级别。对于目标关卡，您还需要指示是否启用机器学习。有关在保护包（web ACL）中使用托管规则组的更多信息，请参阅 [将 AWS WAF Bot Control 托管规则组添加到 Web ACL](waf-bot-control-rg-using.md)。
+ **机器人控制功能控制面板**：保护包（web ACL）的机器人监控控制面板，可通过保护包（web ACL）机器人控制功能选项卡进行访问。使用此控制面板监控您的流量，并了解其中有多少来自各种类型的机器人。如本主题所述，这可以作为自定义机器人管理的起点。您还可以使用它来验证您的更改并监控各种机器人和机器人类别的活动。
+ **AI 流量分析仪表板** — 用于详细分析人工智能机器人和代理活动的专用仪表板，可通过保护包 (Web ACL) AI 流量分析选项卡获得。提供对特定于 AI 的流量模式、机器人意图和超出标准机器人控制指标的访问行为的可见性。
+ **JavaScript 和移动应用程序集成 SDKs** — SDKs 如果您使用 Bot C AWS WAF JavaScript ontrol 规则组的目标保护级别，则应实现和移动。目标规则使用客户端令牌 SDKs 中提供的信息来增强对恶意机器人的检测。有关更多信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。
+ **日志和指标** — 通过研究 AWS WAF 日志、Amazon Security Lake 和 Amazon 为保护包 (Web ACL) 收集的数据，您可以监控您的机器人流量，并了解机器人控制托管规则组如何评估和处理您的流量。 CloudWatch机器人控制功能为您的 web 请求添加的标签包含在此数据中。有关这些选项的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)、[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md) 和[什么是 Amazon Security Lake](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html)。

  根据您的需求和看到的流量，您可能需要自定义机器人控制功能实施。以下是一些最常用的选项。
+ **范围缩小语句**：通过在机器人控制功能托管规则组参考语句中添加范围缩小语句，可以从机器人控制功能托管规则组评估的 web 请求中排除一些流量。范围缩小语句可以是任何可嵌套的规则语句。当请求与 scope-down 语句不匹配时， AWS WAF 会将其评估为与规则组参考语句不匹配，而不根据规则组对其进行评估。有范围缩小语句的更多信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

  使用机器人控制功能托管规则组的费用会随着 AWS WAF 使用该规则组评估的 web 请求数量而增加。您可以使用范围缩小语句来限制规则组评估的请求，从而帮助降低这些成本。例如，您可能希望允许所有人（包括机器人）加载您的主页，然后将规则组规则应用于发送到您的应用程序 APIs 或包含特定类型内容的请求。
+ **标签和标签匹配规则**-您可以使用 AWS WAF 标签匹配规则语句自定义 Bot Control 规则组如何处理其识别的某些机器人流量。机器人控制功能规则组会为您的 web 请求添加标签。您可以在机器人控制功能规则组之后添加与机器人控制功能标签匹配的标签匹配规则，然后应用所需的处理。有关标记和使用标签匹配语句的更多信息，请参见 [标签匹配规则语句](waf-rule-statement-type-label-match.md) 和 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。
+ **自定义请求和响应** — 您可以向允许的请求添加自定义标头，也可以通过将标签与自定义请求和响应功能匹配来为您屏蔽的请求发送 AWS WAF 自定义响应。有关请求和响应格式的更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

# 使用应用程序 SDKs 与 Bot Control 集成
<a name="waf-bot-with-tokens"></a>

本节介绍如何使用 SDKs 与 Bot Control 的应用程序集成。

Bot Control 托管规则组的大多数定向保护都需要应用程序集成 SDKs 生成的质询令牌。不需要在请求中使用质询令牌的规则是机器人控制功能通用级别保护和目标级别机器学习规则。有关规则组中保护级别和规则的描述，请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

我们强烈建议实施应用程序集成 SDKs，以便最有效地使用机器人控制规则组。质询脚本必须在机器人控制功能规则组之前运行，这样规则组才能从脚本获取的令牌中受益。
+ 通过应用程序集成 SDKs，脚本会自动运行。
+ 如果您无法使用 SDKs，则可以配置您的保护包 (Web ACL)，使其对机器人控制CAPTCHA规则组将要检查的所有请求运行Challenge或规则操作。使用 Challenge 或 CAPTCHA 规则操作可能会产生额外费用。有关定价的详细信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

当您在客户端 SDKs 中实现应用程序集成或使用运行挑战脚本的规则操作之一时，可以扩展规则组和整体客户端应用程序安全的功能。

令牌为每个 web 请求提供客户信息。这些附加信息使机器人控制功能规则组能够将合法的客户端会话与行为不端的客户端会话区分开来，即使两者都来自单个 IP 地址。规则组使用令牌中的信息来汇总客户端会话请求行为，以实施目标保护级别提供的微调检测和缓解。

有关的信息 SDKs，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。有关 AWS WAF 令牌的信息，请参阅[代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。有关规则操作的信息，请参阅 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md)。

# 将 AWS WAF Bot Control 托管规则组添加到 Web ACL
<a name="waf-bot-control-rg-using"></a>

本节介绍了如何添加和配置 `AWSManagedRulesBotControlRuleSet` 规则组。

机器人控制功能托管规则组 `AWSManagedRulesBotControlRuleSet` 需要额外的配置才能确定要实施的保护级别。

有关规则组的描述和规则列表，请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。有关如何将托管规则组添加到保护包（web ACL）的基本信息，请参阅 [通过控制台向保护包（web ACL）添加托管规则组](waf-using-managed-rule-group.md)。

**遵循最佳实践**  
按照 [中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md) 中的最佳实践使用机器人控制功能规则组。

**在保护包（web ACL）中使用 `AWSManagedRulesBotControlRuleSet` 规则组**

1. 将 AWS 托管规则组`AWSManagedRulesBotControlRuleSet`添加到您的保护包（Web ACL）中。有关规则组的完整描述，请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

   添加规则组时，对其进行编辑以打开规则组的配置页面。

1. 在规则组的配置页面的**检查级别**窗格中，选择要使用的检查级别。
   + **常见**：检测各种自我识别的机器人，例如 web 抓取框架、搜索引擎和自动浏览器。此级别的机器人控制功能保护使用传统的机器人检测技术（例如静态请求数据分析）来识别常见的机器人。这些规则会标记来自这些机器人的流量，并阻止他们无法验证的流量。
   + **定向**：包括通用级保护，并针对无法自我识别的复杂机器人添加定向检测。目标保护结合了速率限制和验证码以及后台浏览器质询，缓解了机器人活动。
     + **`TGT_`**：提供目标保护的规则的名称以 `TGT_` 开头。所有目标保护都使用浏览器查询、指纹识别和行为启发式等检测技术来识别恶意机器人流量。
     + **`TGT_ML_`**：使用机器学习的目标保护规则的名称以 `TGT_ML_` 开头。这些规则使用对网站流量统计数据的自动机器学习分析来检测表明分布式、协调的机器人活动的异常行为。 AWS WAF 分析有关您的网站流量的统计信息，例如时间戳、浏览器特征和之前访问的 URL，以改进 Bot Control 机器学习模型。默认情况下，机器学习功能处于启用状态，但您可以在规则组配置中将其禁用。禁用机器学习时， AWS WAF 不评估这些规则。

1. 如果您使用的是目标保护级别，并且不想 AWS WAF 使用机器学习 (ML) 来分析分布式、协调的机器人活动的网络流量，请禁用机器学习选项。名称以 `TGT_ML_` 开头的机器人控制功能规则需要机器学习。有关这些规则的详细信息，请参阅 [机器人控制功能规则列表](aws-managed-rule-groups-bot.md#aws-managed-rule-groups-bot-rules)。

1. 为规则组添加范围缩小语句，以包含使用规则组的成本。范围缩小语句缩小了规则组检查的请求集的范围。例如使用案例，请以 [机器人控制功能示例：仅对登录页面使用机器人控制功能](waf-bot-control-example-scope-down-login.md) 和 [机器人控制功能示例：仅对动态内容使用机器人控制功能](waf-bot-control-example-scope-down-dynamic-content.md) 开头。

1. 提供规则组所需的任何其他配置。

1. 保存对保护包（web ACL）的更改。

在为生产流量部署机器人控制功能实施之前，请在暂存或测试环境中对其进行测试和调整，直到您能够适应对流量的潜在影响。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。有关指导，请参阅以下各节。

# AWS WAF Bot Control 误报的示例场景
<a name="waf-bot-control-false-positives"></a>

 本节提供了在使用 AWS WAF Bot Control 时可能遇到误报情况的示例。

我们精心选择了 AWS WAF Bot Control 托管规则组中的规则，以最大限度地减少误报。我们根据全球流量测试规则，并监控其对测试保护包（网络 ACLs）的影响。但是，由于流量模式的变化，仍然有可能出现误报。此外，已知某些使用案例会导致误报，因此需要根据您的 web 流量进行自定义。

您可能会遇到误报的情况包括：
+ 移动应用程序通常具有非浏览器用户代理，`SignalNonBrowserUserAgent` 规则在默认情况下会阻止这些代理。如果您期望来自移动应用程序的流量，或者任何其他来自非浏览器用户代理的合法流量，则需要添加例外才能允许。
+ 您可能会依赖一些特定的机器人流量来执行诸如正常运行时间监控、集成测试或营销工具之类的操作。如果机器人控制功能识别并阻止了您想要允许的机器人流量，则需要通过添加自己的规则来更改处理方式。虽然这不是所有客户的误报情况，但如果是针对您，则需要像处理误报一样处理。
+ Bot Control 托管规则组使用来自 AWS WAF的 IP 地址验证机器人。如果您使用机器人控制功能，并且已经验证了通过代理或负载均衡器进行路由的机器人，则您可能需要使用自定义规则明确允许它们。有关如何创建此类型规则的自定义规则的更多信息，请参阅 [在中使用转发的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)。
+ 全局误报率较低的机器人控制功能规则可能会严重影响特定的设备或应用程序。例如，在测试和验证中，我们可能没有观察到来自低流量应用程序或来自不太常见的浏览器或设备的请求。
+ 误报率处于历史最低水平的机器人控制功能规则可能会增加有效流量的误报。这可能是由于新的流量模式或请求属性随有效流量一起出现，导致其与以前没有的规则相匹配。这些更改可能是由于以下情况所致：
  + 流量详细信息随着流量流经网络设备（例如负载均衡器或内容分配网络 (CDN)）而发生变化。
  + 流量数据的新变化，例如新浏览器或现有浏览器的新版本。

有关如何处理可能从 AWS WAF 机器人控制功能托管规则组中获得的误报的信息，请参阅以下部分中的指导 [测试和部署 AWS WAF 机器人控制](waf-bot-control-deploying.md)。

# 测试和部署 AWS WAF 机器人控制
<a name="waf-bot-control-deploying"></a>

本节提供有关为您的网站配置和测试 AWS WAF Bot Control 实现的一般指导。您选择遵循的具体步骤将取决于您的需求、资源和收到的 web 请求。

此信息是对 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md) 中提供的有关测试和调整的一般信息的补充。

**注意**  
AWS 托管规则旨在保护您免受常见网络威胁的侵害。根据文档使用 AWS 托管规则组时，可以为您的应用程序增加另一层安全保护。但是， AWS 托管规则规则组并不是用来取代您的安全职责，后者由您选择的 AWS 资源决定。请参阅[分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，确保您的资源 AWS 得到适当保护。

**生产流量风险**  
在为生产流量部署机器人控制功能实施之前，请在暂存或测试环境中对其进行测试和调整，直到您能够适应对流量的潜在影响。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。

**配置和测试机器人控制功能实施**

首先在测试环境中执行这些步骤，然后在生产环境中执行这些步骤。

1. 

**添加机器人控制功能托管规则组**
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

   将托管 AWS 规则组`AWSManagedRulesBotControlRuleSet`添加到新的或现有的保护包 (Web ACL) 中，并对其进行配置，使其不会改变当前保护包 (Web ACL) 的行为。
   + 添加托管规则组时，对其进行编辑并执行以下操作：
     + 在**检查级别**窗格中，选择要使用的检查级别。
       + **常见**：检测各种自我识别的机器人，例如 web 抓取框架、搜索引擎和自动浏览器。此级别的机器人控制功能保护使用传统的机器人检测技术（例如静态请求数据分析）来识别常见的机器人。这些规则会标记来自这些机器人的流量，并阻止他们无法验证的流量。
       + **定向**：包括通用级保护，并针对无法自我识别的复杂机器人添加定向检测。目标保护结合了速率限制和验证码以及后台浏览器质询，缓解了机器人活动。
         + **`TGT_`**：提供目标保护的规则的名称以 `TGT_` 开头。所有目标保护都使用浏览器查询、指纹识别和行为启发式等检测技术来识别恶意机器人流量。
         + **`TGT_ML_`**：使用机器学习的目标保护规则的名称以 `TGT_ML_` 开头。这些规则使用对网站流量统计数据的自动机器学习分析来检测表明分布式、协调的机器人活动的异常行为。 AWS WAF 分析有关您的网站流量的统计信息，例如时间戳、浏览器特征和之前访问的 URL，以改进 Bot Control 机器学习模型。默认情况下，机器学习功能处于启用状态，但您可以在规则组配置中将其禁用。禁用机器学习时， AWS WAF 不评估这些规则。

       有关此选择的更多信息，请参阅 [AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。
     + 在**规则**窗格中，打开**覆盖所有规则操作**下拉列表并选择 **Count**。使用此配置，可以根据规则组中的所有规则 AWS WAF 评估请求，并仅计算结果的匹配项，同时仍将标签添加到请求中。有关更多信息，请参阅 [覆盖规则组的规则操作](web-acl-rule-group-settings.md#web-acl-rule-group-rule-action-override)。

       通过此替换，您可以监控机器人控制功能规则对您的流量的潜在影响，以确定是否要为内部使用案例或所需的机器人添加例外。
   + 定位规则组，使其在保护包（web ACL）中最后进行评估，优先级设置在数字上要高于您已在使用的任何其他规则或规则组。有关更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

     这样，您当前的流量处理就不会中断。例如，如果您有检测恶意流量的规则，例如 SQL 注入或跨站脚本，它们将继续检测和记录这些请求。或者，如果您的规则允许已知的非恶意流量，则它们可以继续允许该流量，而不必被机器人控制功能托管规则组阻止。在测试和调整活动期间，您可能会决定调整处理顺序，但这是一个不错的起点。

1. 

**为保护包（web ACL）启用日志记录和指标**

   根据需要，为保护包（Web ACL）配置日志、Amazon Security Lake 数据收集、请求采样和亚马逊 CloudWatch 指标。您可以使用这些可见性工具来监控机器人控制功能托管规则组与您的流量的交互情况。
   + 有关日志记录的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。
   + 有关亚马逊安全湖的信息，请参阅[什么是亚马逊安全湖？](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)。
   + 有关 Amazon CloudWatch 指标的信息，请参阅[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。
   + 有关 web 请求采样的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

1. 

**将保护包（web ACL）与资源关联**

   如果保护包（web ACL）尚未与资源关联，请将其关联。有关信息，请参阅[将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

1. 

**监控流量和机器人控制功能规则匹配情况**

   确保流量畅通，并且机器人控制功能托管规则组规则正在为匹配的 web 请求添加标签。您可以在日志中看到标签，也可以在 Amazon 指标中查看机器人和标签 CloudWatch 指标。在日志中，您在规则组中覆盖计数的规则会显示在 `ruleGroupList` 中，`action` 设置为计数，`overriddenAction` 表示您覆盖的已配置规则操作。
**注意**  
机器人控制功能托管规则组使用来自 AWS WAF的 IP 地址验证机器人。如果您使用机器人控制功能，并且已经验证了通过代理或负载均衡器进行路由的机器人，则您可能需要使用自定义规则明确允许它们。有关如何创建自定义规则的更多信息，请参阅 [在中使用转发的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)。有关如何使用该规则自定义机器人控制功能 web 请求处理的信息，请参阅下一步。

   请仔细检查 web 请求处理中是否存在任何可能需要通过自定义处理来缓解的误报。有关误报的示例，请参阅 [AWS WAF Bot Control 误报的示例场景](waf-bot-control-false-positives.md)。

1. 

**自定义机器人控制功能 web 请求处理**

   根据需要，添加您自己的明确允许或阻止请求的规则，以更改机器人控制功能规则处理请求的方式。

   如何执行此操作取决于您的使用案例，但以下是常见的解决方案：
   + 明确允许具有在机器人控制功能托管规则组之前添加的规则的请求。这样，允许的请求就永远不会到达规则组进行评估。这有助于控制使用机器人控制功能托管规则组的成本。
   + 通过在机器人控制功能托管规则组语句中添加范围缩小语句，将请求排除在机器人控制功能评估之外。此功能与前面的选项相同。它可能有助于控制使用机器人控制功能托管规则组的费用，因为与范围缩小语句不匹配的请求永远不会进入规则组评估。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

     有关 示例，请参阅以下内容：
     + [从机器人管理中排除 IP 范围](waf-bot-control-example-scope-down-ip.md)
     + [允许来自您控制的机器人的流量](waf-bot-control-example-scope-down-your-bot.md)
   + 在请求处理中使用机器人控制功能标签来允许或阻止请求。在机器人控制功能托管规则组之后添加标签匹配规则，从要阻止的请求中筛选出要允许的带标签的请求。

     测试后，将相关的机器人控制功能规则保持在计数模式，并在您的自定义规则中维护请求处理决策。有关标签匹配语句的信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md)。

     有关此类型自定义的示例，请参阅以下内容：
     + [为被阻止的用户代理创建例外](waf-bot-control-example-user-agent-exception.md)
     + [允许特定的被阻止机器人](waf-bot-control-example-allow-blocked-bot.md)
     + [阻止已验证机器人](waf-bot-control-example-block-verified-bots.md)

   有关其他示例，请参阅 [AWS WAF 机器人控制示例](waf-bot-control-examples.md)。

1. 

**根据需要启用机器人控制功能托管规则组设置**

   根据您的情况，您可能已经决定要将某些机器人控制功能规则保留为计数模式或使用不同的操作覆盖。对于要按照规则组内部配置的方式运行的规则，请启用常规规则配置。为此，请编辑保护包（web ACL）中的规则组语句，然后在**规则**窗格中进行更改。

# AWS WAF 机器人控制示例
<a name="waf-bot-control-examples"></a>

本节显示了满足 AWS WAF Bot Control 实现的各种常见用例的示例配置。

每个示例都提供了使用案例的描述，然后在 JSON 列表中显示了自定义配置规则的解决方案。

**注意**  
这些示例中显示的 JSON 列表是在控制台中创建的，方法是配置规则，然后使用**规则 JSON 编辑器**对其进行编辑。

**Topics**
+ [机器人控制功能示例：简单配置](waf-bot-control-example-basic.md)
+ [机器人控制功能示例：明确允许已验证机器人](waf-bot-control-example-allow-verified-bots.md)
+ [机器人控制功能示例：阻止已验证机器人](waf-bot-control-example-block-verified-bots.md)
+ [机器人控制功能示例：允许特定的被阻止机器人](waf-bot-control-example-allow-blocked-bot.md)
+ [机器人控制功能示例：为被阻止的用户代理创建例外](waf-bot-control-example-user-agent-exception.md)
+ [机器人控制功能示例：仅对登录页面使用机器人控制功能](waf-bot-control-example-scope-down-login.md)
+ [机器人控制功能示例：仅对动态内容使用机器人控制功能](waf-bot-control-example-scope-down-dynamic-content.md)
+ [机器人控制功能示例：从机器人管理中排除 IP 范围](waf-bot-control-example-scope-down-ip.md)
+ [机器人控制功能示例：允许来自您控制的机器人的流量](waf-bot-control-example-scope-down-your-bot.md)
+ [机器人控制功能示例：启用目标检查级别](waf-bot-control-example-targeted-inspection-level.md)
+ [机器人控制功能示例：使用两个语句限制对目标检查级别的使用](waf-bot-control-example-common-and-targeted-inspection-level.md)

# 机器人控制功能示例：简单配置
<a name="waf-bot-control-example-basic"></a>

以下 JSON 列表显示了带有 AWS WAF 机器人控制托管规则组的示例保护包 (Web ACL)。请注意可见性配置，该配置会 AWS WAF 导致存储请求样本和指标以供监控之用。

```
{
  "Name": "Bot-WebACL",
  "Id": "...",
  "ARN": "...",
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "Bot-WebACL",
  "Rules": [
      {
        ...
      },
      {
         "Name": "AWS-AWSBotControl-Example",
         "Priority": 5,
         "Statement": {
            "ManagedRuleGroupStatement": {
               "VendorName": "AWS",
               "Name": "AWSManagedRulesBotControlRuleSet",
               "ManagedRuleGroupConfigs": [
                 {
                   "AWSManagedRulesBotControlRuleSet": {
                     "InspectionLevel": "COMMON"
                   }
                 }
               ],
               "RuleActionOverrides": [],
               "ExcludedRules": []
            },
            "VisibilityConfig": {
               "SampledRequestsEnabled": true,
               "CloudWatchMetricsEnabled": true,
               "MetricName": "AWS-AWSBotControl-Example"
             }
          }
      }
    ],
    "VisibilityConfig": {
      ...
    },
    "Capacity": 1496,
    "ManagedByFirewallManager": false,
    "RetrofittedByFirewallManager": false
}
```

# 机器人控制功能示例：明确允许已验证机器人
<a name="waf-bot-control-example-allow-verified-bots"></a>

AWS WAF Bot Control 不会阻止已知是常见且可验证的机器人。 AWS 当机器人控制功能将 Web 请求识别为来自已验证机器人时，它会添加一个命名该机器人的标签和一个表明它是已验证机器人的标签。机器人控制功能不会添加任何其他标签，例如信号标签，以防止已知良好的机器人被阻止。

您可能还有其他 AWS WAF 规则可以屏蔽经过验证的机器人。如果要确保允许已验证机器人，请根据机器人控制功能标签添加自定义规则以允许使用它们。您的新规则必须在机器人控制功能托管规则组之后运行，这样标签才能与之匹配。

以下规则明确允许已验证机器人。

```
{
    "Name": "match_rule",
    "Statement": {
      "LabelMatchStatement": {
        "Scope": "LABEL",
        "Key": "awswaf:managed:aws:bot-control:bot:verified"
      }
    },
    "RuleLabels": [],
    "Action": {
      "Allow": {}
    }
}
```

# 机器人控制功能示例：阻止已验证机器人
<a name="waf-bot-control-example-block-verified-bots"></a>

要阻止已验证机器人，您必须添加一条规则来阻止它们，该规则在 AWS WAF 机器人控制功能托管规则组之后运行。为此，请确定要阻止的机器人名称，然后使用标签匹配语句来识别和阻止它们。如果您只想阻止所有已验证机器人，您可以省略与 `bot:name:` 标签的匹配项。

以下规则仅阻止 `bingbot` 已验证机器人。此规则必须在机器人控制功能托管规则组之后运行。

```
{
    "Name": "match_rule",
    "Statement": {
      "AndStatement": {
        "Statements": [
          {
            "LabelMatchStatement": {
              "Scope": "LABEL",
              "Key": "awswaf:managed:aws:bot-control:bot:name:bingbot"
            }
          },
          {
            "LabelMatchStatement": {
              "Scope": "LABEL",
              "Key": "awswaf:managed:aws:bot-control:bot:verified"
            }
          }
        ]
      }
    },
    "RuleLabels": [],
    "Action": {
      "Block": {}
    }
  }
```

以下规则会阻止所有已验证机器人。

```
{
    "Name": "match_rule",
    "Statement": {
      "LabelMatchStatement": {
        "Scope": "LABEL",
        "Key": "awswaf:managed:aws:bot-control:bot:verified"
      }
    },
    "RuleLabels": [],
    "Action": {
      "Block": {}
    }
}
```

# 机器人控制功能示例：允许特定的被阻止机器人
<a name="waf-bot-control-example-allow-blocked-bot"></a>

机器人可能会被多条机器人控制功能规则阻止。对每条阻止规则执行以下步骤。

如果 AWS WAF 机器人控制规则正在屏蔽您不想屏蔽的机器人，请执行以下操作：

1. 通过查看日志，识别阻止机器人的机器人控制功能规则。将在日志中名称以 `terminatingRule` 开头的字段中指定阻止规则。有关保护包（web ACL）日志的更多信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。请注意规则添加到请求中的标签。

1. 在您的保护包（web ACL）中，覆盖阻止规则的操作以计数。要在控制台中执行此操作，请编辑保护包（web ACL）中的规则组规则，然后为该规则选择 Count 规则操作覆盖。这样可以确保机器人不会被规则阻止，但规则仍会将其标签应用于匹配的请求。

1. 在保护包（web ACL）中，在机器人控制功能托管规则组后添加标签匹配规则。将规则配置为与被覆盖的规则的标签相匹配，并阻止除您不想阻止的机器人之外的所有匹配请求。

   现在，您的保护包（web ACL）已配置完毕，因此您要允许的机器人不再被通过日志识别的阻止规则所阻止。

再次检查流量和您的日志，确保机器人被允许通过。如果不是，请再次执行上述步骤。

例如，假设您需要阻止除 `pingdom` 以外的所有监控机器人。在这种情况下，您可以将 `CategoryMonitoring` 规则覆盖为计数，然后编写一条规则来阻止除带有机器人名称标签 `pingdom` 的机器人之外的所有监控机器人。

以下规则使用机器人控制功能托管规则组，但会将 `CategoryMonitoring` 规则操作覆盖为计数。类别监控规则像往常一样将其标签应用于匹配的请求，但仅对它们进行计数，而不是执行通常的阻止操作。

```
{
  "Name": "AWS-AWSBotControl-Example",
  "Priority": 5,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesBotControlRuleSet",
      "ManagedRuleGroupConfigs": [
        {
          "AWSManagedRulesBotControlRuleSet": {
            "InspectionLevel": "COMMON"
          }
        }
      ],
	  "RuleActionOverrides": [
        {
          "ActionToUse": {
            "Count": {}
          },
          "Name": "CategoryMonitoring"
        }
      ],
      "ExcludedRules": []
    }
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSBotControl-Example"
  }
}
```

以下规则与前面的 `CategoryMonitoring` 规则添加到匹配的 web 请求中的类别监控标签相匹配。在类别监控请求中，该规则会阻止所有请求，除带有机器人名称 `pingdom` 标签的请求外。

以下规则必须在保护包（web ACL）处理顺序中前面的机器人控制功能托管规则组之后运行。

```
{
      "Name": "match_rule",
      "Priority": 10,
      "Statement": {
        "AndStatement": {
          "Statements": [
            {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:bot-control:bot:category:monitoring"
              }
            },
            {
              "NotStatement": {
                "Statement": {
                  "LabelMatchStatement": {
                    "Scope": "LABEL",
                    "Key": "awswaf:managed:aws:bot-control:bot:name:pingdom"
                  }
                }
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "match_rule"
      }
}
```

# 机器人控制功能示例：为被阻止的用户代理创建例外
<a name="waf-bot-control-example-user-agent-exception"></a>

如果来自某些非浏览器用户代理的流量被错误屏蔽，则可以通过将违规的 Bot Control 规则设置为 Coun AWS WAF t，然后将该规则的标签与您的例外标准结合起来`SignalNonBrowserUserAgent`来创建例外。

**注意**  
移动应用程序通常具有非浏览器用户代理，`SignalNonBrowserUserAgent` 规则在默认情况下会阻止这些代理。

以下规则使用机器人控制功能托管规则组，但会将 `SignalNonBrowserUserAgent` 规则操作覆盖为计数。信号规则像往常一样将其标签应用于匹配的请求，但仅对它们进行计数，而不是执行通常的阻塞操作。

```
{
  "Name": "AWS-AWSBotControl-Example",
  "Priority": 5,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesBotControlRuleSet",
      "ManagedRuleGroupConfigs": [
        {
          "AWSManagedRulesBotControlRuleSet": {
            "InspectionLevel": "COMMON"
          }
        }
      ],
	  "RuleActionOverrides": [
        {
          "ActionToUse": {
            "Count": {}
          },
          "Name": "SignalNonBrowserUserAgent"
        }
      ],
      "ExcludedRules": []
    }
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AWS-AWSBotControl-Example"
  }
}
```

以下规则与机器人控制功能 `SignalNonBrowserUserAgent` 规则添加到其匹配的 web 请求中的信号标签相匹配。在信号请求中，除了那些拥有我们想要允许的用户代理的请求外，该规则会阻止所有请求。

以下规则必须在保护包（web ACL）处理顺序中前面的机器人控制功能托管规则组之后运行。

```
{
    "Name": "match_rule",
    "Statement": {
      "AndStatement": {
        "Statements": [
          {
            "LabelMatchStatement": {
              "Scope": "LABEL",
              "Key": "awswaf:managed:aws:bot-control:signal:non_browser_user_agent"
            }
          },
          {
            "NotStatement": {
              "Statement": {
                "ByteMatchStatement": {
                  "FieldToMatch": {
                    "SingleHeader": {
                      "Name": "user-agent"
                    }
                  },
                  "PositionalConstraint": "EXACTLY",
                  "SearchString": "PostmanRuntime/7.29.2",
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ]
                }
              }
            }
          }
        ]
      }
    },
    "RuleLabels": [],
    "Action": {
      "Block": {}
    },
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "match_rule"
    }
}
```

# 机器人控制功能示例：仅对登录页面使用机器人控制功能
<a name="waf-bot-control-example-scope-down-login"></a>

以下示例使用 scope-down 语句仅对进入网站登录页面的流量应用 AWS WAF Bot Control，该页面由 URI 路径标识。`login`登录页面的 URI 路径可能与示例不同，具体取决于您的应用程序和环境。

```
{
  "Name": "AWS-AWSBotControl-Example",
  "Priority": 5,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesBotControlRuleSet",
	  "ManagedRuleGroupConfigs": [
        {
          "AWSManagedRulesBotControlRuleSet": {
            "InspectionLevel": "COMMON"
          }
        }
      ],
      "RuleActionOverrides": [],
      "ExcludedRules": []
    },
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "AWS-AWSBotControl-Example"
    },
    "ScopeDownStatement": {
      "ByteMatchStatement": {
        "SearchString": "login",
        "FieldToMatch": {
          "UriPath": {}
        },
        "TextTransformations": [
          {
            "Priority": 0,
            "Type": "NONE"
          }
        ],
        "PositionalConstraint": "CONTAINS"
      }
    }
  }
}
```

# 机器人控制功能示例：仅对动态内容使用机器人控制功能
<a name="waf-bot-control-example-scope-down-dynamic-content"></a>

此示例使用 scope-down 语句将 AWS WAF 机器人控制仅应用于动态内容。

范围缩小语句通过否定正则表达式模式集的匹配结果来排除静态内容：
+ 正则表达式模式集配置为匹配*静态内容*的扩展。例如，正则表达式模式集规范可能是 `(?i)\.(jpe?g|gif|png|svg|ico|css|js|woff2?)$`。有关正则表达式模式集和语句的信息，请参阅 [正则表达式模式集匹配规则语句](waf-rule-statement-type-regex-pattern-set-match.md)。
+ 在范围缩小语句中，我们通过在 `NOT` 语句内部嵌套正则表达式模式集语句来排除匹配的静态内容。有关 `NOT` 语句的信息，请参阅 [NOT 规则语句](waf-rule-statement-type-not.md)。

```
{
  "Name": "AWS-AWSBotControl-Example",
  "Priority": 5,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesBotControlRuleSet",
	  "ManagedRuleGroupConfigs": [
        {
          "AWSManagedRulesBotControlRuleSet": {
            "InspectionLevel": "COMMON"
          }
        }
      ],
      "RuleActionOverrides": [],
      "ExcludedRules": []
    },
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "AWS-AWSBotControl-Example"
    },
    "ScopeDownStatement": {
      "NotStatement": {
        "Statement": {
          "RegexPatternSetReferenceStatement": {
            "ARN": "arn:aws:wafv2:us-east-1:123456789:regional/regexpatternset/excludeset/00000000-0000-0000-0000-000000000000",
            "FieldToMatch": {
              "UriPath": {}
            },
            "TextTransformations": [
              {
                "Priority": 0,
                "Type": "NONE"
              }
            ]
          }
        }
      }
    }
  }
}
```

# 机器人控制功能示例：从机器人管理中排除 IP 范围
<a name="waf-bot-control-example-scope-down-ip"></a>

如果您想从 AWS WAF Bot Control 管理中排除一部分 Web 流量，并且可以使用规则语句识别该子集，则可以通过在 Bot Control 托管的规则组语句中添加范围缩小语句来将其排除。

以下规则对所有 Web 流量执行常规的机器人控制功能机器人管理，除来自特定 IP 地址范围的 Web 请求外。

```
{
  "Name": "AWS-AWSBotControl-Example",
  "Priority": 5,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesBotControlRuleSet",
      "ManagedRuleGroupConfigs": [
        {
          "AWSManagedRulesBotControlRuleSet": {
            "InspectionLevel": "COMMON"
          }
        }
      ],
      "RuleActionOverrides": [],
      "ExcludedRules": []
    },
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "AWS-AWSBotControl-Example"
    },
    "ScopeDownStatement": {
      "NotStatement": {
        "Statement": {
          "IPSetReferenceStatement": {
            "ARN": "arn:aws:wafv2:us-east-1:123456789:regional/ipset/friendlyips/00000000-0000-0000-0000-000000000000"
          }
        }
      }
    }
  }
}
```

# 机器人控制功能示例：允许来自您控制的机器人的流量
<a name="waf-bot-control-example-scope-down-your-bot"></a>

您可以配置一些站点监控机器人和自定义机器人来发送自定义标头。如果要允许来自这些类型的机器人的流量，可以将其配置为在标头中添加共享密钥。然后，您可以通过向 AWS WAF Bot Control 托管规则组语句添加范围缩小语句来排除带有标题的消息。

以下示例规则将带有密钥标头的流量排除在机器人控制功能检查之外。

```
{
  "Name": "AWS-AWSBotControl-Example",
  "Priority": 5,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesBotControlRuleSet",
      "ManagedRuleGroupConfigs": [
        {
          "AWSManagedRulesBotControlRuleSet": {
            "InspectionLevel": "COMMON"
          }
        }
      ],
      "RuleActionOverrides": [],
      "ExcludedRules": []
    },
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "AWS-AWSBotControl-Example"
    },
    "ScopeDownStatement": {
      "NotStatement": {
        "Statement": {
          "ByteMatchStatement": {
            "SearchString": "YSBzZWNyZXQ=",
            "FieldToMatch": {
              "SingleHeader": {
                "Name": "x-bypass-secret"
              }
            },
            "TextTransformations": [
              {
                "Priority": 0,
                "Type": "NONE"
              }
            ],
            "PositionalConstraint": "EXACTLY"
          }
        }
      }
    }
  }
}
```

# 机器人控制功能示例：启用目标检查级别
<a name="waf-bot-control-example-targeted-inspection-level"></a>

要获得增强的保护级别，您可以在 AWS WAF Bot Control 托管规则组中启用目标检查级别。

在以下示例中，启用了机器学习功能。可以通过将 `EnableMachineLearning` 设置为 `false` 来选择退出此行为。

```
{
  "Name": "AWS-AWSBotControl-Example",
  "Priority": 5,
  "Statement": {
    "ManagedRuleGroupStatement": {
      "VendorName": "AWS",
      "Name": "AWSManagedRulesBotControlRuleSet",
      "ManagedRuleGroupConfigs": [
        {
          "AWSManagedRulesBotControlRuleSet": {
            "InspectionLevel": "TARGETED",
            "EnableMachineLearning": true
          }
        }
      ],
      "RuleActionOverrides": [],
      "ExcludedRules": []
    },
    "VisibilityConfig": {
      "SampledRequestsEnabled": true,
      "CloudWatchMetricsEnabled": true,
      "MetricName": "AWS-AWSBotControl-Example"
    }
  }
}
```

# 机器人控制功能示例：使用两个语句限制对目标检查级别的使用
<a name="waf-bot-control-example-common-and-targeted-inspection-level"></a>

作为成本优化，您可以在保护包（Web ACL）中使用两个 AWS WAF Bot Control 托管规则组语句，它们具有不同的检查级别和范围。例如，可以将目标检查级别声明的范围仅限定于更敏感的应用程序端点。

以下示例中的两个语句具有互斥的作用域。如果没有此配置，一个请求可能会导致机器人控制功能评估进行两次计费。

**注意**  
控制台的可视化编辑器不支持引用 `AWSManagedRulesBotControlRuleSet` 的多个语句。请改用 JSON 编辑器。

```
{
  "Name": "Bot-WebACL",
  "Id": "...",
  "ARN": "...",
  "DefaultAction": {
    "Allow": {}
  },
  "Description": "Bot-WebACL",
  "Rules": [
      {
        ...
      },
      {
       "Name": "AWS-AWSBotControl-Common",
       "Priority": 5,
       "Statement": {
          "ManagedRuleGroupStatement": {
             "VendorName": "AWS",
             "Name": "AWSManagedRulesBotControlRuleSet",
             "ManagedRuleGroupConfigs": [
               {
                 "AWSManagedRulesBotControlRuleSet": {
                   "InspectionLevel": "COMMON"
                 }
               }
             ],
             "RuleActionOverrides": [],
             "ExcludedRules": []
          },
          "VisibilityConfig": {
             "SampledRequestsEnabled": true,
             "CloudWatchMetricsEnabled": true,
             "MetricName": "AWS-AWSBotControl-Common"
           },
           "ScopeDownStatement": {
              "NotStatement": {
                "Statement": {
                  "ByteMatchStatement": {
                    "FieldToMatch": {
                      "UriPath": {}
                    },
                    "PositionalConstraint": "STARTS_WITH",
                    "SearchString": "/sensitive-endpoint",
                    "TextTransformations": [
                      {
                        "Type": "NONE",
                        "Priority": 0
                      }
                    ]
                  }
                }
              }
            }
        }
      },
      {
       "Name": "AWS-AWSBotControl-Targeted",
       "Priority": 6,
       "Statement": {
          "ManagedRuleGroupStatement": {
             "VendorName": "AWS",
             "Name": "AWSManagedRulesBotControlRuleSet",
             "ManagedRuleGroupConfigs": [
               {
                 "AWSManagedRulesBotControlRuleSet": {
                   "InspectionLevel": "TARGETED",
                   "EnableMachineLearning": true
                 }
               }
             ],
             "RuleActionOverrides": [],
             "ExcludedRules": []
          },
          "VisibilityConfig": {
             "SampledRequestsEnabled": true,
             "CloudWatchMetricsEnabled": true,
             "MetricName": "AWS-AWSBotControl-Targeted"
           },
           "ScopeDownStatement": {
              "Statement": {
                "ByteMatchStatement": {
                  "FieldToMatch": {
                    "UriPath": {}
                  },
                  "PositionalConstraint": "STARTS_WITH",
                  "SearchString": "/sensitive-endpoint",
                  "TextTransformations": [
                    {
                      "Type": "NONE",
                      "Priority": 0
                    }
                  ]
                }
              }
            }
        }
      }
    ],
    "VisibilityConfig": {
      ...
    },
    "Capacity": 1496,
    "ManagedByFirewallManager": false,
    "RetrofittedByFirewallManager": false
}
```

# AWS WAF 分布式拒绝服务防护 DDo
<a name="waf-anti-ddos"></a>

AWS WAF 针对 AWS 资源中的 DDo S 攻击提供复杂且可自定义的保护。查看本节中描述的选项，然后选择满足您的安全和业务需求的反 DDo S防护级别。

您可以从以下两层 DDo S 保护中进行选择 AWS WAF：

资源级 S 保护 DDo  
标准层级在应用程序负载均衡器中运行，可通过主机上筛选以防御已知的恶意来源。您可以将保护行为配置为对潜在的 DDo S 事件做出最佳反应。  
资源级 DDo S 保护：  
+ 自动监控您的流量模式。
+ 实时更新威胁情报。
+ 防御已知的恶意来源。
**优化应用程序负载均衡器的 web ACL 请求成本**  
您必须将 web ACL 与应用程序负载均衡器关联才能启用资源级防护。如果您的 Application Load Balancer 与没有配置的 Web ACL 关联，则不会因 AWS WAF 请求而产生费用，但 AWS WAF 不会提供抽样请求或以指标形式报告应用程序负载均衡器。 CloudWatch 您可以采取以下操作，为应用程序负载均衡器启用可观测性功能：  
+ 在 `DefaultAction` 中使用带自定义请求标头的 `Block` 操作或 `Allow` 操作。有关信息，请参阅[为非阻止操作插入自定义请求标头](customizing-the-incoming-request.md)。
+ 将任何规则添加到 web ACL。有关信息，请参阅[AWS WAF 规则](waf-rules.md)。
+ 启用日志记录目标。有关信息，请参阅[为保护包（web ACL）配置日志记录](logging-management-configure.md)。
+ 将 Web ACL 与 AWS Firewall Manager 策略关联。有关信息，请参阅[为创建 AWS Firewall Manager 策略 AWS WAF](create-policy.md#creating-firewall-manager-policy-for-waf)。
AWS WAF 如果没有这些配置，将不会提供抽样请求或发布 CloudWatch 指标。

AWS 托管规则组 DDo S 保护  
通过提供高级的 DDo S 保护层`AWSManagedRulesAntiDDoSRuleSet`。托管规则组是对资源级防护层的补充，具有以下显著区别：  
+ 保护扩展到应用程序负载均衡器和 CloudFront 分发
+ 流量基准针对受保护的资源而创建，以改进对新攻击模式的检测。
+ 根据您选择的灵敏度级别激活防护行为。
+ 在可能的 DDo S 事件期间管理和标记对受保护资源的请求。
有关包含规则和功能的完整列表，请参阅 [AWS WAF 分布式拒绝服务 (DDoS) 防护规则组](aws-managed-rule-groups-anti-ddos.md)。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**Topics**
+ [应用程序负载均衡器的资源级 DDo S 保护](waf-anti-ddos-alb.md)
+ [使用 Ant DDo i-S 托管规则组进行高级 AWS WAF 反 DDo S 保护](waf-anti-ddos-advanced.md)

# 应用程序负载均衡器的资源级 DDo S 保护
<a name="waf-anti-ddos-alb"></a>

**资源级别 DDo S 保护**可为应用程序负载均衡器提供即时防御，而不会产生部署 AWS WAF 托管规则组的费用。这个标准的 Anti-DDo S 防护层使用 AWS 威胁情报和流量模式分析来保护应用程序负载均衡器。为了识别已知的恶意来源，Anti-DDo S 保护会在主机上对直接客户端 IP 地址和 X-Forwarded-For (XFF) 标头进行过滤。识别已知的恶意来源后，将通过以下两种模式之一激活保护：

**在 DDo S 下激活**是默认的保护模式，建议在大多数用例中使用。

此模式：
+ 在检测到高负载条件或潜在的 DDo S 事件时自动激活保护
+ 仅在攻击状况下对已知恶意来源的流量实施速率限制
+ 最大限度地减少常规操作期间对合法流量的影响
+ 使用 Application Load Balancer 运行状况指标和 AWS WAF 响应数据来确定何时使用保护

**始终开启**是一种可选模式，启用后将持续处于激活状态。

此模式：
+ 持续防范已知的恶意来源
+ 实时限制已知恶意来源的流量
+ 对直接连接和 IPs 在 XFF 标头中包含恶意的请求应用保护
+ 可能对合法流量产生更大影响，但能提供最高级别的安全性

被资源级 DDo S 保护阻止的请求在 CloudWatch 日志中记录为`LowReputationPacketsDropped`或`LowReputationRequestsDenied`指标。有关信息，请参阅[AWS WAF 核心指标和维度](waf-metrics.md#waf-metrics-general)。

## 在现有 WebACL 上启用标准 DDo S 保护
<a name="enabling-protection-alb"></a>

您可以在创建 Web ACL 或更新与 Application Load Balancer 关联的现有 Web ACL 时启用 DDo S 保护。

**注意**  
如果您有与 Application Load Balancer 关联的现有 Web ACL，则默认情况下会启用 Anti-DDo S 保护，**在 DDo S 模式下处于活动状态**。

**在 AWS WAF 控制台中启用 Ant DDo i-S 防护**

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

1. 在导航窗格 ACLs中选择 **Web**，然后打开与 Application Load Balancer 关联的任何 Web ACL。

1. 选择 “**关联 AWS 资源**”。

1. 在**资源级别 DDo S 保护**下，选择**编辑**。

1. 选择以下一种防护模式：
   + **在 DDo S 下处于活动状态**（推荐）-保护仅在高负载条件下开启
   + **始终开启**：针对已知的恶意来源提供全天候保护

1. 选择**保存更改**。

**注意**  
有关创建 web ACL 的信息，请参阅[在中创建保护包 (Web ACL) AWS WAF](web-acl-creating.md)。

**优化应用程序负载均衡器的 web ACL 请求成本**  
您必须将 web ACL 与应用程序负载均衡器关联才能启用资源级防护。如果您的 Application Load Balancer 与没有配置的 Web ACL 关联，则不会因 AWS WAF 请求而产生费用，但 AWS WAF 不会提供抽样请求或以指标形式报告应用程序负载均衡器。 CloudWatch 您可以采取以下操作，为应用程序负载均衡器启用可观测性功能：  
在 `DefaultAction` 中使用带自定义请求标头的 `Block` 操作或 `Allow` 操作。有关信息，请参阅[为非阻止操作插入自定义请求标头](customizing-the-incoming-request.md)。
将任何规则添加到 web ACL。有关信息，请参阅[AWS WAF 规则](waf-rules.md)。
启用日志记录目标。有关信息，请参阅[为保护包（web ACL）配置日志记录](logging-management-configure.md)。
将 Web ACL 与 AWS Firewall Manager 策略关联。有关信息，请参阅[为创建 AWS Firewall Manager 策略 AWS WAF](create-policy.md#creating-firewall-manager-policy-for-waf)。
AWS WAF 如果没有这些配置，将不会提供抽样请求或发布 CloudWatch 指标。

# 使用 Ant DDo i-S 托管规则组进行高级 AWS WAF 反 DDo S 保护
<a name="waf-anti-ddos-advanced"></a>

`AWSManagedRulesAntiDDoSRuleSet`托管规则组是中可用的最高级的反 DDo S 保护层 AWS WAF。

**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

## AWS WAF 反 DDo S 保护组件
<a name="waf-anti-ddos-components"></a>

在中实现高级防 DDo S保护的主要组件 AWS WAF 包括以下内容：

**`AWSManagedRulesAntiDDoSRuleSet`**— 检测、标记和质疑可能参与 DDo S 攻击的请求。还可在活动期间标记对受保护资源的所有请求。有关规则组规则和标签的详细信息，请参阅 [AWS WAF 分布式拒绝服务 (DDoS) 防护规则组](aws-managed-rule-groups-anti-ddos.md)。要使用此规则组，请使用托管规则组参考语句将此规则组包含在保护包（web ACL）中。有关信息，请参阅[将 Anti-DDo S 托管规则组添加到您的保护包 (Web ACL)](waf-anti-ddos-rg-using.md)。
+ **Web ACL 流量概述仪表板** — 在控制台中监控 DDo DDo S 活动和反 S 响应。有关更多信息，请参阅 [保护包的流量概述仪表板 (Web ACLs)](web-acl-dashboards.md)。
+ **日志和指标**-允许您监控流量并了解 Anti-DDo S 防护的影响。为您的保护包（Web ACL）配置日志、Amazon Security Lake 数据收集和亚马逊 CloudWatch 指标。有关这些选项的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)、[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md) 和[什么是 Amazon Security Lake](https://docs.aws.amazon.com/security-lake/latest/userguide/what-is-security-lake.html)。
+ **标签和标签匹配规则**-允许您自定义对由 Anti-DDo S 托管规则组识别的 Web 请求的处理。对于 `AWSManagedRulesAntiDDoSRuleSet` 中的任何规则，您都可以切换到计数模式，并匹配已添加的标签。有关更多信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md) 和 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。
+ **自定义请求和响应**：可以在允许的请求中添加自定义标头，也可以向被阻止的请求发送自定义响应。将标签匹配与 AWS WAF 自定义请求和响应功能配对。有关更多信息，请参阅 [自定义的 Web 请求和响应 AWS WAF](waf-custom-request-response.md)。

# 将 Anti-DDo S 托管规则组添加到您的保护包 (Web ACL)
<a name="waf-anti-ddos-rg-using"></a>

本节介绍了如何添加和配置 `AWSManagedRulesAntiDDoSRuleSet` 规则组。

要配置 Anti-DDo S 托管规则组，您需要提供的设置包括规则组对 DDo S 攻击的敏感程度，以及它对参与攻击或可能参与攻击的请求所采取的操作。此配置是对托管规则组的常规配置的补充。

有关规则组描述及规则和标签列表，请参阅 [AWS WAF 分布式拒绝服务 (DDoS) 防护规则组](aws-managed-rule-groups-anti-ddos.md)。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。有关如何将托管规则组添加到保护包（web ACL）的基本信息，请参阅 [通过控制台向保护包（web ACL）添加托管规则组](waf-using-managed-rule-group.md)。

**遵循最佳实践**  
按照中的最佳做法使用 Anti-DDo S 规则组[中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md)。

**在保护包（web ACL）中使用 `AWSManagedRulesAntiDDoSRuleSet` 规则组**

1. 将 AWS 托管规则组`AWSManagedRulesAntiDDoSRuleSet`添加到您的保护包（Web ACL）中，并在保存之前**编辑**规则组设置。
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

1. 在**规则组配置**窗格中，为 `AWSManagedRulesAntiDDoSRuleSet` 规则组提供任何自定义配置。

   1. 对于**区块敏感度级别**，指定在规则组的 DDo S `DDoSRequests` 可疑标签上匹配时您希望规则的敏感程度。敏感度越高，规则匹配的标签级别就越低：
      + 低灵敏度意味着规则匹配能力较弱，仅能识别攻击中最明显的参与者，这些参与者具有高度可疑的标签 `awswaf:managed:aws:anti-ddos:high-suspicion-ddos-request`。
      + 中等敏感度会使规则同时匹配中等和高度可疑标签。
      + 高敏感度使规则匹配所有可疑标签：低、中、高。

      此规则对涉嫌参与 DDo S 攻击的 Web 请求提供了最严格的处理。

   1. 在**启用质询**中，选择是否启用规则 `ChallengeDDoSRequests` 和 `ChallengeAllDuringEvent`，默认情况下，这些规则会将 Challenge 操作应用于匹配的请求。

      这些规则提供了请求处理，旨在允许合法用户继续处理其请求，同时阻止 DDo S 攻击的参与者。您可以将相关操作设置覆盖为 Allow 或 Count，也可以完全禁用。

      如果要启用这些规则，请提供所需的任何其他配置：
      + 在**质询敏感度级别**中，指定您希望 `ChallengeDDoSRequests` 规则达到的敏感程度。

        敏感度越高，规则匹配的标签级别就越低：
        + 低灵敏度意味着规则匹配能力较弱，仅能识别攻击中最明显的参与者，这些参与者具有高度可疑的标签 `awswaf:managed:aws:anti-ddos:high-suspicion-ddos-request`。
        + 中等敏感度会使规则同时匹配中等和高度可疑标签。
        + 高敏感度使规则匹配所有可疑标签：低、中、高。
      + 对于**豁免 URI 正则表达式**，请提供与无法处理静默浏览器挑战的 Web 请求相匹配 URIs 的正则表达式。该Challenge操作将有效地阻止缺少挑战令牌的请求，除非他们能够处理静默浏览器挑战。 URIs 

        仅预期接收 HTML 内容的客户端才能正确处理 Challenge 操作。有关操作工作原理的更多信息，请参阅 [CAPTCHA 和 Challenge 操作行为](waf-captcha-and-challenge-actions.md)。

        查看默认的正则表达式，并根据需要对其进行更新。这些规则使用指定的正则表达式来识别无法处理Challenge操作的请求 URIs ，并阻止规则发送回质询。仅使用规则 `DDoSRequests` 的规则组方可通过此方式阻止排除的请求。

        控制台中提供的默认表达式包含大多数使用案例，但您应根据自己的应用程序对其进行审查和调整。

        AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

1. 为规则组提供所需的任何其他配置，并保存规则。
**注意**  
AWS 建议不要在此托管规则组中使用范围缩小语句。scope-down 语句限制了规则组观察到的请求，因此可能导致流量基线不准确并减少 DDo S 事件检测。范围缩小语句选项适用于所有托管规则组语句，但不应用于此语句。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

1. 在 “**设置规则优先级**” 页面中，将新的反 DDo S 托管规则组规则向上移动，使其仅在您拥有的任何Allow操作规则之后和任何其他规则之前运行。这使规则组能够跟踪最多的流量以进行反 DDo S 防护。

1. 保存对保护包（web ACL）的更改。

在为生产流量部署反 DDo S 实现之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。有关指导，请参阅以下部分。

# 测试和部署 Anti-DDo S
<a name="waf-anti-ddos-deploying"></a>

在部署 AWS WAF 分布式拒绝服务 (DDoS) 防护功能之前，您需要配置和测试该功能。本节提供配置和测试的一般性指导，但您选择遵循的具体步骤将取决于您的需求、资源和收到的 web 请求。

此信息是对 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md) 中提供的有关测试和调整的一般信息的补充。

**注意**  
AWS 托管规则旨在保护您免受常见 Web 威胁的侵害。根据文档使用 AWS 托管规则组时，可以为您的应用程序增加另一层安全保护。但是， AWS 托管规则规则组并不是用来取代您的安全职责，后者由您选择的 AWS 资源决定。请参阅[分担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)，确保您的资源 AWS 得到适当保护。

**生产流量风险**  
在试运行或测试环境中测试和调整您的反 DDo S实现，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。

本指南适用于一般了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组的用户。这些主题将在本指南的前面章节中介绍。

**配置和测试 AWS WAF 分布式拒绝服务 (DDoS) 防护实现**

首先在测试环境中执行这些步骤，然后在生产环境中执行这些步骤。

1. 

**在计数模式下添加 AWS WAF 分布式拒绝服务 (DDoS) 防护托管规则组**
**注意**  
使用此托管规则组时，您需要额外付费。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

   将 AWS 托管规则组`AWSManagedRulesAntiDDoSRuleSet`添加到新的或现有的保护包 (Web ACL) 中，并对其进行配置，使其不会改变当前保护包 (Web ACL) 的行为。有关此规则组的规则和标签的详细信息，请参阅 [AWS WAF 分布式拒绝服务 (DDoS) 防护规则组](aws-managed-rule-groups-anti-ddos.md)。
   + 添加托管规则组时，对其进行编辑并执行以下操作：
     + 在**规则组配置**窗格中，提供对 Web 流量执行反 DDo S 活动所需的详细信息。有关更多信息，请参阅 [将 Anti-DDo S 托管规则组添加到您的保护包 (Web ACL)](waf-anti-ddos-rg-using.md)。
     + 在**规则**窗格中，打开**覆盖所有规则操作**下拉列表并选择 **Count**。使用此配置， AWS WAF 可以根据规则组中的所有规则评估请求，并仅计算结果的匹配项，同时仍将标签添加到请求中。有关更多信息，请参阅 [覆盖规则组的规则操作](web-acl-rule-group-settings.md#web-acl-rule-group-rule-action-override)。

       使用此替换，您可以监视 Anti-DDo S 托管规则的潜在影响，以确定是否要进行修改，例如扩展无法处理静默浏览器挑战 URIs 的正则表达式。
   + 定位规则组，以便在任何允许流量的规则之后尽早对规则组进行评估。规则按数字优先级的升序顺序进行评估。控制台将按规则列表的顺序为您执行操作，从列表顶部开始。有关更多信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

1. 

**为保护包（web ACL）启用日志记录和指标**

   根据需要，为保护包（Web ACL）配置日志、Amazon Security Lake 数据收集、请求采样和亚马逊 CloudWatch 指标。您可以使用这些可见性工具来监控 Anti-DDo S 托管规则组与您的流量的交互情况。
   + 有关配置和使用日志记录的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。
   + 有关 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)。
   + 有关 Amazon CloudWatch 指标的信息，请参阅[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。
   + 有关 web 请求采样的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

1. 

**将保护包（web ACL）与资源关联**

   如果保护包（web ACL）尚未与测试资源关联，请将其关联。有关信息，请参阅[将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

1. 

**监控流量和 Anti-DDo S 规则匹配情况**

   确保您的正常流量畅通，并且 Anti-DDo S 托管规则组规则正在为匹配的 Web 请求添加标签。您可以在日志中看到标签，也可以在 Amazon 指标中查看 Anti-DDo S 和标签 CloudWatch 指标。在日志中，您在规则组中覆盖计数的规则会显示在 `ruleGroupList` 中，`action` 设置为计数，`overriddenAction` 表示您覆盖的已配置规则操作。

1. 

**自定义 Ant DDo i-S Web 请求处理**

   根据需要，添加您自己的明确允许或阻止请求的规则，以更改 Anti-DDo S 规则处理请求的方式。

   例如，您可以使用 Anti-DDo S 标签来允许或阻止请求或自定义请求处理。您可以在 Anti-DDo S 托管规则组之后添加标签匹配规则，以筛选要应用的处理的已标记请求。测试后，将相关的 Anti-DDo S 规则保持在计数模式，并在自定义规则中维护请求处理决策。

1. 

**移除测试规则并配置 Anti-DDo S 设置**

   查看您的测试结果，以确定您希望将哪些 Anti-DDo S 规则保留在计数模式下仅用于监控。对于任何需要启用主动保护的规则，请在保护包（web ACL）规则组配置中禁用计数模式，以便这些规则能够执行其配置的操作。完成这些设置后，请移除所有临时测试标签匹配规则，同时保留为生产用途创建的所有自定义规则。有关其他 Ant DDo i-S 配置注意事项，请参阅[中智能缓解威胁的最佳实践 AWS WAF](waf-managed-protections-best-practices.md)。

1. 

**监控和调整**

   为确保 Web 请求得到您想要的处理，请在启用您打算使用的 Anti-DDo S 功能后密切监控您的流量。根据需要调整行为，使用规则组上的规则计数覆盖和您自己的规则。

# Anti-DDo S 的最佳实践
<a name="waf-anti-ddos-best-practices"></a>
+ **在正常流量期间启用防护**：这允许防护在响应攻击之前建立基准流量模式。在未遭遇攻击时添加防护，并预留建立基准的时间。
+ **定期监控指标**-查看 CloudWatch 指标以了解流量模式和保护效果。
+ **考虑使用关键应用程序的主动模式**：虽然大多数使用案例都建议使用被动模式，但对于需要持续防范已知威胁的应用程序，可以考虑使用主动模式。
+ **在暂存环境中进行测试**：在生产环境中启用防护之前，请在暂存环境中测试和调整设置，以了解对合法流量的影响。

# 中的客户端应用程序集成 AWS WAF
<a name="waf-application-integration"></a>

本节介绍如何将智能威胁集成 APIs 和 JavaScript 验证码集成 API 与您的 AWS WAF 功能配合使用。

使用 AWS WAF 客户端应用程序集成 APIs 将客户端保护与 AWS 服务器端保护包 (Web ACL) 保护相结合，以帮助验证向受保护资源发送 Web 请求的客户端应用程序是否为目标客户端，以及您的最终用户是否为人类。

使用客户端集成来管理静默浏览器质询和验证码拼图，获取带有成功浏览器和最终用户响应证明的令牌，并将这些令牌包含在对受保护端点的请求中。有关 AWS WAF 代币的一般信息，请参阅[代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。

将您的客户端集成与保护包（web ACL）保护相结合，后者需要有效的令牌才能访问您的资源。您可以在 [智能威胁集成和 AWS 托管规则](waf-application-integration-with-AMRs.md) 使用检查和监控挑战令牌的规则组（如下一节中列出的规则组），也可以使用 CAPTCHA 和 Challenge 规则操作进行检查，如 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md) 中所述。

AWS WAF 为应用程序提供两个集成级别，为移动 JavaScript 应用程序提供一个集成级别：
+ **智能威胁集成**-验证客户端应用程序并提供 AWS 令牌获取和管理。这与 AWS WAF Challenge规则操作提供的功能类似。此功能将您的客户端应用程序与 `AWSManagedRulesACFPRuleSet` 托管规则组、`AWSManagedRulesATPRuleSet` 托管规则组和 `AWSManagedRulesBotControlRuleSet` 托管规则组的目标保护级别完全集成。

  智能威胁集成 APIs 使用 AWS WAF 静默浏览器质询来帮助确保只有在客户端获取有效令牌后才允许对受保护资源进行登录尝试和其他调用。 APIs 管理您的客户端应用程序会话的令牌授权，并收集有关客户端的信息，以帮助确定它是由机器人操作还是由人类操作。
**注意**  
这适用于安卓 JavaScript 和 iOS 移动应用程序，也适用于这些应用程序。
+ **验证码集成**：使用您在应用程序中管理的自定义验证码拼图验证最终用户。这与 AWS WAF CAPTCHA规则动作提供的功能类似，但增加了对拼图位置和行为的控制。

  这种集成利用 JavaScript 智能威胁集成来运行静默挑战，并为客户的页面提供 AWS WAF 令牌。
**注意**  
这适用于 JavaScript 应用程序。

**Topics**
+ [智能威胁集成和 AWS 托管规则](waf-application-integration-with-AMRs.md)
+ [访问 AWS WAF 客户端应用程序集成 APIs](waf-application-integration-location-in-console.md)
+ [AWS WAF JavaScript 集成](waf-javascript-api.md)
+ [AWS WAF 移动应用程序集成](waf-mobile-sdk.md)

# 智能威胁集成和 AWS 托管规则
<a name="waf-application-integration-with-AMRs"></a>

本节介绍智能威胁集成如何 APIs 与 AWS 托管规则组配合使用。

智能威胁集成 APIs 与使用智能威胁规则组的保护包 (Web ACLs) 配合使用，以启用这些高级托管规则组的全部功能。
+ AWS WAF 欺诈控制账户创建欺诈预防 (ACFP) 托管规则组`AWSManagedRulesACFPRuleSet`。

  账户创建欺诈是一种在线非法活动，攻击者在您的应用程序中创建无效账户，其目的包括获得注册奖金或冒充他人。ACFP 托管规则组提供规则，用于阻止、标记和管理可能属于欺诈账户创建尝试的请求。 APIs 启用经过微调的客户端浏览器验证和人机交互信息，ACFP 规则使用这些信息将有效的客户端流量与恶意流量区分开来。

  有关更多信息，请参阅[AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)和[AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)](waf-acfp.md)。
+ AWS WAF 防欺诈控制账户接管 (ATP) 管理的规则组`AWSManagedRulesATPRuleSet`。

  账户盗用是一种在线非法活动，在这种活动中，攻击者未经授权即可访问个人的账户。ATP 托管规则组提供规则，用于阻止、标记和管理可能属于恶意账户盗用尝试的请求。 APIs 启用经过微调的客户端验证和行为聚合，ATP 规则使用这些验证和行为聚合将有效的客户端流量与恶意流量区分开来。

  有关更多信息，请参阅[AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)和[AWS WAF 防欺诈控制账户接管 (ATP)](waf-atp.md)。
+  AWS WAF Bot Control 托管规则组的目标保护级别`AWSManagedRulesBotControlRuleSet`。

  机器人从自我识别和有用的机器人（例如大多数搜索引擎和爬虫）到针对您的网站运行且无法自我识别的恶意机器人。机器人控制功能托管规则组提供用于监控、标记和管理 web 流量中的机器人活动的规则。当您使用此规则组的定向保护级别时，目标规则会使用其 APIs提供的客户端会话信息来更好地检测恶意机器人。

  有关更多信息，请参阅[AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)和[AWS WAF 机器人控制](waf-bot-control.md)。

要将其中一个托管规则组添加到保护包（web ACL），请参阅步骤 [将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)、[将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md) 和 [将 AWS WAF Bot Control 托管规则组添加到 Web ACL](waf-bot-control-rg-using.md)。

**注意**  
托管规则组目前不会阻止缺少令牌的请求。要阻止缺少令牌的请求，请在实现应用程序集成后 APIs，按照中的指南进行操作[阻止没有有效 AWS WAF 令牌的请求](waf-tokens-block-missing-tokens.md)。

# 访问 AWS WAF 客户端应用程序集成 APIs
<a name="waf-application-integration-location-in-console"></a>

本节说明了在 AWS WAF 控制台 APIs 中哪里可以找到应用程序集成。

该 JavaScript 集成 APIs 已正式推出，您可以将它们用于浏览器和其他执行设备 JavaScript。

AWS WAF SDKs 为 Android 和 iOS 移动应用程序提供定制智能威胁集成。
+ 对于安卓手机和电视应用程序， SDKs 适用于安卓 API 版本 23（安卓版本 6）及更高版本。有关 Android 版本的信息，请参阅[软件开发工具包平台发行说明](https://developer.android.com/tools/releases/platforms)。
+ 对于 iOS 移动应用程序，适用于 iOS 版本 13 及更高版本。 SDKs 有关 iOS 版本的信息，请参阅 [iOS 和 iPadOS 发行说明](https://developer.apple.com/documentation/ios-ipados-release-notes)。
+ 对于 Apple TV 应用程序，适用于 tvOS 版本 14 或更高版本。 SDKs 有关 tvOS 版本的信息，请参阅 [tvOS 发行说明](https://developer.apple.com/documentation/tvos-release-notes)。

**APIs 通过控制台访问集成**

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

1. 在导航窗格中选择 **应用程序集成**，然后选择您感兴趣的选项卡。
   + **智能威胁集成**可用于 JavaScript 和移动应用程序。

     该选项卡包含以下内容：
     + 为智能威胁应用程序集成启用的保护包 (Web ACLs) 列表。该列表包括使用 `AWSManagedRulesACFPRuleSet` 托管规则组、`AWSManagedRulesATPRuleSet` 托管规则组或 `AWSManagedRulesBotControlRuleSet` 托管规则组的目标保护级别的每个保护包（web ACL）。实施智能威胁时 APIs，您可以使用要集成的保护包 (Web ACL) 的集成 URL。
     +  APIs 你有权访问的。 JavaScript APIs 它们始终可用。要访问手机 SDKs，请通过联系方式联系支持[人员 AWS](https://aws.amazon.com/contact-us)。
   + **CAPTCHA 集成**可用于应用程序。 JavaScript 

     该选项卡包含以下内容：
     + 在您的集成中使用的集成 URL。
     + 您为客户端应用程序域创建的 API 密钥。使用验证码API需要加密的API密钥，该密钥使客户有权从其域名访问 AWS WAF 验证码。对于您与之集成的每个客户端，请使用包含该客户端域名的 API 密钥。有关这些要求以及有关管理这些密钥的更多信息，请参阅 [管理 JS CAPTCHA API 的 API 密钥](waf-js-captcha-api-key.md)。

# AWS WAF JavaScript 集成
<a name="waf-javascript-api"></a>

本节介绍如何使用集 AWS WAF JavaScript 成。

您可以使用该 JavaScript 集成 APIs 在浏览器和其他执行设备中实现 AWS WAF 应用程序集成。 JavaScript

只有当浏览器访问 HTTPS 端点时，才能运行验证码拼图和静默质询。浏览器客户端必须在安全环境中运行才能获取令牌。
+ 智能威胁 APIs 允许您通过静默的客户端浏览器挑战来管理令牌授权，并在发送到受保护资源的请求中包含令牌。
+ CAPTCHA 集成 API 增加了智能威胁 APIs，允许您自定义验证码拼图在客户端应用程序中的位置和特征。在最终用户成功完成验证码拼图后，此 API 利用智能威胁获取 AWS WAF 令牌 APIs 以在页面中使用。

通过使用这些集成，可以确保客户端的远程过程调用包含有效的令牌。在应用程序页面上进行 APIs 这些集成后，您可以在保护包 (Web ACL) 中实施缓解规则，例如阻止不包含有效令牌的请求。您还可以通过在规则中使用 Challenge 或 CAPTCHA 操作来实施强制使用客户端应用程序获取的令牌的规则。

**智能威胁的实施示例 APIs**  
以下列表显示了 Web 应用程序页面 APIs 中智能威胁的典型实现的基本组件。

```
<head>
<script type="text/javascript" src="protection pack (web ACL) integration URL/challenge.js" defer></script>
</head>
<script>
const login_response = await AwsWafIntegration.fetch(login_url, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: login_body
  });
</script>
```

**验证码 AP JavaScript I 的实现示例**  
验证码集成 API 可让您自定义最终用户的验证码拼图体验。CAPTCHA 集成利用 JavaScript 智能威胁集成进行浏览器验证和令牌管理，并添加了配置和呈现 CAPTCHA 拼图的功能。

以下列表显示了 Web 应用程序页面中典型的 CAPTCHA JavaScript API 实现的基本组件。

```
<head>
    <script type="text/javascript" src="<Integration URL>/jsapi.js" defer></script>
</head>

<script type="text/javascript">
    function showMyCaptcha() {
        var container = document.querySelector("#my-captcha-container");
        
        AwsWafCaptcha.renderCaptcha(container, {
            apiKey: "...API key goes here...",
            onSuccess: captchaExampleSuccessFunction,
            onError: captchaExampleErrorFunction,
            ...other configuration parameters as needed...
        });
    }
    
    function captchaExampleSuccessFunction(wafToken) {
        // Use WAF token to access protected resources
        AwsWafIntegration.fetch("...WAF-protected URL...", {
            method: "POST",
            ...
        });
    }
    
    function captchaExampleErrorFunction(error) {
        /* Do something with the error */
    }
</script>

<div id="my-captcha-container">
    <!-- The contents of this container will be replaced by the captcha widget -->
</div>
```

**Topics**
+ [提供用于令牌的域名](waf-js-challenge-api-set-token-domain.md)
+ [将 JavaScript API 与内容安全策略配合使用](waf-javascript-api-csp.md)
+ [使用智能威胁 JavaScript API](waf-js-challenge-api.md)
+ [使用验证码 API JavaScript](waf-js-captcha-api.md)

# 提供用于令牌的域名
<a name="waf-js-challenge-api-set-token-domain"></a>

本节介绍了如何为令牌提供其他域。

默认情况下，在 AWS WAF 创建令牌时，它使用与保护包关联的资源的主机域 (Web ACL)。您可以为为 AWS WAF 创建的令牌提供其他域名 JavaScript APIs。为此，请使用一个或多个令牌域配置全局变量 `window.awsWafCookieDomainList`。

 AWS WAF 创建令牌时，它会使用与保护包 (Web ACL) 关联的资源的域`window.awsWafCookieDomainList`和主机域组合中最合适、最短的域。

设置示例：

```
window.awsWafCookieDomainList = ['.aws.amazon.com']
```

```
window.awsWafCookieDomainList = ['.aws.amazon.com', 'abc.aws.amazon.com']
```

您不能在此列表中使用公共后缀。例如，您不能在列表中使用 `gov.au` 或 `co.uk` 作为令牌域。

您在此列表中指定的域名必须与您的其他域名和域名配置兼容：
+ 根据受保护的主机域和 AWS WAF 为保护包配置的令牌域列表（Web ACL），这些域必须是可以接受的域。有关更多信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。
+ 如果您使用 CAP JavaScript TCHA API，则您的 CAPTCHA API 密钥中至少有一个域名必须与中的一个令牌域名完全匹配，`window.awsWafCookieDomainList`或者该域名必须是其中一个令牌域的顶点域。

  例如，对于令牌域 `mySubdomain.myApex.com`，API 密钥 `mySubdomain.myApex.com` 完全匹配，API 密钥 `myApex.com` 是顶点域。任一密钥都与令牌域相匹配。

  有关 API 密钥的更多信息，请参阅 [管理 JS CAPTCHA API 的 API 密钥](waf-js-captcha-api-key.md)。

如果您使用 `AWSManagedRulesACFPRuleSet` 托管规则组，则可以配置一个与您在规则组配置中提供的账户创建路径中的域名相匹配的域。有关此配置的更多信息，请参阅[将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)。

如果您使用 `AWSManagedRulesATPRuleSet` 托管规则组，则可以配置一个与您在规则组配置中提供的登录路径中的域名相匹配的域。有关此配置的更多信息，请参阅[将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md)。

# 将 JavaScript API 与内容安全策略配合使用
<a name="waf-javascript-api-csp"></a>

本节提供了将 AWS WAF apex 域列入许可名单的配置示例。

如果您将内容安全策略 (CSP) 应用于您的资源，则需要将 AWS WAF apex 域列入许可名单，才能使您的 JavaScript实施发挥作用。`awswaf.com`它们 JavaScript SDKs 会调用不同的 AWS WAF 端点，因此将此域列入许可名单可提供操作 SDKs 所需的权限。

以下显示了将 AWS WAF apex 域列入许可名单的配置示例：

```
connect-src 'self' https://*.awswaf.com;
script-src 'self' https://*.awswaf.com;
script-src-elem 'self' https://*.awswaf.com;
```

如果您尝试与使用 CSP 的资源 JavaScript SDKs 一起使用，但您尚未将该 AWS WAF 域列入许可名单，则会收到如下错误：

```
Refused to load the script ...awswaf.com/<> because it violates the following Content Security Policy directive: “script-src ‘self’
```

# 使用智能威胁 JavaScript API
<a name="waf-js-challenge-api"></a>

本节提供在客户端应用程序中使用智能威胁 JavaScript API 的说明。

智能威胁 APIs 提供了针对用户的浏览器运行静默挑战的操作，以及处理提供成功挑战和验证码响应证明的 AWS WAF 令牌的操作。

首先在测试环境中实施 JavaScript 集成，然后在生产环境中实现集成。有关其他编码指导，请参阅以下各节。

 

**使用智能威胁 APIs**

1. **安装 APIs** 

   如果您使用验证码 API，可以跳过此步骤。当你安装 CAPTCHA API 时，脚本会自动安装智能威胁。 APIs

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

   1. 在导航窗格中，选择 **应用程序集成**。在**应用程序集成**页面上，您可以看到选项卡式选项。

   1. 选择**智能威胁集成**

   1. 在该选项卡中，选择要与之集成的保护包（web ACL）。保护包 (Web ACL) 列表仅包括使用`AWSManagedRulesACFPRuleSet`托管规则组、托管规则组或`AWSManagedRulesATPRuleSet`托管规则组的目标保护级别的保护包 (Web ACLs)。`AWSManagedRulesBotControlRuleSet`

   1. 打开 S **JavaScript DK** 窗格，复制脚本标签以便在集成中使用。

   1. 在应用程序页面代码的 `<head>` 部分中，插入您为保护包（web ACL）复制的脚本标记。此包含会使您的客户端应用程序在页面加载时自动在后台检索令牌。

      ```
      <head>
          <script type="text/javascript" src="protection pack (web ACL) integration URL/challenge.js” defer></script>
      <head>
      ```

      此 `<script>` 列表使用 `defer` 属性进行配置，但如果您想让页面有不同的行为，则可以将设置更改为 `async`。

1. **（可选）为客户端的令牌添加域配置**-默认情况下，在 AWS WAF 创建令牌时，它使用与保护包（Web ACL）关联的资源的主机域。要为提供其他域 JavaScript APIs，请按照中的指南进行操作[提供用于令牌的域名](waf-js-challenge-api-set-token-domain.md)。

1. **对智能威胁集成进行编码**：编写代码以确保在客户端向受保护的端点发送请求之前完成令牌检索。如果您已经在使用 `fetch` API 进行调用，则可以替换 AWS WAF 集成 `fetch` 封装器。如果您不使用 `fetch` API，则可以改用 AWS WAF 集成`getToken`操作。有关编码指导，请参阅以下部分。

1. **在保护包（web ACL）中添加令牌验证**：在保护包（web ACL）中添加至少一条规则，用于检查客户端发送的 web 请求中是否存在有效的质询令牌。您可以使用规则组来检查和监控质询令牌，例如机器人控制功能托管规则组的目标级别，也可以使用 Challenge 规则操作进行检查，如 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md) 中所述。

   新增的保护包（web ACL）可验证对受保护端点的请求是否包含您在客户端集成中获取的令牌。包含有效、未过期令牌的请求将通过 Challenge 检查，并且不会向您的客户发送另一个静默质询。

1. **（可选）阻止缺少令牌的请求** — 如果您将 APIs 与 ACFP 托管规则组、ATP 托管规则组或 Bot Control 规则组的目标规则一起使用，则这些规则不会阻止缺少令牌的请求。要阻止缺少令牌的请求，请按照 [阻止没有有效 AWS WAF 令牌的请求](waf-tokens-block-missing-tokens.md) 中的指导进行操作。

**Topics**
+ [智能威胁 API 规范](waf-js-challenge-api-specification.md)
+ [如何使用集成 `fetch` 包装程序](waf-js-challenge-api-fetch-wrapper.md)
+ [如何使用集成 `getToken`](waf-js-challenge-api-get-token.md)

# 智能威胁 API 规范
<a name="waf-js-challenge-api-specification"></a>

本节列出了智能威胁缓解的方法和属性的规范 JavaScript APIs。使用它们 APIs 进行智能威胁和验证码集成。

**`AwsWafIntegration.fetch()`**  
使用 AWS WAF 集成实现向服务器发送 HTTP `fetch` 请求。

**`AwsWafIntegration.getToken()`**  
检索存储的 AWS WAF 令牌并将其存储在当前页面上的 Cookie 中`aws-waf-token`，名称和值设置为令牌值。

**`AwsWafIntegration.hasToken()`**  
返回一个布尔值，指示 `aws-waf-token` Cookie 当前是否包含未过期的令牌。

如果您也在使用验证码集成，请参阅相关规范，网址为 [验证码 API 规范 JavaScript](waf-js-captcha-api-specification.md)。

# 如何使用集成 `fetch` 包装程序
<a name="waf-js-challenge-api-fetch-wrapper"></a>

本节提供了使用集成 `fetch` 包装程序的说明。

你可以通过更改`AwsWafIntegration`命名空间下对 `fetch` API 的常规`fetch`调用来使用 AWS WAF `fetch`包装器。 AWS WAF 包装器支持所有与标准 JavaScript `fetch` API 调用相同的选项，并为集成添加了令牌处理。这种方法通常是集成应用程序的最简单方法。

**在包装程序实施之前**  
以下示例列表显示了实施 `AwsWafIntegration` `fetch` 包装程序之前的标准代码。

```
const login_response = await fetch(login_url, {
	    method: 'POST',
	    headers: {
	      'Content-Type': 'application/json'
	    },
	    body: login_body
	  });
```

**包装程序实施后**  
以下列表显示了与 `AwsWafIntegration` `fetch` 包装程序实施相同的代码。

```
const login_response = await AwsWafIntegration.fetch(login_url, {
	    method: 'POST',
	    headers: {
	      'Content-Type': 'application/json'
	    },
	    body: login_body
	  });
```

# 如何使用集成 `getToken`
<a name="waf-js-challenge-api-get-token"></a>

本部分介绍了如何使用 `getToken` 操作。

AWS WAF 要求您向受保护端点发出的请求中包含以当前令牌值命名`aws-waf-token`的 Cookie。

该 `getToken` 操作是一个异步 API 调用，用于检索 AWS WAF 令牌并将其存储在名为 `aws-waf-token` 的当前页面的 Cookie 中，值设置为令牌值。您可以根据需要在页面中使用此令牌 Cookie。

当您调用 `getToken`，它会执行以下操作：
+ 如果未过期的令牌已经可用，则调用会立即将其返回。
+ 否则，该调用将从令牌提供程序那里检索新令牌，等待最多 2 秒钟才能完成令牌获取工作流程，然后超时。如果操作超时，则会引发错误，您的调用代码必须处理该错误。

该 `getToken` 操作有一个附带的 `hasToken` 操作，用于指示 `aws-waf-token` Cookie 当前是否包含未过期的令牌。

`AwsWafIntegration.getToken()` 检索有效令牌并将其存储为 Cookie。大多数客户端调用会自动附加此 Cookie，但有些客户端不会。例如，跨主机域发出的调用不会附加 Cookie。在接下来的实现细节中，我们将展示如何使用这两种类型的客户端调用。

**基本 `getToken` 实现，适用于附加 `aws-waf-token` Cookie 的调用**  
以下示例列表显示了通过登录请求实施 `getToken` 操作的标准代码。

```
const login_response = await AwsWafIntegration.getToken()
	    .catch(e => {
	        // Implement error handling logic for your use case
	    })
	    // The getToken call returns the token, and doesn't typically require special handling
	    .then(token => {
	        return loginToMyPage()
	    })
	
	async function loginToMyPage() {
	    // Your existing login code
	}
```

**只有在 `getToken` 提供令牌后才能提交表格**  
以下列表显示了如何注册事件侦听器以拦截表单提交，直到有有效的令牌可供使用。

```
<body>
	  <h1>Login</h1>
	  <p></p>
	  <form id="login-form" action="/web/login" method="POST" enctype="application/x-www-form-urlencoded">
	    <label for="input_username">USERNAME</label>
	    <input type="text" name="input_username" id="input_username"><br>
	    <label for="input_password">PASSWORD</label>
	    <input type="password" name="input_password" id="input_password"><br>
	    <button type="submit">Submit<button>
	  </form>
	
	<script>
	  const form = document.querySelector("#login-form");
	
	  // Register an event listener to intercept form submissions
	  form.addEventListener("submit", (e) => {
	      // Submit the form only after a token is available 
	      if (!AwsWafIntegration.hasToken()) {
	          e.preventDefault();
	          AwsWafIntegration.getToken().then(() => {
	              e.target.submit();
	          }, (reason) => { console.log("Error:"+reason) });
	        }
	    });
	</script>
	</body>
```

**当客户端默认不附加 `aws-waf-token` Cookie 时附加令牌**  
`AwsWafIntegration.getToken()` 检索有效令牌并将其存储为 Cookie，但并非所有客户端调用都默认附加此 Cookie。例如，跨主机域发出的调用不会附加 Cookie。

`fetch`包装器会自动处理这些情况，但是如果您无法使用`fetch`包装器，则可以使用自定义`x-aws-waf-token`标题来处理此问题。 AWS WAF 除了从 `aws-waf-token` Cookie 中读取令牌外，还会从该标头中读取令牌。以下代码显示了设置标头的示例：

```
const token = await AwsWafIntegration.getToken();
const result = await fetch('/url', {
    headers: {
        'x-aws-waf-token': token,
    },
});
```

默认情况下， AWS WAF 仅接受包含与请求的主机域相同域名的令牌。任何跨域令牌都需要在保护包（web ACL）令牌域列表中有相应条目。有关更多信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。

有关跨域令牌使用的更多信息，请参阅 [aws-s aws-waf-bot-control](https://github.com/aws-samples/aws-waf-bot-control-api-protection-with-captcha) amples/-。api-protection-with-captcha

# 使用验证码 API JavaScript
<a name="waf-js-captcha-api"></a>

本节提供了使用 CAPTCHA 集成 API 的说明。

CAPTCHA JavaScript API 允许您配置验证码拼图并将其放置在客户端应用程序中所需的位置。在最终用户成功完成验证码拼图后 JavaScript APIs ，此 API 利用智能威胁的功能来获取和使用 AWS WAF 代币。

首先在测试环境中实施 JavaScript 集成，然后在生产环境中实现集成。有关其他编码指导，请参阅以下各节。

**使用验证码集成 API**

1. **安装 API**

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

   1. 在导航窗格中，选择 **应用程序集成**。在**应用程序集成**页面上，您可以看到选项卡式选项。

   1. 选择**验证码集成**。

   1. 复制列出的 JavaScript 集成脚本标签，以便在集成中使用。

   1. 在应用程序页面代码的 `<head>` 部分中，插入您复制的脚本标签。此功能使验证码拼图可供配置和使用。

      ```
      <head>
          <script type="text/javascript" src="integrationURL/jsapi.js" defer></script>
      </head>
      ```

      此 `<script>` 列表使用 `defer` 属性进行配置，但如果您想让页面有不同的行为，则可以将设置更改为 `async`。

      如果智能威胁集成脚本尚不存在，验证码脚本还会自动加载该脚本。智能威胁集成脚本使您的客户端应用程序在页面加载时自动在后台检索令牌，并提供您使用验证码 API 所需的其他令牌管理功能。

1. **（可选）为客户端的令牌添加域配置**-默认情况下，在 AWS WAF 创建令牌时，它使用与保护包（Web ACL）关联的资源的主机域。要为提供其他域 JavaScript APIs，请按照中的指南进行操作[提供用于令牌的域名](waf-js-challenge-api-set-token-domain.md)。

1. **获取客户端的加密 API 密钥** — CAPTCHA API 需要一个包含有效客户端域列表的加密 API 密钥。 AWS WAF 使用此密钥来验证您在集成中使用的客户端域是否已获准使用 AWS WAF CAPTCHA。要生成 API 密钥，请按照 [管理 JS CAPTCHA API 的 API 密钥](waf-js-captcha-api-key.md) 中的指导进行操作。

1. **编写验证码控件实施代码**：在页面中要使用它的位置实施 `renderCaptcha()` API 调用。有关配置和使用此功能的信息，请参阅以下各节 [验证码 API 规范 JavaScript](waf-js-captcha-api-specification.md) 和 [如何显示验证码拼图](waf-js-captcha-api-render.md)。

   CAPTCHA 实现与智能威胁集成集成， APIs 用于令牌管理和运行使用令牌的提取调用。 AWS WAF 有关使用它们的指导 APIs，请参阅[使用智能威胁 JavaScript API](waf-js-challenge-api.md)。

1. **在保护包（web ACL）中添加令牌验证**：在保护包（web ACL）中添加至少一条规则，用于检查客户端发送的 web 请求中是否存在有效的验证码令牌。您可以使用 CAPTCHA 规则操作进行检查，如 [CAPTCHA然后Challenge在 AWS WAF](waf-captcha-and-challenge.md) 中所述。

   新增的保护包（web ACL）可验证发往受保护端点的请求是否包含您在客户端集成中获取的令牌。包含有效、未过期的验证码令牌的请求会通过 CAPTCHA 规则操作检查，并且不会向您的最终用户显示其他验证码拼图。

实现 JavaScript API 后，您可以查看验证码拼图尝试次数和解决方案的 CloudWatch 指标。有关指标和维度的详细信息，请参阅 [账户指标和维度](waf-metrics.md#waf-metrics-account)。

**Topics**
+ [验证码 API 规范 JavaScript](waf-js-captcha-api-specification.md)
+ [如何显示验证码拼图](waf-js-captcha-api-render.md)
+ [处理来自的验证码响应 AWS WAF](waf-js-captcha-api-conditional.md)
+ [管理 JS CAPTCHA API 的 API 密钥](waf-js-captcha-api-key.md)

# 验证码 API 规范 JavaScript
<a name="waf-js-captcha-api-specification"></a>

本节列出了验证码的方法和属 JavaScript APIs性的规范。使用验证码在您的客户端 JavaScript APIs 应用程序中运行自定义的验证码拼图。

此 API 建立在智能威胁的基础上 APIs，您可以使用智能威胁来配置和管理 AWS WAF 令牌的获取和使用。请参阅 [智能威胁 API 规范](waf-js-challenge-api-specification.md)。

**`AwsWafCaptcha.renderCaptcha(container, configuration)`**  
向最终用户展示 AWS WAF 验证码拼图，成功后，使用验证码验证更新客户端令牌。这仅在集成了验证码时可用。使用此调用和智能威胁 APIs 来管理令牌检索并在您的`fetch`通话中提供令牌。请访问以下网址查看智能威胁APIs [智能威胁 API 规范](waf-js-challenge-api-specification.md)。  
与 AWS WAF 发送的 CAPTCHA 插页式广告不同，通过这种方法渲染的 CAPTCHA 拼图会立即显示拼图，而无需初始标题屏幕。    
**`container`**  
页面上目标容器元素的 `Element` 对象。这通常是通过调用 `document.getElementById()` 或 `document.querySelector()` 来检索的。  
是否必需：是  
类型：`Element`  
**配置**  
一个包含验证码配置设置的对象，如下所示 ****：    
**`apiKey`**   
启用客户端域权限的加密 API 密钥。使用 AWS WAF 控制台为您的客户端域生成 API 密钥。一个密钥最多可用于五个域。有关信息，请参阅[管理 JS CAPTCHA API 的 API 密钥](waf-js-captcha-api-key.md)。  
是否必需：是  
类型：`string`  
**`onSuccess: (wafToken: string) => void;`**   
当最终用户成功完成验证码拼图时，使用有效 AWS WAF 令牌调用。在发送到使用保护包（Web ACL）保护的端点的 AWS WAF 请求中使用令牌。该令牌提供了最近成功完成拼图的证明和时间戳。  
是否必需：是  
**`onError?: (error: CaptchaError) => void;`**   
在验证码操作期间发生错误时，使用错误对象调用。  
必需：否  
**`CaptchaError` 类定义**：`onError` 处理程序使用以下类定义提供错误类型。  

```
CaptchaError extends Error {
    kind: "internal_error" | "network_error" | "token_error" | "client_error";
    statusCode?: number;
}
```
+ `kind`：返回的错误类型。
+ `statusCode`：HTTP 状态码（如果有）。如果错误是由于 HTTP 错误造成的，则 `network_error` 将使用此选项。  
**`onLoad?: () => void;`**   
在加载新的验证码拼图时调用。  
必需：否  
**`onPuzzleTimeout?: () => void;`**   
在验证码拼图过期前未完成时调用。  
必需：否  
**`onPuzzleCorrect?: () => void;`**   
当有人为验证码拼图提供正确答案时调用。  
必需：否  
**`onPuzzleIncorrect?: () => void;`**   
当有人为验证码拼图提供不正确答案时调用。  
必需：否  
**`defaultLocale`**   
用于验证码拼图的默认语言环境。验证码拼图的书面说明有阿拉伯语 (ar-SA)、简体中文 (zh-CN)、荷兰语 (nl-NL)、英语 (en-US)、法语 (fr-FR)、德语 (de-DE)、意大利语 (it-IT)、日语 (ja-JP)、巴西葡萄牙语 (pt-BR)、西班牙语 (es-ES) 和土耳其语 (tr-TR)。除了中文和日语（默认为英语）外，所有书面语言都支持音频指令。要更改默认语言，请提供国际语言和区域代码，例如 `ar-SA`。  
默认：最终用户浏览器中当前使用的语言  
必需：否  
类型：`string`  
**`disableLanguageSelector`**   
如果设置为 `true`，则验证码拼图会隐藏语言选择器。  
默认值：`false`  
必需：否  
类型：`boolean`  
**`dynamicWidth`**   
如果设置为 `true`，则验证码拼图会更改宽度以与浏览器窗口宽度兼容。  
默认值：`false`  
必需：否  
类型：`boolean`  
**`skipTitle`**   
如果设置为 `true`，则验证码拼图不会显示拼图标题**完成拼图**。  
默认值：`false`  
必需：否  
类型：`boolean`

# 如何显示验证码拼图
<a name="waf-js-captcha-api-render"></a>

本节提供了 `renderCaptcha` 实现的一个示例。

你可以在客户端界面中随心所欲地使用该 AWS WAF `renderCaptcha`呼叫。该呼叫从中检索验证码拼图 AWS WAF，对其进行渲染，然后将结果发送到进行验证。 AWS WAF 调用时，您需要提供拼图显示配置以及最终用户完成拼图时要运行的回调。有关选项的更多信息，请参阅上一部分 [验证码 API 规范 JavaScript](waf-js-captcha-api-specification.md)。

将此调用与智能威胁集成的令牌管理功能结合使用 APIs。该调用将为您的客户端提供一个令牌，用于验证验证码拼图是否成功完成。使用智能威胁集成 APIs 来管理令牌，并在客户端对受 AWS WAF 保护包 (Web ACLs) 保护的端点的调用中提供令牌。有关智能威胁的信息 APIs，请参阅[使用智能威胁 JavaScript API](waf-js-challenge-api.md)。

**实施示例**  
以下示例列表显示了标准的 CAPTCHA 实现，包括 AWS WAF 集成 URL 在该部分中的`<head>`位置。

此列表使用成功回调配置该`renderCaptcha`函数，该回调使用智能威胁集成的`AwsWafIntegration.fetch`封装器。 APIs有关此函数的信息，请参阅 [如何使用集成 `fetch` 包装程序](waf-js-challenge-api-fetch-wrapper.md)。

```
<head>
    <script type="text/javascript" src="<Integration URL>/jsapi.js" defer></script>
</head>

<script type="text/javascript">
    function showMyCaptcha() {
        var container = document.querySelector("#my-captcha-container");
        
        AwsWafCaptcha.renderCaptcha(container, {
            apiKey: "...API key goes here...",
            onSuccess: captchaExampleSuccessFunction,
            onError: captchaExampleErrorFunction,
            ...other configuration parameters as needed...
        });
    }
    
    function captchaExampleSuccessFunction(wafToken) {
        // Captcha completed. wafToken contains a valid WAF token. Store it for
        // use later or call AwsWafIntegration.fetch() to use it easily.
        // It will expire after a time, so calling AwsWafIntegration.getToken()
        // again is advised if the token is needed later on, outside of using the
        // fetch wrapper.
        
        // Use WAF token to access protected resources
        AwsWafIntegration.fetch("...WAF-protected URL...", {
            method: "POST",
            headers: {
                "Content-Type": "application/json",
            },
            body: "{ ... }" /* body content */
        });
    }
    
    function captchaExampleErrorFunction(error) {
        /* Do something with the error */
    }
</script>

<div id="my-captcha-container">
    <!-- The contents of this container will be replaced by the captcha widget -->
</div>
```

**配置设置示例**  
以下示例列表显示了宽度和标题选项的非默认设置 `renderCaptcha`。

```
        AwsWafCaptcha.renderCaptcha(container, {
            apiKey: "...API key goes here...",
            onSuccess: captchaExampleSuccessFunction,
            onError: captchaExampleErrorFunction,
            dynamicWidth: true, 
            skipTitle: true
        });
```

有关配置选项的全部信息，请参阅 [验证码 API 规范 JavaScript](waf-js-captcha-api-specification.md)。

# 处理来自的验证码响应 AWS WAF
<a name="waf-js-captcha-api-conditional"></a>

本节提供了处理验证码响应的示例。

如果匹配的 Web 请求没有带有有效 CAPTCHA 时间戳的令牌，则带有CAPTCHA操作的 AWS WAF 规则将终止对该请求的评估。如果请求是`GET` text/html 通话，则该CAPTCHA操作会向客户提供带有验证码拼图的插页式广告。当你不集成 CAPTCHA JavaScript API 时，插页式广告会运行拼图，如果最终用户成功解决了这个问题，则会自动重新提交请求。

当你集成 CAPTCHA JavaScript API 并自定义验证码处理时，你需要检测终止的验证码响应，提供你的自定义 CAPTCHA，然后如果最终用户成功解决了难题，则重新提交客户的 Web 请求。

以下代码示例演示如何执行此操作。

**注意**  
 AWS WAF CAPTCHA操作响应的状态码为 HTTP 405，我们用它来识别此代码中的CAPTCHA响应。如果您的受保护端点使用 HTTP 405 状态代码为同一调用传递任何其他类型的响应，本示例代码也会为这些响应显示验证码拼图。

```
<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="<Integration URL>/jsapi.js" defer></script>
</head>
<body>
    <div id="my-captcha-box"></div>
    <div id="my-output-box"></div>

    <script type="text/javascript">
    async function loadData() {
        // Attempt to fetch a resource that's configured to trigger a CAPTCHA
        // action if the rule matches. The CAPTCHA response has status=HTTP 405.
        const result = await AwsWafIntegration.fetch("/protected-resource");

        // If the action was CAPTCHA, render the CAPTCHA and return

        // NOTE: If the endpoint you're calling in the fetch call responds with HTTP 405
        // as an expected response status code, then this check won't be able to tell the
        // difference between that and the CAPTCHA rule action response.

        if (result.status === 405) {
            const container = document.querySelector("#my-captcha-box");
            AwsWafCaptcha.renderCaptcha(container, {
                apiKey: "...API key goes here...",
                onSuccess() {
                    // Try loading again, now that there is a valid CAPTCHA token
                    loadData();
                },
            });
            return;
        }

        const container = document.querySelector("#my-output-box");
        const response = await result.text();
        container.innerHTML = response;
    }

    window.addEventListener("load", () => {
        loadData();
    });
    </script>
</body>
</html>
```

# 管理 JS CAPTCHA API 的 API 密钥
<a name="waf-js-captcha-api-key"></a>

本节提供了生成和删除 API 密钥的说明。

要将 AWS WAF 验证码集成到带有 JavaScript API 的客户端应用程序中，您需要用于运行验证码拼图的客户端域的 API 集成标签和加密 API 密钥。 JavaScript 

的 CAPTCHA 应用程序集成 JavaScript 使用加密的 API 密钥来验证客户端应用程序域是否有权使用 AWS WAF CAPTCHA API。当您从 JavaScript 客户端调用 CAPTCHA API 时，您需要提供一个 API 密钥和一个包含当前客户端域名的域名列表。一个加密密钥最多可列出 5 个域。

**API 密钥要求**  
您在验证码集成中使用的 API 密钥必须包含一个适用于您使用密钥的客户端的域。
+ 如果您在客户的智能威胁集成中指定了 `window.awsWafCookieDomainList`，那么您的 API 密钥中至少有一个域必须与 `window.awsWafCookieDomainList` 中的一个令牌域完全匹配，或者必须是其中一个令牌域的顶点域。

  例如，对于令牌域 `mySubdomain.myApex.com`，API 密钥 `mySubdomain.myApex.com` 完全匹配，API 密钥 `myApex.com` 是顶点域。任一密钥都与令牌域相匹配。

  有关设置令牌域列表的信息，请参阅 [提供用于令牌的域名](waf-js-challenge-api-set-token-domain.md)。
+ 否则，当前域名必须包含在 API 密钥中。当前域名是您可以在浏览器地址栏中看到的域名。

根据受保护的主机域和为 Web ACL 配置的令牌域列表，您使用的域必须是可以接受的域。 AWS WAF 有关更多信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。

**如何为 API 密钥选择区域**  
AWS WAF 可以在任何可用的区域生成 CAPTCHA API 密钥。 AWS WAF 

通常，您应为 CAPTCHA API 密钥使用与保护包（web ACL）相同的区域。但是，如果您希望全球受众使用区域保护包（Web ACL），则可以获取范围为的验证码 JavaScript 集成标签 CloudFront 和范围为的API密钥，然后将其与区域保护包（Web ACL）一起使用。 CloudFront这种方法允许客户端从距其最近的区域加载验证码拼图，从而减小延迟。

CAPTCHA API 密钥的作用域仅限于其他区域 CloudFront ，不支持跨多个区域使用。它们只能在适用范围内的区域中使用。

**为您的客户端域生成 API 密钥**  
通过控制台获取集成 URL 并生成和检索 API 密钥。

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

1. 在导航窗格中，选择 **应用程序集成**。

1. 在**为应用程序集成启用的保护包 (Web ACLs)** 窗格中，选择要用于 API 密钥的区域。您还可以在 **CAPTCHA 集成**选项卡的 **API 密钥**窗格中选择区域。

1. 选择**验证码集成**选项卡。此选项卡提供可在 JavaScript 集成中使用的 CAPTCHA 集成标签以及 API 密钥列表。两者的范围均限于所选区域。

1. 在 **API 密钥**窗格中，选择**生成密钥**。此时将显示生成密钥对话框。

1. 输入要包含在密钥中的客户端域。您最多可以输入 5 个。完成后，选择**生成密钥**。界面返回到验证码集成选项卡，其中列出了您的新密钥。

   API 密钥一经创建，即不可变。如果您需要更改密钥，请生成一个新密钥并改用该密钥。

1. （可选）复制新生成的密钥以用于集成。

您也可以使用 REST APIs 或特定语言之一来完成这项 AWS SDKs 工作。REST API 调用是 “[创建” APIKey 和 “](https://docs.aws.amazon.com/waf/latest/APIReference/API_CreateAPIKey.html)[列出” APIKeys](https://docs.aws.amazon.com/waf/latest/APIReference/API_ListAPIKeys.html)。

**删除 API 密钥**  
要删除 API 密钥，必须使用 REST API 或特定语言之一 AWS SDKs。REST API 调用为[删除APIKey](https://docs.aws.amazon.com/waf/latest/APIReference/API_DeleteAPIKey.html)。您不能使用控制台删除键。

删除密钥后，最长可能需要 24 小时 AWS WAF 才能禁止在所有地区使用该密钥。

# AWS WAF 移动应用程序集成
<a name="waf-mobile-sdk"></a>

本节介绍使用 AWS WAF 移动设备 SDKs 为 Android 和 iOS 移动和电视应用实现 AWS WAF 智能威胁集成的 SDKs 主题。对于电视应用程序， SDKs 它们与主要的智能电视平台兼容，包括 Android TV 和 Apple TV。
+ 对于安卓手机和电视应用程序， SDKs 适用于安卓 API 版本 23（安卓版本 6）及更高版本。有关 Android 版本的信息，请参阅[软件开发工具包平台发行说明](https://developer.android.com/tools/releases/platforms)。
+ 对于 iOS 移动应用程序，适用于 iOS 版本 13 及更高版本。 SDKs 有关 iOS 版本的信息，请参阅 [iOS 和 iPadOS 发行说明](https://developer.apple.com/documentation/ios-ipados-release-notes)。
+ 对于 Apple TV 应用程序，适用于 tvOS 版本 14 或更高版本。 SDKs 有关 tvOS 版本的信息，请参阅 [tvOS 发行说明](https://developer.apple.com/documentation/tvos-release-notes)。

使用移动 AWS WAF SDK，您可以管理令牌授权，并将令牌包含在发送到受保护资源的请求中。通过使用 SDKs，可以确保客户端的这些远程过程调用包含有效的令牌。此外，在应用程序页面上进行这种集成后，您可以在保护包（web ACL）中实施缓解规则，例如阻止不包含有效令牌的请求。

要访问手机 SDKs，请通过联系方式联系支持[人员 AWS](https://aws.amazon.com/contact-us)。

**注意**  
该 AWS WAF 手机 SDKs 无法进行验证码自定义。

使用 SDK 的基本方法是使用配置对象创建令牌提供者，然后使用令牌提供者从中检索令牌 AWS WAF。默认情况下，令牌提供程序会在您向受保护资源发出的 web 请求中包含检索到的令牌。

以下是软件开发工具包实施的部分列表，其中显示了主要组件。有关更多详细示例，请参阅[AWS WAF 移动 SDK 的代码示例](waf-mobile-sdk-coding-examples.md)。

------
#### [ iOS ]

```
let url: URL = URL(string: "protection pack (web ACL) integration URL")!
	let configuration = WAFConfiguration(applicationIntegrationUrl: url, domainName: "Domain name")
	let tokenProvider = WAFTokenProvider(configuration)
	let token = tokenProvider.getToken()
```

------
#### [ Android ]

```
URL applicationIntegrationURL = new URL("protection pack (web ACL) integration URL");
	String domainName = "Domain name";
	WAFConfiguration configuration = WAFConfiguration.builder().applicationIntegrationURL(applicationIntegrationURL).domainName(domainName).build();
	WAFTokenProvider tokenProvider = new WAFTokenProvider(Application context, configuration);
	WAFToken token = tokenProvider.getToken();
```

------

# 安装 AWS WAF 移动 SDK
<a name="waf-mobile-sdk-installing"></a>

本节提供安装 AWS WAF 移动 SDK 的说明。

要访问手机 SDKs，请通过联系方式联系支持[人员 AWS](https://aws.amazon.com/contact-us)。

首先在测试环境中实施移动软件开发工具包，然后在生产环境中实施。

**安装移 AWS WAF 动 SDK**

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

1. 在导航窗格中，选择 **应用程序集成**。

1. 在**智能威胁集成**选项卡中，执行以下操作：

   1. 在**为应用程序集成启用的保护包 (Web ACLs)** 窗格中，找到要集成的保护包 (Web ACL)。复制并保存保护包（web ACL）集成 URL，以便在实施中使用。您也可以通过 API 调用 `GetWebACL` 获取此 URL。

   1. 选择移动设备类型和版本，然后选择**下载**。你可以选择任何你喜欢的版本，但我们建议使用最新版本。 AWS WAF 将设备上的`zip`文件下载到您的标准下载位置。

1. 在您的应用程序开发环境中，将文件解压缩到您选择的工作位置。在 zip 文件的顶级目录中，找到并打开 `README`。按照`README`文件中的说明安装 AWS WAF 移动 SDK，以便在您的移动应用程序代码中使用。

1. 根据以下各部分中的指导对您的应用程序进行编程。

# AWS WAF 移动 SDK 规范
<a name="waf-mobile-sdk-specification"></a>

本节列出了最新可用版本的 AWS WAF 移动软件开发工具包的软件开发工具包对象、操作和配置设置。有关令牌提供程序和操作如何处理各种配置设置组合的详细信息，请参阅 [AWS WAF 移动 SDK 的工作原理](waf-mobile-sdk-how-it-works.md)。

**`WAFToken`**  
持有 AWS WAF 代币。    
**`getValue()`**  
检索 `WAFToken` 的 `String` 表示形式。

**`WAFTokenProvider`**  
在您的移动应用程序中管理令牌。使用 `WAFConfiguration` 对象实施此目的。    
**`getToken()`**  
如果启用了后台刷新，则会返回缓存的令牌。如果禁用了后台刷新，则会对进行同步阻塞调用 AWS WAF 以检索新令牌。  
**`loadTokenIntoProvider(WAFToken)`**  
将指定的令牌加载到 `WAFTokenProvider`，替换提供者管理的所有令牌。令牌提供者具备新令牌的所有权，并负责日后对其进行刷新。如果在 `WAFConfiguration` 中启用 `setTokenCookie`，此操作还会更新 cookie 存储中的令牌。  
**`onTokenReady(WAFTokenResultCallback)`**  
指示令牌提供程序刷新令牌并在活动令牌准备就绪时调用提供的回调。当令牌被缓存并准备就绪时，令牌提供程序将在后台线程中调用您的回调。在应用程序首次加载和恢复活动状态时调用此函数。有关返回活动状态的更多信息，请参阅 [在应用程序处于非活动状态后检索令牌](waf-mobile-sdk-how-it-works.md#waf-mobile-sdk-how-back-from-inactive)。  
对于 Android 或 iOS 应用程序，您可以设置 `WAFTokenResultCallback` 为希望令牌提供程序在请求的令牌准备就绪时调用的操作。您的 `WAFTokenResultCallback` 实施必须采用参数 `WAFToken`，`SdkError`。对于 iOS 应用程序，您可以交替创建内联函数。  
**`storeTokenInCookieStorage(WAFToken)`**  
指示将指定的 AWS WAF 令牌存储`WAFTokenProvider`到软件开发工具包的 Cookie 管理器中。默认情况下，只有在首次获取令牌和刷新令牌时，才会将其添加到 Cookie 存储中。如果应用程序出于任何原因清除了共享 Cookie 存储，则在下次刷新之前，SDK 不会自动重新添加 AWS WAF 令牌。

**`WAFConfiguration`**  
保存 `WAFTokenProvider` 实施的配置。实施此操作时，您需要提供保护包（web ACL）的集成 URL、要在令牌中使用的域名以及您希望令牌提供程序使用的任何非默认设置。  
以下列表指定了可以在 `WAFConfiguration` 对象中管理的配置设置。    
**`applicationIntegrationUrl`**   
应用程序集成 URL。从 AWS WAF 控制台或通过 `getWebACL` API 调用获取。  
是否必需：是  
类型：应用程序专用 URL。对于 iOS，请参阅 [iOS URL](https://developer.apple.com/documentation/foundation/url)。对于 Android 系统，请参阅 [java.net URL](https://docs.oracle.com/javase/7/docs/api/java/net/URL.html)。  
**`backgroundRefreshEnabled`**   
表示您是否希望令牌提供程序在后台刷新令牌。如果您设置了此选项，则令牌提供程序会根据管理自动令牌刷新活动的配置设置在后台刷新您的令牌。  
必需：否  
类型：`Boolean`  
默认值：`TRUE`  
**`domainName`**   
要在令牌中使用的域名，用于令牌获取和 Cookie 存储。例如，`example.com` 或 `aws.amazon.com`。这通常是与保护包（web ACL）关联的资源的主机域，您将在其中发送 web 请求。对于 ACFP 托管规则组 `AWSManagedRulesACFPRuleSet`，这通常是一个与您在规则组配置中提供的账户创建路径中的域相匹配的单个域。对于 ATP 托管规则组 `AWSManagedRulesATPRuleSet`，这通常是一个与您在规则组配置中提供的登录路径中的域相匹配的单个域。  
不允许使用公共后缀。例如，您不能使用 `gov.au` 或 `co.uk` 作为令牌域。  
根据受保护的主机域和保护包 (Web ACL) 的令牌域列表，该域必须是可以接受的域。 AWS WAF 有关更多信息，请参阅 [AWS WAF 保护包 (Web ACL) 令牌域列表配置](waf-tokens-domains.md#waf-tokens-domain-lists)。  
是否必需：是  
类型：`String`  
**`maxErrorTokenRefreshDelayMsec`**   
尝试失败后，重复令牌刷新之前等待的最长时间（以毫秒为单位）。对于失败尝试的每次自动重试，都会添加指数回退，直至给定的输入延迟时间。此值在令牌检索失败且重试 `maxRetryCount` 次后使用。  
必需：否  
类型：`Integer`  
默认值：`5000`（5 秒）  
允许的最小值：`1`（1 毫秒）  
允许的最大值：`30000`（30 秒）  
**`maxRetryCount`**   
请求令牌时使用指数回退执行的最大重试次数。  
必需：否  
类型：`Integer`  
默认值：`Infinity`  
允许的最小值：`0`  
允许的最大值：`100`  
**`setTokenCookie`**   
表示您是否希望 SDK 的 cookie 管理器在请求或其他区域中添加令牌 cookie。  
使用 `TRUE` 值：  
+ cookie 管理器会向路径在 `tokenCookiePath` 中所指定路径之下的所有请求添加令牌 cookie。
+ 除将令牌加载到令牌提供程序以外，`WAFTokenProvider` 操作 `loadTokenIntoProvider()` 还会更新 cookie 存储中的令牌。
必需：否  
类型：`Boolean`  
默认值：`TRUE`  
**`tokenCookiePath`**   
当 `setTokenCookie` 是 `TRUE` 时使用。表示您希望软件开发工具包的 Cookie 管理器在其中添加令牌 Cookie 的顶级路径。管理员会将令牌 Cookie 添加到您发送到该路径的所有请求以及所有子路径中。  
例如，如果您将其设置为 `/web/login`，则管理器将包含发送到 `/web/login` 的所有内容及其任何子路径的令牌 Cookie，例如 `/web/login/help`。它不包括发送到其他路径的请求的令牌，例如 `/`、`/web` 或 `/web/order`。  
必需：否  
类型：`String`  
默认值：`/`  
**`tokenRefreshDelaySec`**   
用于背景刷新。后台令牌刷新之间的最长时间（以秒为单位）。  
必需：否  
类型：`Integer`  
默认值：`88`  
允许的最小值：`88`  
允许的最大值：`300`（5 分钟）

## AWS WAF 移动 SDK 错误
<a name="waf-mobile-sdk-errors"></a>

本节列出了当前 AWS WAF 移动 SDK 版本可能出现的错误。

**`SdkError`**  
无法检索令牌时返回的错误类型。Android SDK 和 iOS SDK 的错误类型相同。  
移 AWS WAF 动 SDK 有以下错误类型：    
**`invalidChallenge`**  
当令牌服务器返回无效的质询数据，或者响应 blob 被攻击者改变时，就会返回此错误。  
**`errorInvokingGetChallengeEndpoint`**  
当令牌服务器向客户端发送不成功的响应代码或出现网络错误时，就会返回此错误。  
**`invalidVerifyChallengeResponse`**  
如果`aws-waf-token`从服务器的验证响应中检索时出错，或者 AWS WAF 服务器响应被篡改，则会返回此错误。  
**`errorInvokingVerifyEndpoint`**  
当客户端收到 AWS WAF 服务器的错误响应或验证已解决的挑战时出现网络错误时，就会返回此错误。  
**`internalError`**  
SDK 本身可能发生的所有其他错误都会返回此错误。

**`socketTimeoutException`**  
当检索令牌时出现网络错误，通常会返回此错误。  
此错误可能由于下列原因导致：  
+ 网络带宽低：确认您的网络连接设置
+ 变更后的应用程序集成 URL：确认集成 URL 未与控制台上显示的内容相比进行修改 AWS WAF 

# AWS WAF 移动 SDK 的工作原理
<a name="waf-mobile-sdk-how-it-works"></a>

本节介绍 AWS WAF 移动 SDK 的类、属性和操作是如何协同工作的。

移动设备 SDKs 为您提供可配置的令牌提供商，可用于令牌检索和使用。令牌提供程序会验证您允许的请求是否来自合法客户。当你向你保护的 AWS 资源发送请求时 AWS WAF，你需要在 Cookie 中加入令牌来验证请求。您可以手动处理令牌 Cookie，也可以让令牌提供程序为您处理。

本节介绍移动软件开发工具包中包含的类、属性和方法之间的交互。有关软件开发工具包规范，请参阅 [AWS WAF 移动 SDK 规范](waf-mobile-sdk-specification.md)。

## 令牌检索和缓存
<a name="waf-mobile-sdk-how-token-basics"></a>

在移动应用程序中创建令牌提供程序实例时，您可以配置您希望它如何管理令牌和令牌检索。您的主要选择是如何维护有效的、未过期的令牌，以便在应用的 web 请求中使用：
+ **启用后台刷新**：这是默认设置。令牌提供程序会在后台自动刷新令牌并将其缓存。启用后台刷新后，当您调用 `getToken()` 时，该操作将检索缓存的令牌。

  令牌提供程序以可配置的时间间隔执行令牌刷新，以便在应用程序处于活动状态时，缓存中始终有未过期的令牌可用。当您的应用程序处于非活动状态时，后台刷新会暂停。有关此问题的信息，请参阅 [在应用程序处于非活动状态后检索令牌](#waf-mobile-sdk-how-back-from-inactive)。
+ **禁用后台刷新**：您可以禁用后台令牌刷新，然后仅按需检索令牌。按需检索的令牌不会被缓存，您可以根据需要检索多个令牌。每个令牌都独立于您检索的任何其他令牌，并且每个令牌都有自己的时间戳，用于计算到期时间。

  禁用后台刷新后，您可以选择以下令牌检索：
  + **`getToken()`**— 当您在禁`getToken()`用后台刷新的情况下呼叫时，调用会同步从中检索新令牌。 AWS WAF这可能是一个阻塞调用，如果在主线程上调用，可能会影响应用程序的响应速度。
  + **`onTokenReady(WAFTokenResultCallback)`**：此调用异步检索新令牌，然后在令牌准备就绪时在后台线程中调用提供的结果回调。

### 令牌提供程序如何重试失败的令牌检索
<a name="waf-mobile-sdk-how-token-retrieval-retries"></a>

检索失败时，令牌提供程序会自动重试令牌检索。重试最初是使用指数回退来执行的，起始重试等待时间为 100 ms。有关指数重试的信息，请参阅 [AWS中的错误重试和指数回退](https://docs.aws.amazon.com/general/latest/gr/api-retries.html)。

当重试次数达到配置的 `maxRetryCount` 时，令牌提供程序要么停止尝试，要么切换为每 `maxErrorTokenRefreshDelayMsec` 毫秒尝试一次，具体取决于令牌检索的类型：
+ **`onTokenReady()`**：令牌提供程序切换到两次尝试之间的等待 `maxErrorTokenRefreshDelayMsec` 毫秒，并继续尝试检索令牌。
+ **后台刷新**：令牌提供程序切换到两次尝试之间的等待 `maxErrorTokenRefreshDelayMsec` 毫秒，并继续尝试检索令牌。
+ **禁用后台刷新时按需 `getToken()` 调用**：令牌提供程序停止尝试检索令牌并返回之前的令牌值，如果没有以前的令牌，则返回空值。

## 令牌检索重试场景
<a name="waf-mobile-sdk-how-token-retrieval-retry-scenarios"></a>

当令牌提供者尝试检索令牌时，可能会导致自动重试，具体取决于令牌获取流中令牌检索失败的位置。本节列出可能出现自动重试的地方。
+ **通过 /inputs 或 /verify 获取或验证 AWS WAF 挑战赛：**
  + 当提出获取和验证 AWS WAF 质询的请求失败时，可能会导致自动重试。
  + 您可能会观察到此处发生的自动重试以及 `socketTimeoutException` 错误。这可能有多种原因，包括：
    + 网络带宽低：确认您的网络连接设置
    + 变更后的应用程序集成 URL：确认集成 URL 未与控制台上显示的内容相比进行修改 AWS WAF 
  + 自动重试次数可通过 `maxRetryCount()` 功能进行配置
+ **刷新令牌：**
  + 通过令牌处理程序发出刷新令牌的请求时，可能会导致自动重试。
  + 此处的自动重试次数可通过 `maxRetryCount()` 功能进行配置。

通过设置 `maxRetryCount(0)` 实现非自动重试的配置。

## 令牌免疫时间和后台刷新
<a name="waf-mobile-sdk-how-token-immunity"></a>

您在 Web ACL 中配置的令牌免疫时间与您在 AWS WAF 移动 SDK 中设置的令牌刷新间隔无关。启用后台刷新后，SDK 会使用 `tokenRefreshDelaySec()`，按照您指定的间隔刷新令牌。这可能导致多个有效令牌同时存在，具体取决于您配置的免疫时间。

要防止出现多个有效令牌，您可以禁用后台刷新，并使用 `getToken()` 功能管理移动应用程序中的令牌生命周期。

## 在应用程序处于非活动状态后检索令牌
<a name="waf-mobile-sdk-how-back-from-inactive"></a>

仅当您的应用类型被视为处于活动状态时，才会执行后台刷新：
+ **iOS**：当应用程序位于前台时，将执行后台刷新。
+ **Android**：无论是在前台还是在后台，都是在应用程序未关闭时执行后台刷新。

如果您的应用程序处于任何不支持后台刷新的状态的时间超过您配置的 `tokenRefreshDelaySec` 秒数，则令牌提供程序会暂停后台刷新。例如，对于 iOS 应用程序，如果 `tokenRefreshDelaySec` 为 300 并且应用程序关闭或进入后台超过 300 秒，则令牌提供程序将停止刷新令牌。当应用程序恢复到活动状态时，令牌提供程序会自动重新启动后台刷新。

当您的应用程序恢复到活动状态时，请调用 `onTokenReady()`，以便在令牌提供程序检索并缓存新令牌时通知您。不要随便调用 `getToken()`，因为缓存中可能还不包含当前有效的令牌。

## 应用程序集成 URL。
<a name="waf-mobile-sdk-application-integration-url"></a>

移 AWS WAF 动 SDK 应用程序集成 URL 指向您为应用程序集成启用的 Web ACL。此 URL 将请求路由到正确的后端服务器，并将其与您的客户关联。此 URL 不具备硬安全控制功能，因此公开集成 URL 不会导致安全风险。

从技术层面，您可以修改所提供的集成 URL，且仍能获取令牌。但是，我们不建议这样做，因为您可能无法查看质询解决率，或者由于 `socketTimeoutException` 错误而遭遇令牌检索失败。

## 依赖项
<a name="waf-mobile-sdk-dependencies"></a>

每个可下载的 AWS WAF 移动 SDK 都包含一个自述文件，其中列出了其特定版本的 SDK 的依赖关系。有关移动 SDK 版本的依赖项，请参阅自述文件。

## 混淆/ProGuard （仅限安卓 SDK）
<a name="waf-mobile-sdk-obfuscation"></a>

如果您使用诸如此类的混淆或缩小产品 ProGuard，则可能需要排除某些命名空间以确保移动 SDK 正常运行。查看移动 SDK 版本的自述文件，以查找命名空间和排除规则的列表。

# AWS WAF 移动 SDK 的代码示例
<a name="waf-mobile-sdk-coding-examples"></a>

此部分提供使用软件开发工具包的代码示例。

## 初始化令牌提供程序并获取令牌
<a name="waf-mobile-sdk-coding-basic"></a>

您可以使用配置对象启动令牌提供程序实例。然后，您可以使用可用操作检索令牌。以下是所需代码的基本组件。

------
#### [ iOS ]

```
let url: URL = URL(string: "protection pack (web ACL) integration URL")!
let configuration = WAFConfiguration(applicationIntegrationUrl: url, domainName: "Domain name")
let tokenProvider = WAFTokenProvider(configuration)

//onTokenReady can be add as an observer for UIApplication.willEnterForegroundNotification
self.tokenProvider.onTokenReady() { token, error in
	if let token = token {
	//token available
	}

	if let error = error {
	//error occurred after exhausting all retries
	}
}

//getToken()
let token = tokenProvider.getToken()
```

------
#### [ Android ]

Java 示例：

```
String applicationIntegrationURL = "protection pack (web ACL) integration URL";
//Or
URL applicationIntegrationURL = new URL("protection pack (web ACL) integration URL");

String domainName = "Domain name";

WAFConfiguration configuration = WAFConfiguration.builder().applicationIntegrationURL(applicationIntegrationURL).domainName(domainName).build();
WAFTokenProvider tokenProvider = new WAFTokenProvider(Application context, configuration);

// implement a token result callback
WAFTokenResultCallback callback = (wafToken, error) -> {
	if (wafToken != null) {
	// token available
	} else {  
	// error occurred in token refresh  
	}
};

// Add this callback to application creation or activity creation where token will be used
tokenProvider.onTokenReady(callback);

// Once you have token in token result callback
// if background refresh is enabled you can call getToken() from same tokenprovider object
// if background refresh is disabled you can directly call getToken()(blocking call) for new token
WAFToken token = tokenProvider.getToken();
```

Kotlin 示例：

```
import com.amazonaws.waf.mobilesdk.token.WAFConfiguration
import com.amazonaws.waf.mobilesdk.token.WAFTokenProvider

private lateinit var wafConfiguration: WAFConfiguration
private lateinit var wafTokenProvider: WAFTokenProvider

private val WAF_INTEGRATION_URL = "protection pack (web ACL) integration URL"
private val WAF_DOMAIN_NAME = "Domain name"

fun initWaf() {
	// Initialize the tokenprovider instance
	val applicationIntegrationURL = URL(WAF_INTEGRATION_URL)
	wafConfiguration =
		WAFConfiguration.builder().applicationIntegrationURL(applicationIntegrationURL)
			.domainName(WAF_DOMAIN_NAME).backgroundRefreshEnabled(true).build()
	wafTokenProvider = WAFTokenProvider(getApplication(), wafConfiguration)
	
		// getToken from tokenprovider object
		println("WAF: "+ wafTokenProvider.token.value)
	
		// implement callback for where token will be used
		wafTokenProvider.onTokenReady {
			wafToken, sdkError ->
		run {
			println("WAF Token:" + wafToken.value)
		}
	}
}
```

------

## 允许软件开发工具包在您的 HTTP 请求中提供令牌 Cookie
<a name="waf-mobile-sdk-coding-auto-token-cookie"></a>

如果 `setTokenCookie` 是 `TRUE`，令牌提供者会在您向 `tokenCookiePath` 中指定的路径下的所有位置发出的网络请求中为您包含令牌 Cookie。默认情况下，`setTokenCookie` 为 `TRUE`，`tokenCookiePath` 为 `/`。

您可以通过指定令牌 Cookie 路径来缩小包含令牌 Cookie 的请求的范围，例如 `/web/login`。如果您这样做，请检查您的 AWS WAF 规则是否未检查您发送到其他路径的请求中的令牌。使用 `AWSManagedRulesACFPRuleSet` 规则组时，您可以配置账户注册和创建路径，规则组会检查发送到这些路径的请求中的令牌。有关更多信息，请参阅 [将 ACFP 托管规则组添加到您的 web ACL](waf-acfp-rg-using.md)。同样，当您使用 `AWSManagedRulesATPRuleSet` 规则组时，您可以配置登录路径，规则组会检查发送到该路径的请求中的令牌。有关更多信息，请参阅 [将 ATP 托管规则组添加到您的保护包（web ACL）](waf-atp-rg-using.md)。

------
#### [ iOS ]

如果`setTokenCookie`是`TRUE`，则令牌提供者会将 AWS WAF 令牌存储在 a 中，`HTTPCookieStorage.shared`并自动将该 Cookie 包含在对您在中指定的域的请求中`WAFConfiguration`。

```
let request = URLRequest(url: URL(string: domainEndpointUrl)!)
//The token cookie is set automatically as cookie header
let task = URLSession.shared.dataTask(with: request) { data, urlResponse, error  in
}.resume()
```

------
#### [ Android ]

如果`setTokenCookie`是`TRUE`，则令牌提供者将 AWS WAF 令牌存储在应用程序范围内共享的`CookieHandler`实例中。令牌提供程序会自动将 Cookie 包含在对您在 `WAFConfiguration` 中指定的域的请求中。

Java 示例：

```
URL url = new URL("Domain name");
//The token cookie is set automatically as cookie header
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.getResponseCode();
```

Kotlin 示例：

```
val url = URL("Domain name")
//The token cookie is set automatically as cookie header
val connection = (url.openConnection() as HttpsURLConnection)
connection.responseCode
```

如果您已经初始化了 `CookieHandler` 默认实例，则令牌提供程序将使用它来管理 Cookie。否则，令牌提供者将使用该令 AWS WAF 牌初始化一个新`CookieManager`实例，`CookiePolicy.ACCEPT_ORIGINAL_SERVER`然后将此新实例设置为中的默认实例`CookieHandler`。

以下代码显示了当 Cookie 管理器和 Cookie 处理程序在您的应用程序中不可用时，软件开发工具包如何对其进行初始化。

Java 示例：

```
CookieManager cookieManager = (CookieManager) CookieHandler.getDefault();
if (cookieManager == null) {
	// Cookie manager is initialized with CookiePolicy.ACCEPT_ORIGINAL_SERVER
	cookieManager = new CookieManager();
	CookieHandler.setDefault(cookieManager);
}
```

Kotlin 示例：

```
var cookieManager = CookieHandler.getDefault() as? CookieManager
if (cookieManager == null) {
	// Cookie manager is initialized with CookiePolicy.ACCEPT_ORIGINAL_SERVER
	cookieManager = CookieManager()
	CookieHandler.setDefault(cookieManager)
}
```

------

## 在您的 HTTP 请求中手动提供令牌 Cookie
<a name="waf-mobile-sdk-coding-manual-token-cookie"></a>

如果您将 `setTokenCookie` 设置为 `FALSE`，则需要在向受保护端点发出的请求中手动提供令牌 Cookie，作为 Cookie HTTP 请求标头。以下代码演示了如何执行此操作。

------
#### [ iOS ]

```
var request = URLRequest(url: wafProtectedEndpoint)
request.setValue("aws-waf-token=token from token provider", forHTTPHeaderField: "Cookie")
request.httpShouldHandleCookies = true
URLSession.shared.dataTask(with: request) { data, response, error in }
```

------
#### [ Android ]

Java 示例：

```
URL url = new URL("Domain name");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
String wafTokenCookie = "aws-waf-token=token from token provider";
connection.setRequestProperty("Cookie", wafTokenCookie);
connection.getInputStream();
```

Kotlin 示例：

```
val url = URL("Domain name")
val connection = (url.openConnection() as HttpsURLConnection)
val wafTokenCookie = "aws-waf-token=token from token provider"
connection.setRequestProperty("Cookie", wafTokenCookie)
connection.inputStream
```

------

# CAPTCHA然后Challenge在 AWS WAF
<a name="waf-captcha-and-challenge"></a>

本节介绍如何使用CAPTCHA和Challenge使用 AWS WAF。

您可以将 AWS WAF 规则配置为对符合规则检查标准的 Web 请求运行CAPTCHA或Challenge操作。您还可以对 JavaScript 客户端应用程序进行编程，使其在本地运行 CAPTCHA 拼图和浏览器挑战。

只有当浏览器访问 HTTPS 端点时，才能运行验证码拼图和静默质询。浏览器客户端必须在安全环境中运行才能获取令牌。
+ **CAPTCHA**：要求最终用户完成验证码拼图，以证明是人类在发送请求。验证码拼图旨在让人类相当容易和快速地成功完成拼图，而计算机很难成功完成或随机完成。

  在保护包（web ACl）规则中，当 Block 操作会阻止过多的合法请求时，通常使用验证码，但是让所有流量通过会导致大量不想要的请求，例如来自机器人的请求。有关规则操作行为的信息，请参阅 [CAPTCHA AWS WAF 和 Challenge 规则操作的工作原理](waf-captcha-and-challenge-how-it-works.md)。

  您还可以在客户端应用程序集成中对验证码拼图实现进行编程。 APIs当这样做时，您可以在客户端应用程序中自定义拼图的行为和位置。有关更多信息，请参阅 [中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。
+ **Challenge**：运行静默质询，要求客户端会话验证它是浏览器，而不是机器人。验证在后台运行，不涉及最终用户。这是一个不错的选择，可以验证您怀疑无效的客户端，而不会通过验证码拼图对最终用户体验产生负面影响。有关规则操作行为的信息，请参阅 [CAPTCHA AWS WAF 和 Challenge 规则操作的工作原理](waf-captcha-and-challenge-how-it-works.md)。

  Challenge规则操作与客户端智能威胁集成运行的挑战类似 APIs，如中所述[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。

**注意**  
当您在其中一个规则中使用 CAPTCHA 或 Challenge 规则操作或在规则组中将其作为规则操作覆盖时，您需要支付额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

有关所有规则操作选项的信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

**Topics**
+ [AWS WAF 验证码拼图](waf-captcha-puzzle.md)
+ [CAPTCHA AWS WAF 和 Challenge 规则操作的工作原理](waf-captcha-and-challenge-how-it-works.md)
+ [使用 CAPTCHA 和Challenge 操作的最佳实践](waf-captcha-and-challenge-best-practices.md)

# AWS WAF 验证码拼图
<a name="waf-captcha-puzzle"></a>

本节介绍 AWS WAF 验证码拼图的特点和功能。

AWS WAF 提供标准的 CAPTCHA 功能，要求用户确认自己是人类。验证码代表完全自动化的公共图灵测试，用于区分计算机和人类。验证码拼图旨在验证人类是否在发送请求，并防止网页抓取、凭证填充和垃圾邮件等活动。验证码拼图无法清除所有不需要的请求。许多拼图已经可以通过机器学习和人工智能来完成。为了规避验证码，一些组织通过人工干预来补充自动化技术。尽管如此，验证码仍然是防止不太复杂的机器人流量和增加大规模运营所需资源的有用工具。

AWS WAF 随机生成其 CAPTCHA 谜题并轮流浏览它们，以确保向用户提供独特的挑战。 AWS WAF 定期添加新的谜题类型和风格，以保持对抗自动化技术的有效性。除了谜题之外， AWS WAF CAPTCHA脚本还收集有关客户端的数据，以确保任务由人类完成并防止重播攻击。

每个验证码拼图都包含一组标准控件，供最终用户申请新拼图、在音频和视觉拼图之间切换、访问其他说明以及提交拼图解决方案。所有拼图都支持屏幕阅读器、键盘控制和对比色。

 AWS WAF CAPTCHA 拼图符合《网络内容无障碍指南》(WCAG) 的要求。有关信息，请参阅万维网联盟 (W3C) 网站上的[网络内容无障碍指南 (WCAG) 概述](https://www.w3.org/WAI/standards-guidelines/wcag/)。

**Topics**
+ [验证码拼图的语言支持](waf-captcha-puzzle-language-support.md)
+ [验证码拼图示例](waf-captcha-puzzle-examples.md)

# 验证码拼图的语言支持
<a name="waf-captcha-puzzle-language-support"></a>

本节列出了 AWS WAF 验证码拼图支持哪些语言。

验证码拼图从采用客户端浏览器语言的书面指令开始，如果不支持浏览器语言，则使用英语。拼图通过下拉菜单提供了其他语言选项。

用户可以通过选择页面底部的耳机图标来切换到音频指令。音频版拼图提供文本的口语说明，用户应将其键入文本框中的文本，上面叠加了背景噪音。

下表列出了可以为验证码拼图中的书面指令选择的语言以及每种选择的音频支持。


**AWS WAF CAPTCHA 拼图支持的语言**  

| 书面指令支持 | 区域代码 | 音频指令支持 | 
| --- | --- | --- | 
|  阿拉伯语  |  ar-SA  |  阿拉伯语  | 
|  简体中文  |  zh-CN  |  英语音频  | 
|  荷兰料理  |  nl-NL  |  荷兰料理  | 
|  English  |  en-US  |  English  | 
|  法式料理  |  fr-FR  |  法式料理  | 
|  德语  |  de-DE  |  德国料理  | 
|  意大利料理  |  it-IT  |  意大利料理  | 
|  日式料理  |  ja-JP  |  英语音频  | 
|  巴西葡萄牙语  |  pt-BR  |  巴西葡萄牙语  | 
|  西班牙料理  |  es-ES  |  西班牙料理  | 
|  土耳其料理  |  tr-TR  |  土耳其料理  | 

# 验证码拼图示例
<a name="waf-captcha-puzzle-examples"></a>

典型的可视验证码拼图需要交互来表明用户可以理解一张或多张图像并与之交互。

以下屏幕截图显示了图片网格拼图的示例。该拼图需要您在网格中选择包含特定类型物体的所有图片。

![\[屏幕中包含“确认您是人类”标题和“选择所有椅子”文本。文字下方是一个 3x3 的网格图，其中一些图含有椅子，而其他图则含有非椅子物体，例如床和窗户。屏幕底部有加载其他拼图、切换信息框进入和关闭视野、切换到音频拼图以及更改语言的选项。底部还有“确认”按钮。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/CAPTCHAPuzzleGrid.png)


音频拼图提供背景噪音，上面有关于用户应在文本框中键入的文本的口语说明。

以下屏幕截图显示音频拼图选项的显示。

![\[屏幕包含标题“完成拼图”和“点击播放听取说明”文本。文字下方是一张显示播放按钮的图片。图片下方是“音频切换键：Alt + 空格”文本。下面是标题“输入您的答案”，下方有一个文本输入框。打开的信息框中写着“听取录音并在文本框中输入您的答案即可解答问题”。屏幕底部有加载其他拼图、切换信息框和切换到视觉拼图的选项。底部还有提交按钮。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/CAPTCHAPuzzleAudio.png)




# CAPTCHA AWS WAF 和 Challenge 规则操作的工作原理
<a name="waf-captcha-and-challenge-how-it-works"></a>

本节介绍了 CAPTCHA 和 Challenge 的工作方式。

AWS WAF CAPTCHA并且Challenge是标准规则操作，因此它们相对容易实现。要使用其中任何一个，您需要为规则创建检查条件，以确定要检查的请求，然后指定两个规则操作之一。有关规则操作选项的一般信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

除了从服务器端实现静默挑战和验证码谜题外，你还可以在你的 JavaScript iOS 和 Android 客户端应用程序中集成静默挑战，也可以在客户端中渲染验证码拼图。 JavaScript 这些集成使您能够为最终用户提供更好的性能和验证码拼图体验，还可以降低与使用规则操作和智能威胁缓解规则组相关的成本。有关这些选项的详细信息，请参阅[中的客户端应用程序集成 AWS WAF](waf-application-integration.md)。有关定价信息，请参阅 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**Topics**
+ [CAPTCHA 和 Challenge 操作行为](waf-captcha-and-challenge-actions.md)
+ [CAPTCHA 和 Challenge 日志和指标中的操作](waf-captcha-and-challenge-logs-metrics.md)

# CAPTCHA 和 Challenge 操作行为
<a name="waf-captcha-and-challenge-actions"></a>

本节介绍了 CAPTCHA 和 Challenge 操作的作用。

当 Web 请求与规则的检查标准相匹配CAPTCHA或Challenge操作时，将根据其令牌状态和免疫时间配置来 AWS WAF 确定如何处理请求。 AWS WAF 还会考虑请求是否可以处理验证码拼图或挑战脚本插页式广告。这些脚本被设计为作为 HTML 内容处理，只有期望 HTML 内容的客户端才能正确处理它们。

**注意**  
当您在其中一个规则中使用 CAPTCHA 或 Challenge 规则操作或在规则组中将其作为规则操作覆盖时，您需要支付额外费用。有关更多信息，请参阅[AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

**操作如何处理 web 请求**  
AWS WAF 按如下方式对 Web 请求应用CAPTCHA或Challenge操作：
+ **有效令牌** — AWS WAF 处理方式与Count操作类似。 AWS WAF 应用您为规则操作配置的所有标签和请求自定义，然后使用保护包 (Web ACL) 中的其余规则继续评估请求。
+ **令牌丢失、无效或已过期** — AWS WAF 停止对请求的保护包 (Web ACL) 评估并阻止其前往预期目的地。

  AWS WAF 根据规则操作类型生成一个响应，然后将其发送回客户端：
  + **Challenge**： AWS WAF 在响应字段中包含以下内容：
    + 值为 `challenge` 的标头 `x-amzn-waf-action`。
**注意**  
对于在客户端浏览器中运行的 Javascript 应用程序，此标头仅在应用程序的域中可用。标头不可用于跨域检索。有关详细信息，请参阅以下部分。
    + HTTP 状态代码 `202 Request Accepted`。
    + 如果请求包含值为的`Accept`标头`text/html`，则响应将包括带有质询脚本的JavaScript 页面插页式广告。
  + **CAPTCHA**— 在响应中 AWS WAF 包括以下内容：
    + 值为 `captcha` 的标头 `x-amzn-waf-action`。
**注意**  
对于在客户端浏览器中运行的 Javascript 应用程序，此标头仅在应用程序的域中可用。标头不可用于跨域检索。有关详细信息，请参阅以下部分。
    + HTTP 状态代码 `405 Method Not Allowed`。
    + 如果请求包含值为的`Accept`标头`text/html`，则响应将包含带有验证码脚本的JavaScript 页面插页式广告。

要在保护包（web ACL）或规则级别配置令牌到期时间，请参阅 [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。

**在客户端浏览器中运行的 JavaScript 应用程序无法使用标头**  
当使用验证码或质询 AWS WAF 响应来响应客户端请求时，它不包括跨源资源共享 (CORS) 标头。CORS 标头是一组访问控制标头，它们告诉客户端 Web 浏览器 JavaScript应用程序可以使用哪些域、HTTP 方法和 HTTP 标头。如果没有 CORS 标头，在客户端浏览器中运行的 JavaScript 应用程序将无法访问 HTTP 标头，因此无法读取CAPTCHA和Challenge响应中提供的`x-amzn-waf-action`标头。

**质询和验证码插页式广告的用途**  
当质询插页式广告运行时，在客户端成功响应之后，如果它还没有令牌，则插页式广告会为其初始化一个令牌。然后，它会使用质询解题时间戳更新令牌。

当验证码插页式广告运行时，如果客户端还没有令牌，验证码插页式广告会首先调用质询脚本来质询浏览器并初始化令牌。然后，插页式广告运行了验证码拼图。当最终用户成功完成拼图后，插页式广告会使用验证码解算时间戳更新令牌。

无论哪种情况，在客户端成功响应并且脚本更新令牌后，脚本都会使用更新的令牌重新提交原始 web 请求。

您可以配置如何 AWS WAF 处理令牌。有关信息，请参阅[代币在 AWS WAF 智能威胁缓解中的使用](waf-tokens.md)。

# CAPTCHA 和 Challenge 日志和指标中的操作
<a name="waf-captcha-and-challenge-logs-metrics"></a>

本节介绍如何 AWS WAF 处理和Challenge操作的日志CAPTCHA和指标。

CAPTCHA 和 Challenge 操作可以是非终止的，如 Count，也可以是终止的，如 Block。结果取决于请求是否具有有效令牌以及该操作类型的未过期时间戳。
+ **有效令牌**-当操作找到有效令牌且未阻止请求时，会按以下方式 AWS WAF 捕获指标和日志：
  + 增加 `CaptchaRequests` 和 `RequestsWithValidCaptchaToken` 或 `ChallengeRequests` 和 `RequestsWithValidChallengeToken` 的指标。
  + 将匹配项记录为带有 CAPTCHA 或 Challenge 操作的 `nonTerminatingMatchingRules` 条目。以下列表显示了与 CAPTCHA 操作相关的此类匹配的日志部分。

    ```
        "nonTerminatingMatchingRules": [
        {
          "ruleId": "captcha-rule",
          "action": "CAPTCHA",
          "ruleMatchDetails": [],
          "captchaResponse": {
            "responseCode": 0,
            "solveTimestamp": 1632420429
          }
        }
      ]
    ```
+ 令牌@@ **丢失、无效或已过期-当操作因令牌**丢失或无效而阻止请求时，会按以下方式 AWS WAF 捕获指标和日志：
  + 增加 `CaptchaRequests` 或 `ChallengeRequests` 的指标。
  + 将匹配项记录为带有 HTTP `405` 状态码的 `CaptchaResponse` 条目或带有 HTTP `202` 状态码的 `ChallengeResponse` 条目。该日志会显示请求是缺少令牌还是时间戳已过期。该日志还会显示是 AWS WAF 向客户端发送了 CAPTCHA 插页式页面还是向客户端浏览器发送了静默质询。以下列表显示了与 CAPTCHA 操作相关的此类匹配的日志部分。

    ```
        "terminatingRuleId": "captcha-rule",
        "terminatingRuleType": "REGULAR",
        "action": "CAPTCHA",
        "terminatingRuleMatchDetails": [],
        ...
        "responseCodeSent": 405,
        ...
        "captchaResponse": {
          "responseCode": 405,
          "solveTimestamp": 0,
          "failureReason": "TOKEN_MISSING"
        }
    ```

有关 AWS WAF 日志的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

有关 AWS WAF 指标的信息，请参阅[AWS WAF 指标和维度](waf-metrics.md)。

有关规则操作选项的一般信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

**没有令牌的请求似乎会在日志和指标中出现了两次**  
根据 [CAPTCHA 和 Challenge 操作行为](waf-captcha-and-challenge-actions.md) 和本节所述的日志记录和指标，没有令牌的请求通常会在日志和指标中出现两次。这是因为一条预期请求实际上由客户端发送了两次。
+ 第一个不带令牌的请求接收上述对缺失、无效或过期令牌的日志和指标处理。CAPTCHA 或 Challenge 操作会终止第一个请求，然后用静默质询或验证码拼图响应客户端。
+ 客户端评估质询或拼图，如果客户端浏览器或最终用户成功响应，则使用新获得的令牌再次发送请求。第二个请求接收上述对带有有效令牌的请求的日志和指标处理。

# 使用 CAPTCHA 和Challenge 操作的最佳实践
<a name="waf-captcha-and-challenge-best-practices"></a>

按照本节中的指导来计划和实施 AWS WAF CAPTCHA 或质疑。

**规划您的验证码并质询实施**  
根据您的网站使用情况、要保护的数据的敏感度以及请求的类型，确定在哪里放置验证码拼图或静默质询。选择您要应用验证码的请求，这样您就可以根据需要展示拼图，但要避免在没有用处且可能降低用户体验的地方展示拼图。使用该Challenge操作来运行静默挑战，这些挑战对最终用户影响较小，但仍有助于验证请求是否来自 JavaScript 已启用的浏览器。

只有当浏览器访问 HTTPS 端点时，才能运行验证码拼图和静默质询。浏览器客户端必须在安全环境中运行才能获取令牌。

**决定在哪里对您的客户进行验证码拼图和静默质询**  
确定您不希望受到验证码影响的请求，例如对 CSS 或图像的请求。仅在必要时使用验证码。例如，如果您计划在登录时进行验证码检查，并且用户总是直接从登录到另一个屏幕，则可能不需要在第二个屏幕上进行验证码检查，这可能会降低您的最终用户体验。

配置Challenge并CAPTCHA使用，以便 AWS WAF 仅在响应请求时发送验证码谜题和静默挑战。`GET` `text/html`您不能运行拼图或质询来响应 `POST` 请求、跨源资源共享 (CORS) 预检 `OPTIONS` 请求或任何其他非 `GET` 请求类型。其他请求类型的浏览器行为可能有所不同，可能无法正确处理插页式广告。

客户可以接受 HTML，但仍然无法处理验证码或质询插页式广告。例如，带有小 iFrame 的网页上的控件可能接受 HTML，但无法显示或处理验证码。避免为这些类型的请求设置规则操作，就像对不接受 HTML 的请求一样。

**使用 CAPTCHA 或 Challenge 验证之前的令牌获取**  
在合法用户应始终拥有有效令牌的地方，您只能使用规则操作来验证是否存在有效令牌。在这些情况下，请求能否处理插页式广告并不重要。

例如，如果您实现了 JavaScript 客户端应用程序 CAPTCHA API，并在向受保护的端点发送第一个请求之前立即在客户端上运行 CAPTCHA 拼图，则您的第一个请求应始终包含对质询和验证码均有效的令牌。有关 JavaScript 客户端应用程序集成的信息，请参见[AWS WAF JavaScript 集成](waf-javascript-api.md)。

对于这种情况，您可以在保护包（web ACl）中添加与第一个调用匹配的规则，并使用 Challenge 或 CAPTCHA 规则操作对其进行配置。当规则与合法的最终用户和浏览器匹配时，该操作将找到有效的令牌，因此不会阻止请求或发送质询或验证码拼图作为响应。有关规则操作的工作原理的更多信息，请参阅 [CAPTCHA 和 Challenge 操作行为](waf-captcha-and-challenge-actions.md)。

**使用和保护带有 CAPTCHA 和 Challenge 的敏感非 HTML 数据**  
你可以使用验证码和对敏感的非 HTML 数据的Challenge保护，比如APIs，采用以下方法。

1. 识别接受 HTML 响应且与敏感的非 HTML 数据的请求非常接近的请求。

1. 编写与 HTML 请求相匹配且与敏感数据请求相匹配的 CAPTCHA 或 Challenge 规则。

1. 调整您的 CAPTCHA 和 Challenge 免疫时间设置，以便在正常的用户交互中，客户端从 HTML 请求中获得的令牌在请求您的敏感数据时可用且未过期。有关调整信息，请参阅 [将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。

当对您的敏感数据的请求与 CAPTCHA 或 Challenge 规则匹配时，如果客户端仍有来自先前拼图或质询的有效令牌，则该请求不会被阻止。如果令牌不可用或时间戳已过期，则访问您的敏感数据的请求将失败。有关规则操作的工作原理的更多信息，请参阅 [CAPTCHA 和 Challenge 操作行为](waf-captcha-and-challenge-actions.md)。

**使用验证码和 Challenge 以调整现有规则**  
查看您的现有规则，看看是否要修改或添加这些规则。以下是一些需要考虑的常见情况。
+ 如果您有阻止流量的基于速率的规则，但为了避免阻止合法用户，则将速率限制保持在相对较高的水平，请考虑在阻止规则之后添加第二条基于速率的规则。为第二条规则指定比阻止规则更低的限制，并将规则操作设置为 CAPTCHA 或 Challenge。阻止规则仍会阻止速率过高的请求，而新规则将以更低的速率阻止大多数自动流量。有关基于速率的规则的更多信息，请参阅 [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)。
+ 如果您有阻止请求的托管规则组，则可以将部分或全部规则的行为从 Block 切换到 CAPTCHA 或 Challenge。为此，请在托管规则组配置中，覆盖规则操作设置。有关覆盖规则操作的信息，请参阅 [规则组规则操作的覆盖](web-acl-rule-group-override-options.md#web-acl-rule-group-override-options-rules)。

**在部署之前先测试您的验证码和质疑实施方案**  
至于所有新功能，请按照 [测试和调整您的 AWS WAF 保护措施](web-acl-testing.md) 中的指导进行操作。

在测试期间，请查看您的令牌时间戳到期要求，并设置您的 web ACL 和规则级别免疫时间配置，以便在控制网站访问权限和为客户提供良好体验之间取得良好的平衡。有关信息，请参阅[将时间戳到期时间和令牌免疫时间设置为 AWS WAF](waf-tokens-immunity-times.md)。

# 保护包 (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. 当您完成选择后，请选择**保存**。界面返回到**日志记录和指标**选项卡，其中已汇总您的选择。

# 测试和调整您的 AWS WAF 保护措施
<a name="web-acl-testing"></a>

本节提供测试和调整 AWS WAF 保护包 (Web ACLs)、规则、规则组、IP 集和正则表达式模式集的指导。

我们建议您先测试和调整对 AWS WAF 保护包 (Web ACL) 所做的任何更改，然后再将其应用于您的网站或 Web 应用程序流量。

**生产流量风险**  
在为生产流量部署保护包（web ACL）实施之前，请在暂存或测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。然后，在启用之前，在计数模式下使用生产流量对规则进行测试和调整。

本节还为测试您使用由其他人管理的规则组提供了一般指导。其中包括 AWS 托管规则规则组、 AWS Marketplace 托管规则组以及其他账户与您共享的规则组。对于这些规则组，还要遵循规则组提供程序提供的任何指导。
+ 有关机器人控制 AWS 托管规则组的信息，另请参阅[测试和部署 AWS WAF 机器人控制](waf-bot-control-deploying.md)。
+ 有关账户盗用防护 AWS 托管规则组的信息，另请参阅[测试和部署 ATP](waf-atp-deploying.md)。
+ 有关账户创建防欺诈 AWS 托管规则组的信息，另请参阅[测试和部署 ACFP](waf-acfp-deploying.md)。

**更新期间暂时出现不一致**  
创建或更改保护包 (Web ACL) 或其他 AWS WAF 资源时，更改需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。

以下示例是更改传播过程中可能暂时出现的不一致：
+ 创建保护包（web ACL）后，如果您尝试将其与资源关联，则可能会出现异常，指示保护包（web ACL）不可用。
+ 将规则组添加到保护包（web ACL）后，新的规则组规则可能在某个使用保护包（web ACL）的区域生效，而在另一个区域不生效。
+ 更改规则操作设置后，可能会在某些位置显示旧操作而在另一些位置显示新操作。
+ 将 IP 地址添加到阻止规则中使用的 IP 集后，新地址可能会在一个区域中被阻止，而在另一个区域中仍然允许。

# 测试和调整高级步骤
<a name="web-acl-testing-high-level"></a>

本节提供了测试 web ACL 更改的步骤列表，包括其使用的任何规则或规则组。

**注意**  
要按照本节中的指导进行操作，您需要了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组。本指南前面部分将介绍该信息。

**测试和调整您的保护包（web ACL）**

首先在测试环境中执行这些步骤，然后在生产环境中执行这些步骤。

1. 

**准备测试**

   准备好监控环境，将新 AWS WAF 保护切换到计数模式进行测试，并创建所需的任何资源关联。

   请参阅[为测试您的 AWS WAF 防护做好准备](web-acl-testing-prep.md)。

1. 

**在测试和生产环境中进行监控和调整**

   首先在测试或暂存环境中监控和调整您的 AWS WAF 保护措施，然后在生产环境中监控和调整您的保护措施，直到您确信它们可以根据需要处理流量。

   请参阅[监控和调整您的 AWS WAF 保护措施](web-acl-testing-activities.md)。

1. 

**在生产环境中启用保护功能**

   当您对测试保护感到满意时，请将其切换到生产模式，清理所有不必要的测试工件，然后继续监控。

   请参阅[在生产环境中启用保护](web-acl-testing-enable-production.md)。

完成变更实施后，请继续监控生产环境中的 web 流量和保护，以确保它们按您想要的方式运行。Web 流量模式可能会随着时间的推移而发生变化，因此您可能需要偶尔调整保护。

# 为测试您的 AWS WAF 防护做好准备
<a name="web-acl-testing-prep"></a>

本节介绍如何进行设置以测试和调整 AWS WAF 保护措施。

**注意**  
要遵循本节中的指导，您需要大致了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组。本指南前面部分将介绍该信息。

**准备测试**

1. 

**为保护包 (Web ACL) 启用保护包 (Web ACL) 日志、Amazon CloudWatch 指标和网络请求采样 (Web ACL)**

   使用日志记录、指标和采样，以监控保护包（web ACL）规则与 web 流量的交互情况。
   + **日志记录**-您可以配置 AWS WAF 为记录保护包 (Web ACL) 评估的 Web 请求。您可以将日志发送到日 CloudWatch 志、亚马逊 S3 存储桶或 Amazon Data Firehose 传输流。您可以编辑字段并应用筛选。有关更多信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.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)。
   + **Amazon CloudWatch 指标** — 在您的保护包 (Web ACL) 配置中，提供您要监控的所有内容的指标规范。您可以通过 AWS WAF 和 CloudWatch控制台查看指标。有关更多信息，请参阅 [使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。
   + **web 请求采样**：您可以查看保护包（web ACL）评估的所有 Web 请求示例。有关 web 请求采样的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

1. 

**将保护设置为 Count 模式**

   在保护包（web ACL）配置中，将要测试的任何内容切换到计数模式。这会使测试保护在不改变请求处理方式的情况下记录与 web 请求的匹配情况。您将能够在指标、日志和采样请求中看到匹配项，以验证匹配条件并了解可能对您的 web 流量产生的影响。无论规则操作如何，向匹配请求添加标签的规则都将添加标签。
   + **保护包（web ACL）中定义的规则**：编辑保护包（web ACL）中的规则，并将其操作设置为 Count。
   + **规则组**：在 保护包（web ACL）配置中，编辑规则组的规则语句，然后在**规则**窗格中打开**覆盖所有规则操作**下拉列表，并选择 **Count**。如果您以 JSON 格式管理保护包（web ACL），请将规则添加到规则组参考语句的 `RuleActionOverrides` 设置中，`ActionToUse` 设置为 Count。以下示例列表显示了 “`AWSManagedRulesAnonymousIpList` AWS 托管规则” 规则组中两个规则的替代。

     ```
       "ManagedRuleGroupStatement": {
         "VendorName": "AWS",
         "Name": "AWSManagedRulesAnonymousIpList",
           "RuleActionOverrides": [
             {
               "ActionToUse": {
                 "Count": {}
               },
               "Name": "AnonymousIPList"
             },
             {
               "ActionToUse": {
                 "Count": {}
               },
               "Name": "HostingProviderIPList"
             }
           ],
           "ExcludedRules": []
         }
       },
     ```

     有关规则操作覆盖的更多信息，请参阅 [覆盖规则组的规则操作](web-acl-rule-group-settings.md#web-acl-rule-group-rule-action-override)。

     对于您自己的规则组，请勿修改规则组本身中的规则操作。带有 Count 操作的规则组规则不会生成测试所需的指标或其他工件。此外，更改规则组会影响使用该规则组的所有保护包 (Web ACLs)，而保护包 (Web ACL) 配置中的更改仅影响单个保护包 (Web ACL)。
   + **保护包（web ACL）**：如果您正在测试新的保护包（web ACL），请将保护包（web ACL）的默认操作设置为允许请求。这使您可以试用 web ACL，而不会以任何方式影响流量。

   通常，计数模式生成的匹配项多于生产模式。这是因为计算请求数的规则不会阻止保护包（web ACL）对请求的评估，因此稍后在保护包（web ACL）中运行的规则也可能与请求匹配。当您将规则操作更改为生产设置时，允许或阻止请求的规则将终止对它们匹配的请求的评估。因此，通常会由保护包（web ACL）中较少的规则来检查匹配的请求。有关规则操作对 web 请求总体评估的效果的更多信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

   使用这些设置，您的新保护不会改变 web 流量，但会在指标、保护包（web ACL）日志和请求样本中生成匹配信息。

1. 

**将保护包（web ACL）与资源关联**

   如果保护包（web ACL）尚未与资源关联，请将其关联。

   请参阅[将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。

您现在可以监控和调整保护包（web ACL）。

# 监控和调整您的 AWS WAF 保护措施
<a name="web-acl-testing-activities"></a>

监控和调整您的 AWS WAF 保护措施。

**注意**  
要遵循本节中的指导，您需要大致了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组。本指南前面部分将介绍该信息。

监控 web 流量和规则匹配以验证保护包（web ACL）的行为。如果您发现问题，请调整规则以进行更正，然后进行监控以验证调整。

重复以下步骤，直到保护包（web ACL）根据需要管理您的 web 流量。

**监控和调整**

1. 

**监控流量和规则匹配情况**

   确保流量畅通，并且您的测试规则正在找到匹配的请求。

   请查看以下信息，了解您正在测试的保护：
   + **日志**：访问与 web 请求匹配的规则的相关信息：
     + **您的规则**：保护包（web ACL）中具有 Count 操作的规则列在 `nonTerminatingMatchingRules` 下。带有 Allow 或 Block 的规则列为 `terminatingRule`. 根据规则匹配的结果，带有 CAPTCHA 或 Challenge 的规则可以是终止的，也可以是非终止的，因此列在两个类别之一下。
     + **规则组**：在 `ruleGroupId` 字段中标识规则组，其规则匹配的分类与独立规则的分类相同。
     + **标签**：`Labels` 字段中列出了规则已应用于请求的标签。

     有关更多信息，请参阅 [保护包（web ACL）流量的日志字段](logging-fields.md)。
   + **Amazon CloudWatch 指标** — 您可以访问保护包 (Web ACL) 请求评估的以下指标。
     + **您的规则**：指标按照规则操作进行分组。例如，如果在 Count 模式下测试规则，则其匹配项列为保护包（web ACL）的 `Count` 指标。
     + **您的规则组**：您的规则组指标列在规则组指标下。
     + **其他账户拥有的规则组**：规则组指标通常只有规则组的所有者可见。但是，如果覆盖了某个规则的规则操作，则该规则的指标将列示在保护包（web ACL）指标下。此外，任何规则组添加的标签都会列示在您的保护包（web ACL）指标中 

       规则组中的计数操作规则不会发出 Web ACL 维度指标， RuleGroup仅发出 “规则” 和 “区域” 维度。即使在 Web ACL 中引用了规则组，这也适用。

       此类别中的规则组 [AWS 的托管规则 AWS WAF](aws-managed-rule-groups.md)、[AWS Marketplace 规则组](marketplace-rule-groups.md)、[识别其他服务提供的规则组](waf-service-owned-rule-groups.md) 以及其他账户与您共享的规则组。通过 Firewall Manager 部署保护包（web ACL）时，WebACL 中使用计数操作的任何规则均不会在成员账户中显示其指标。
     + **标签**：评估期间添加到 web 请求的标签列在保护包（web ACL）的标签指标中。您可以访问所有标签的指标，无论这些指标是由您的规则和规则组添加的，还是由其他账户拥有的规则添加的。

     有关更多信息，请参阅 [查看 web ACL 的指标](web-acl-testing-view-metrics.md)。
   + **保护包 (Web ACL) 流量概述仪表板** — 访问 AWS WAF 控制台中的保护包 (Web ACL) 页面并打开 “流量**概述” 选项卡，即可访问保护包 (Web ACL) 已评估的 Web 流量**摘要。

     流量概述控制面板提供了在评估您的应用程序网络流量时 AWS WAF 收集的 Amazon CloudWatch 指标的近乎实时的摘要。

     有关更多信息，请参阅 [保护包的流量概述仪表板 (Web ACLs)](web-acl-dashboards.md)。
   + **采样的 web 请求**：访问与 web 请求样本相匹配的规则的信息。示例信息通过保护包（web ACL）中规则的指标名称来标识匹配的规则。对于规则组，该指标标识规则组参考语句。对于规则组内的规则，该示例在中列出了匹配的规则名称 `RuleWithinRuleGroup`。

     有关更多信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

1. 

**配置缓解以解决误报**

   如果您确定某条规则正在生成误报，则通过在不应该出现误报的时候匹配 web 请求，则以下选项可帮助您调整保护包（web ACL）保护以缓解误报。

**更正规则检查条件**  
对于您自己的规则，您通常只需要调整用于检查 web 请求的设置即可。示例包括更改正则表达式模式集中的规范，调整在检查之前应用于请求组件的文本转换，或者切换到使用转发 IP 地址。有关导致问题的规则类型，请参阅 [在中使用规则语句 AWS WAF](waf-rule-statements.md) 下方的指南。

**更正复杂的问题**  
对于您无法控制的检查条件和某些复杂的规则，您可能需要进行其他更改，例如添加明确允许或阻止请求的规则，或者通过有问题的规则将请求排除在评估范围之外的规则。托管规则组通常需要这种缓解，但其他规则也可以。示例包括基于速率的规则语句和 SQL 注入攻击规则语句。

   如何减少误报，因使用案例而异。以下是常规方法：
   + **添加缓解规则**：添加一条规则，该规则在新规则之前运行，并明确允许导致误报的请求。有关 web ACL 中规则评估顺序的信息，请参阅 [设置规则优先级](web-acl-processing-order.md)。

     通过这种方法，允许的请求会被发送到受保护的资源，因此它们永远不会达到新的评估规则。如果新规则是付费托管规则组，则此方法还有助于控制使用该规则组的费用。
   + **添加带有缓解规则的逻辑规则**：使用逻辑规则语句将新规则与排除误报的规则相结合。有关信息，请参阅[在中使用逻辑规则语句 AWS WAF](waf-rule-statements-logical.md)。

     例如，假设您正在添加一个 SQL 注入攻击匹配语句，该语句会为某类请求生成误报。创建与这些请求相匹配的规则，然后使用逻辑规则语句组合这些规则，这样您就可以只匹配两个请求都不符合误报条件且确实符合 SQL 注入攻击条件的请求。
   + **添加范围缩小语句**：对于基于速率的语句和托管规则组引用语句，通过在主语句中添加范围向下语句，将导致误报的请求排除在评估之外。

     与范围缩小语句不匹配的请求永远不会到达规则组或基于速率的评估。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。有关示例，请参阅[从机器人管理中排除 IP 范围](waf-bot-control-example-scope-down-ip.md)。
   + **添加标签匹配规则**：对于使用标签的规则组，请确定有问题的规则应用于请求的标签。如果您尚未在计数模式下设置规则组规则，则可能需要先将规则组规则设置为计数模式。添加一个标签匹配规则，该规则位于规则组之后运行，该规则与有问题的规则所添加的标签相匹配。在标签匹配规则中，您可以筛选要允许的请求和要阻止的请求。

     如果您使用这种方法，则在完成测试后，请在规则组中将有问题的规则保持在计数模式，并保留您的自定义标签匹配规则。有关标签匹配语句的信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md)。有关示例，请参阅 [允许特定的被阻止机器人](waf-bot-control-example-allow-blocked-bot.md) 和 [ATP 示例：针对缺失和被盗凭证的自定义处理](waf-atp-control-example-user-agent-exception.md)。
   + **更改托管规则组的版本**：对于版本控制的托管规则组，请更改您正在使用的版本。例如，您可以切换回已成功使用的最后一个静态版本。

     这通常是临时修复。在测试或暂存环境中继续测试最新版本时，或者在等待提供程序提供更兼容的版本时，您可以更改生产流量的版本。有关托管规则组版本的信息，请参阅 [在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)。

如果您对新规则可以根据您的需要匹配请求感到满意，请进入下一阶段的测试并重复此过程。在您的生产环境中执行测试和调整的最后阶段。

# 查看 web ACL 的指标
<a name="web-acl-testing-view-metrics"></a>

本节介绍如何查看保护包（web ACL）的指标。

将保护包 (Web ACL) 与一个或多个 AWS 资源关联后，您可以在 Amazon CloudWatch 图表中查看关联生成的指标。

有关 AWS WAF 指标的信息，请参阅[AWS WAF 指标和维度](waf-metrics.md)。有关 CloudWatch 指标的信息，请参阅 [Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)。

对于保护包 (Web ACL) 中的每条规则以及关联资源转发到 AWS WAF 的保护包 (Web ACL) 的所有请求， CloudWatch 您可以执行以下操作：
+ 查看前一个小时或前三个小时的数据。
+ 更改数据点之间的间隔。
+ 更改对数据 CloudWatch 执行的计算，例如最大值、最小值、平均值或总和。

**注意**  
AWS WAF w CloudFront ith 是一项全球服务，只有当您在中选择**美国东部（弗吉尼亚北部）**地区时，才可使用指标 AWS 管理控制台。如果您选择其他区域，则 CloudWatch控制台中将不会显示任何 AWS WAF 指标。

**查看保护包（web ACL）中规则的数据**

1. 登录 AWS 管理控制台 并打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 如有必要，请将区域更改为 AWS 资源所在的区域。对于 CloudFront，请选择美国东部（弗吉尼亚北部）区域。

1. 在导航窗格的**指标**下，选择**所有指标**，然后在**浏览**选项卡下搜索`AWS::WAFV2`。

1. 选中要查看其数据的保护包（web ACL）对应的复选框。

1. 更改适用的设置：  
**Statistic**  
选择对数据 CloudWatch 执行的计算。  
**时间范围**  
选择您要查看前一个小时还是前三个小时的数据。  
**周期**  
选择图表中的数据点之间的间隔。  
**Rules**  
选择要查看其数据的规则。  
如果您更改了规则的名称，并且希望该规则的指标名称反映更改，则还必须更新该指标名称。 AWS WAF 当您更改规则名称时，不会自动更新规则的指标名称。在控制台中编辑规则时，您可以使用规则 JSON 编辑器更改指标名称。您还可以通过 APIs 和更改用于定义保护包 (Web ACL) 或规则组的任何 JSON 列表中的名称。

   注意以下几点：
   + 如果您最近将保护包 (Web ACL) 与 AWS 资源相关联，则可能需要等待几分钟，数据才会显示在图表中，保护包的指标 (Web ACL) 才会出现在可用指标列表中。
   + 如果您将多个资源与保护包（Web ACL）相关联，则 CloudWatch数据将包括对所有资源的请求。
   + 您可以将鼠标光标悬停在数据点上方，以获取更多信息。
   + 该图表不会自动自行刷新。要更新显示，请选择刷新（![\[Icon to refresh the CloudWatch graph\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/cloudwatch-refresh-icon.png)）图标。

有关 CloudWatch 指标的更多信息，请参阅[使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。

# 保护包的流量概述仪表板 (Web ACLs)
<a name="web-acl-dashboards"></a>

本节介绍 AWS WAF 控制台中的保护包（web ACL）流量概述控制面板。将保护包 (Web ACL) 与一个或多个 AWS 资源关联并启用保护包 (Web ACL) 的指标后，您可以访问 AWS WAF 控制台中的保护包 (Web ACL) 的流量**概述选项卡，访问保护包 (Web ACL) 评估的 Web 流量**摘要。控制面板包含在评估您的应用程序网络流量时 AWS WAF 收集的 Amazon CloudWatch 指标的近乎实时的摘要，包括专门的 AI 机器人和代理活动分析。

**注意**  
如果在控制面板上看不到任何内容，请确保为保护包（web ACL）启用了指标。

保护包（web ACL）的**流量概述**选项卡包含具有以下类别信息的选项卡式控制面板：
+ **重要安全见解** — 通过直接查询 Amazon CloudWatch 日志 AWS WAF 获得的有关您的 AWS WAF 保护的见解。仪表板的其余部分使用这些 CloudWatch 指标。这些见解提供了更丰富的信息，但会增加查询 CloudWatch 日志的成本。有关额外费用的信息，请参阅 [Amazon CloudWatch 日志定价](https://aws.amazon.com/cloudwatch/pricing/)。
+ **AI 流量分析** — 针对 AI 机器人和代理活动的 Web 请求进行分析，包括机器人识别、意图分类、访问模式和时间趋势。当您的保护包 (Web ACL) 收到 AI 机器人流量时，此选项卡可用
+ **所有流量**：保护包（web ACL）评估的所有 web 请求。

  控制面板重点是终止操作，但您可以在以下位置查看计数规则的匹配项：
  + 此控制面板的**前 10 条规则**窗格。切换**切换到计数操作**以显示计数规则匹配项。
  + 保护包（web ACL）页面的**采样请求**选项卡。此新选项卡包括所有规则匹配的图表。有关信息，请参阅[查看 web 请求示例](web-acl-testing-view-sample.md)。
+ **Ant DDo i-S** — 保护包 (Web ACL) 使用`AntiDDoSRuleSet`反 DDo S 托管规则组评估的 Web 请求。

  只有在保护包（web ACL）中使用此规则组时，此选项卡才可用。
+ **机器人控制功能**：保护包（web ACL）使用机器人控制功能托管规则组评估的 Web 请求。
+ 如果您未在保护包（web ACL）中使用此规则组，则此选项卡会显示根据机器人控制功能规则评估 web 流量样本的结果。这让您可以了解您的应用程序收到的机器人流量，并且是免费的。

  此规则组是 AWS WAF 提供的智能威胁缓解选项的一部分。有关更多信息，请参阅[AWS WAF 机器人控制](waf-bot-control.md)和[AWS WAF 机器人控制规则组](aws-managed-rule-groups-bot.md)。
+ **账户盗用防**护 — 保护包 (Web ACL) 使用 AWS WAF 欺诈控制账户接管防护 (ATP) 托管规则组评估的 Web 请求。只有在保护包（web ACL）中使用此规则组时，此选项卡才可用。

  ATP 规则组是 AWS WAF 智能威胁缓解产品的一部分。有关更多信息，请参阅[AWS WAF 防欺诈控制账户接管 (ATP)](waf-atp.md)和[AWS WAF 防欺诈控制账户盗用 (ATP) 规则组](aws-managed-rule-groups-atp.md)。
+ **账户创建防作弊** — 保护包 (Web ACL) 使用 AWS WAF 欺诈控制账户创建防作弊 (ACFP) 托管规则组评估的 Web 请求。只有在保护包（web ACL）中使用此规则组时，此选项卡才可用。

  ACFP 规则组是 AWS WAF 智能威胁缓解产品的一部分。有关更多信息，请参阅[AWS WAF 欺诈控制账户创建欺诈预防 (ACFP)](waf-acfp.md)和[AWS WAF 欺诈控制账户创建防作弊 (ACFP) 规则组](aws-managed-rule-groups-acfp.md)。

仪表板基于保护包 (Web ACL) 的 CloudWatch 指标，通过图表可以访问中的相应指标 CloudWatch。对于智能威胁缓解控制面板（如机器人控制功能），使用的指标主要是标签指标。
+ 有关 AWS WAF 提供的指标列表，请参阅[AWS WAF 指标和维度](waf-metrics.md)。
+ 有关 CloudWatch 指标的信息，请参阅 [Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)。

控制面板提供您选择的终止操作和日期范围的流量模式摘要。无论托管规则组本身是否应用终止操作，智能威胁缓解控制面板都包含相应托管规则组评估的请求。例如，如果选中 Block，则**账户盗用防护**控制面板将包含所有 web 请求的信息，这些请求既由 ATP 托管规则组评估，又在保护包（web ACL）评估期间的某个时候被阻止。请求可以由 ATP 托管规则组、在保护包（web ACL）中规则组之后运行的规则或 web ACL 的默认操作来阻止。

# 查看保护包（web ACL）的控制面板
<a name="web-acl-dashboards-accessing"></a>

按照本节中的步骤访问保护包（web ACL）控制面板并设置数据筛选条件。如果您最近将保护包 (Web ACL) 与 AWS 资源相关联，则可能需要等待几分钟才能在仪表板中显示数据。

控制面板包括对已与保护包（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)**，然后搜索您感兴趣的 Web ACL。

1. 选择保护包（web ACL）。控制台会将您转到保护包（web ACL）的页面。**流量概述**默认处于选中状态。

1. 根据需要更改**数据筛选器**设置。
   + **终止规则操作**：选择要包含在控制面板中的终止操作。控制面板汇总了 web 请求的指标，这些请求具有由保护包（web ACL）评估应用的选定操作之一。如果您选择所有可用操作，则控制面板将包含所有已评估的 web 请求。有关操作的信息，请参阅 [如何 AWS WAF 处理规则和规则组操作](web-acl-rule-actions.md)。
   + **时间范围**：选择要在控制面板中查看的时间间隔。您可以选择查看相对于现在的时间范围，例如过去 3 小时或上周，也可以从日历中选择绝对时间范围。
   + **时区**：当您指定绝对时间范围时，此设置适用。您可以使用浏览器的本地时区或 UTC（协调世界时）。

查看选项卡中您感兴趣的信息。数据筛选器选项适用于所有控制面板。在图表窗格中，您可以将光标悬停在数据点或区域上方以查看任何其他详细信息。

**Count 行动规则**  
您可以在两个位置之一查看计数操作匹配的信息。
+ 在此**流量概述**选项卡中，在**所有流量**控制面板上，找到**前 10 条规则**窗格并切换**切换到计数操作**。启用此切换后，窗格将显示计数规则匹配，而不是终止规则匹配。
+ 在保护包（web ACL）的**采样请求**选项卡中，查看您在**流量概述**选项卡上所设置时间范围内所有规则匹配项和操作的图表。有关**采样请求**选项卡的信息，请参阅 [查看 web 请求示例](web-acl-testing-view-sample.md)。

**亚马逊 CloudWatch 指标**  
在仪表板图表窗格中，您可以访问图表化数据的 CloudWatch 指标。选择图表窗格顶部或窗格内 **⋮**（垂直省略号）下拉菜单中的选项。

**刷新控制面板**  
控制面板不会自动刷新。要更新显示，请选择刷新 ![\[Icon to refresh the dashboard graph\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/cloudwatch-refresh-icon.png) 图标。

# 保护包流量概览仪表板示例 (Web ACLs)
<a name="web-acl-dashboards-screenshots"></a>

本节显示了保护包 (Web ACLs) 的流量概述仪表板的示例屏幕。

**注意**  
如果您已经在使用 AWS WAF 保护应用程序资源，则可以在 AWS WAF 控制台的页面上查看任何保护包 (Web ACLs) 的仪表板。有关信息，请参阅[查看保护包（web ACL）的控制面板](web-acl-dashboards-accessing.md)。

**屏幕示例：数据筛选器和**所有流量**控制面板操作计数**  
以下屏幕截图描绘了选中**所有流量**选项卡的保护包（web ACL）流量概览。数据筛选器设置为默认值：过去三个小时内的所有终止操作。

所有流量控制面板内是各种终止操作的操作总数。每个窗格都列出了请求计数，并显示一个 up/down 箭头，表示自前三个小时的时间范围以来的变化。

![\[AWS WAF 控制台显示保护包 (Web ACL) 页面的 “流量概述” 选项卡，其中选择了默认的数据过滤器。终止规则操作选项包括 Block、Allow、CAPTCHA 和 Challenge。数据筛选器部分下方是所有流量、机器人控制功能和账户盗用防护的选项卡。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/web-acl-dashboard-data-filters-default-top-actions.png)


**屏幕示例：**机器人控制功能**面板操作计数**  
以下屏幕截图描绘了机器人控制功能控制面板的操作计数。这显示了时间范围内的相同总数窗格，但计数仅适用于机器人控制功能规则组评估的请求。再往下看，在**操作总计**窗格中，您可以看到指定的三小时时间范围内的操作计数。在此时间范围内，该 CAPTCHA 操作未应用于规则组评估的任何请求。

![\[AWS WAF 控制台显示 Bot Control 控制面板的顶部，包括时间范围内的操作总数和整个时间范围内的操作总数。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/web-acl-dashboard-bot-action-totals.png)


**屏幕示例：**AI 流量分析仪表板控制**面板操作计数**  
以下屏幕截图描绘了保护包 (Web ACL) 的 AI 流量分析控制面板。仪表板显示选定时间范围内的 AI 机器人活动，并筛选机器人组织、意图类型和验证状态。

![\[AWS WAF 控制台显示 AI Traffic Analysis 仪表板的顶部，其中包含时间范围内的顶级抓取工具和顶级路径以及整个时间范围内的操作总数。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/waf-phantom-edge-dashboard.png)


仪表板包括：
+ **机器人身份面板** — 列出检测到的 AI 机器人，包括名称和组织
+ **意图分类** — 对机器人目的进行分类（抓取、索引、研究等）
+ **访问模式** — AI 代理 URLs 访问次数最多的请求数
+ **时间分析** — 每小时和每日活动趋势，提供 14 天历史视图
+ **组织细分 — 按**机器人所有者组织划分的流量

**屏幕示例：**机器人控制功能控制**面板令牌状态摘要图表**  
以下屏幕截图描绘了机器人控制功能控制面板中提供的两个摘要图形。**令牌状态**窗格显示各种令牌状态标签的计数，以及应用于请求的规则操作。**IP 令牌缺失阈值**窗格显示了在没有令牌的情况下发送过多请求的请求的数据。 IPs 

将鼠标悬停在图表中的任何区域上方会显示可用的信息详细信息。在此屏幕截图的**令牌状态**窗格中，鼠标将鼠标悬停在某个时间点上，而不在任何图形线上，因此控制台会显示该时间点所有线的数据。

![\[AWS WAF 控制台显示两个窗格，分别显示令牌状态和 IP 令牌缺失阈值，每个窗格中都有类似的被屏蔽请求和已质疑请求的曲线。令牌状态窗格中还有一个显示允许请求的图表。\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/images/web-acl-dashboard-bot-token-panes.png)


本部分仅显示保护包（web ACL）流量概述控制面板中提供的部分流量摘要。要查看任何保护包 (Web ACLs) 的控制面板，请在控制台中打开保护包 (Web ACL) 的页面。有关如何执行此操作的信息，请参阅 [查看保护包（web ACL）的控制面板](web-acl-dashboards-accessing.md) 上的指导。

# 查看 web 请求示例
<a name="web-acl-testing-view-sample"></a>

本节介绍 AWS WAF 控制台中的保护包 (Web ACL) **采样请求**选项卡。在此选项卡中，您可以查看 AWS WAF 已检查的 Web 请求的所有规则匹配项的图表。此外，如果您为保护包（Web ACL）启用了请求采样，则可以看到 AWS WAF 已检查的 Web 请求样本的表格视图。您还可以通过 API 调用 `GetSampledRequests` 检索抽样请求信息。

请求采样包含多达 100 个符合保护包（web ACL）规则条件的请求，另有 100 个请求不符合任何规则，但应用了保护包（web ACL）默认操作。样本中的请求来自所有受保护的资源，这些资源在过去三小时内收到了对您内容的请求。

当 Web 请求与规则中的条件相匹配且该规则的操作未终止请求评估时， AWS WAF 将继续使用保护包 (Web ACL) 中的后续规则检查 Web 请求。因此，web 请求可能会多次出现。有关规则操作行为的信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。

**查看所有规则图表和采样请求**

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. 在**采样请求**选项卡中，您可以看到以下内容：
   + **所有规则图表**：此图表显示在指定时间范围内执行的所有 web 请求评估的匹配规则和规则操作。
**注意**  
此图表的时间范围在保护包（web ACL）**流量概述**选项卡的**数据筛选器**部分中设置。有关信息，请参阅[查看保护包（web ACL）的控制面板](web-acl-dashboards-accessing.md)。
   + **采样请求表** - 此表显示过去 3 小时的采样请求数据。
**注意**  
如果您没有看到预期的托管规则组示例，请参阅此过程以下的部分。

     对于每个条目，该表显示下列数据：  
**指标名称**  
与请求匹配的保护包 (Web ACL) 中规则的 CloudWatch 指标名称。如果 web 请求与保护包（web ACL）中的任何规则都不匹配，则此值为**默认**值。  
如果您更改了规则的名称，并且希望该规则的指标名称反映更改，则还必须更新该指标名称。 AWS WAF 当您更改规则名称时，不会自动更新规则的指标名称。在控制台中编辑规则时，您可以使用规则 JSON 编辑器更改指标名称。您也可以通过 APIs 和在用于定义保护包 (Web ACL) 或规则组的任何 JSON 列表中更改两个名称。  
**源 IP**  
该请求来自的 IP 地址或（如果查看者使用 HTTP 代理或应用程序负载均衡器发送请求）代理或应用程序负载均衡器的 IP 地址。  
**URI**  
URL 中标识资源的部分 (例如 `/images/daily-ad.jpg`)。  
**规则组中的规则数**  
如果指标名称标识了规则组参考语句，则该语句标识了规则组中与该请求相匹配的规则。  
**Action**  
指示对应规则的操作。有关可能的规则操作的信息，请参阅 [在中使用规则操作 AWS WAF](waf-rule-action.md)。  
Web ACL 视图中不提供规则组中带有 Count 操作的规则的抽样请求。只有规则组所有者才能看到计数指标和规则组规则的采样请求。  
**时间**  
从受保护资源 AWS WAF 收到请求的时间。

     要显示有关 web 请求组成部分的其他信息，请在请求行中选择 URI 的名称。

**托管规则组中规则的采样请求**  
控制台显示规则组的指标，其中 “规则组内的规则” 指定了触发的规则。您可以使用最新`RuleActionOverrides`设置查看默认操作规则集和规则的指标。对于使用旧`ExcludedRules`设置的规则，请从 “**采样请求**” 指标规则下拉列表中选择规则集中的特定规则。

如果您看到较旧的设置，请使用新设置进行替换，以开始通过控制台提供采样请求。您可以通过控制台编辑保护包（web ACL）中的托管规则组并将其保存以完成此操作。 AWS WAF 自动使用 `RuleActionOverrides` 设置替换任何较旧的设置，并将规则操作覆盖设置为 Count。有关这两种设置的更多信息，请参阅 [JSON 列表：`RuleActionOverrides` 取代 `ExcludedRules`](web-acl-rule-group-override-options.md#web-acl-rule-group-override-replaces-exclude)。

您可以通过 AWS WAF REST API 或命令行访问已使用旧覆盖的规则的采样请求。 SDKs有关信息，请参阅 *AWS WAF API 参考[GetSampledRequests](https://docs.aws.amazon.com/waf/latest/APIReference/API_GetSampledRequests.html)*中的。

以下说明命令行请求的语法：

```
aws wafv2 get-sampled-requests \
  --web-acl-arn webACL ARN \
  --rule-metric-name Metric name of the rule in the managed rule group \
  --scope=REGIONAL or CLOUDFRONT \
  --time-window StartTime=UTC timestamp,EndTime=UTC timestamp \
  --max-items 100
```

# 在生产环境中启用保护
<a name="web-acl-testing-enable-production"></a>

本节提供了在生产环境中启用调整后保护的说明。

在生产环境中完成最后阶段的测试和调整后，请在生产模式下启用保护。

**生产流量风险**  
在为生产流量部署保护包（web ACL）实施之前，请在测试环境中对其进行测试和调整，直到您对流量可能产生的影响感到满意。在启用对生产流量的保护之前，还要在计数模式下对其进行测试和调整。

**注意**  
要遵循本节中的指导，您需要大致了解如何创建和管理 AWS WAF 保护包 (Web ACLs)、规则和规则组。本指南前面部分将介绍该信息。

首先在测试环境中执行这些步骤，然后在生产环境中执行这些步骤。

**在生产环境中启用 AWS WAF 保护**

1. 

**切换到您的生产保护**

   更新您的保护包（web ACL）并切换您的生产设置。

   1. 

**删除您不需要的所有测试规则**

      如果您添加了在生产中不需要的测试规则，请将其删除。如果您使用任何标签匹配规则来筛选托管规则组规则的结果，请务必保留这些规则。

   1. 

**切换为生产操作**

      将新规则的操作设置更改为预期的生产设置。
      + **保护包（web ACL）中定义的规则**：编辑保护包（web ACL）中的规则，并将其操作从 Count 更改为生产操作。
      + **规则组**：在规则组的保护包（web ACL）配置中，根据测试和调整活动的结果，将规则切换为使用自己的操作或保留 Count 操作覆盖。如果您使用标签匹配规则来筛选规则组规则的结果，请务必保留该规则的替代规则。

        要切换到使用规则的操作，请在您的保护包（web ACL）配置中，编辑规则组的规则语句并删除该规则的 Count 覆盖。如果您以 JSON 格式管理保护包（web ACL），则在规则组参考语句中，从 `RuleActionOverrides` 列表中删除该规则的条目。
      + **保护包（web ACL）**：如果您更改了测试的保护包（web ACL）默认操作，请将其切换到生产设置。

      通过这些设置，您的新保护将按照您的意图管理 web 流量。

   保存保护包（web ACL）时，与之关联的资源将使用您的生产设置。

1. 

**监控和调整**

   为确保按照您的要求处理 web 请求，请在启用新功能后密切监控流量。您将监控生产规则操作的指标和日志，而不是您在调整工作中监控的计数操作。继续监控并根据需要调整行为，以适应 web 流量的变化。

# 在 Amazon AWS WAF 上使用 CloudFront
<a name="cloudfront-features"></a>

了解如何 AWS WAF 与 Amazon CloudFront 功能配合使用。

创建保护包 (Web ACL) 时，可以指定 AWS WAF 要检查的一个或多个 CloudFront 发行版。 CloudFront 支持两种类型的分配：保护单个租户的标准分配和通过单个共享配置模板保护多个租户的多租户分配。 AWS WAF 根据您在保护包 (Web ACLs) 中定义的规则检查两种分发类型的 Web 请求，每种类型的实现模式各不相同。

**Topics**
+ [AWS WAF 如何处理不同的分发类型](#cloudfront-features-distribution-types)
+ [AWS WAF 与 CloudFront 统一费率定价计划一起使用](#waf-cf-pricing-plans)
+ [保护 CloudFront 发行版的常见用例 AWS WAF](cloudfront-waf-use-cases.md)

## AWS WAF 如何处理不同的分发类型
<a name="cloudfront-features-distribution-types"></a>

### 分配类型
<a name="distribution-types-overview"></a>

AWS WAF 为标准和多租户 CloudFront 分发版本提供 Web 应用程序防火墙功能。

#### 标准分配
<a name="standard-distribution-overview"></a>

对于标准发行版，使用单个保护包 (Web ACL) 为每个发行版 AWS WAF 添加保护。您可以通过将现有保护包 (Web ACL) 与 CloudFront 发行版关联或在控制台中使用一键保护来启用此保护。 CloudFront 这使您可以独立管理每个分配的安全控制，因为对保护包（web ACL）的任何更改都仅影响与其关联的分配。

这种保护 CloudFront 分布的简单方法最适合通过单个保护包（Web ACL）为单个域名提供特定保护。

##### 标准分配注意事项
<a name="standard-waf-considerations"></a>
+ 对保护包（web ACL）的更改仅影响其关联的分配
+ 每个分配都需要独立的保护包（web ACL）配置
+ 每个分配的规则和规则组都单独进行管理

#### 多租户分配
<a name="tenant-distribution-overview"></a>

对于多租户分发，使用单个保护包 (Web ACL) 在多个域之间 AWS WAF 添加保护。由多租户分配管理的域称为分配租户。在多租户分配创建过程中或之后，您只能在 CloudFront 控制台中启用对多租户分配的 AWS WAF 保护。但是，对保护包（Web ACL）的更改仍通过 AWS WAF 控制台或 API 进行管理。

多租户分布提供了在两个级别上启用 AWS WAF 保护的灵活性：
+ **多租户分发级别** — 关联的保护包 (Web ACLs) 提供基本安全控制，适用于共享该分发的所有应用程序
+ **分发租户级别** — 多租户分布中的单个租户可以拥有自己的保护包 (Web ACLs) 来实施额外的安全控制或覆盖多租户分发设置

这两个层级使多租户分布最适合在多个域之间共享 AWS WAF 保护，而不会失去为单个分配自定义安全性的能力。

#### 多租户分配注意事项
<a name="tenant-waf-considerations"></a>
+ 个人分发租户继承对保护包 (Web ACLs) 所做的更改，这些更改与相关的多租户分发相关联
+ 与特定分发租户关联的保护包 (Web ACLs) 可以覆盖在多租户保护包 (Web ACL) 级别配置的设置
+ 托管规则组可在分配级别和分配租户级别实施
+ 应用程序标识符可在日志中找到，以便通过分配跟踪安全事件

### AWS WAF 按发行类型划分的功能
<a name="distribution-types-comparison"></a>


**比较保护包（web ACL）实施**  

| AWS WAF 特征 | 标准分配 | 多租户分配 | 
| --- | --- | --- | 
| 关联保护包 (Web ACLs) | 每个分配一个保护包（web ACL） | 您可以跨租户共享保护包 (Web ACLs)，以及可选的租户专用保护包 (Web) ACLs | 
| 规则管理 | 规则影响单个分配 | 多租户分配规则影响所有关联的租户；特定于分配租户的规则仅影响该租户 | 
| 托管规则组 | 已应用于单个分配 | 可以在多租户分配级别应用于所有租户，也可以在租户级别应用于特定应用程序 | 
| 日志记录 | 标准 AWS WAF 日志 | 日志包含用于安全事件归因的租户标识符 | 

## AWS WAF 与 CloudFront 统一费率定价计划一起使用
<a name="waf-cf-pricing-plans"></a>

CloudFront 统一费率定价计划将亚马逊 CloudFront 全球内容分发网络 (CDN) AWS 服务 与多种功能相结合，按月定价，不收取超额费用，无论流量激增或攻击如何。

统一费率定价计划包括以下内容 AWS 服务 和功能，仅按月收费：
+ CloudFront CDN
+ AWS WAF 和 DDo S 保护
+ 机器人管理和分析
+ Amazon Route 53 DNS
+ Amazon CloudWatch 日志提取
+ TLS 证书
+ 无服务器边缘计算
+ 每月 Amazon S3 存储服务抵扣金

方案分为免费、专业、商业和高级层级，可满足您应用程序的不同需求。计划无需每年承诺即可获得最优惠的价格。您可从免费版方案开始，然后升级以获得更多功能与更高的使用量限额。

有关更多信息以及计划和功能的完整列表，请参阅《*Amazon CloudFront 开发者指南*》中的[CloudFront 统一费率定价计划](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/flat-rate-pricing-plan.html)。

**重要**  
使用任何定价计划时，有效的 AWS WAF 保护包 (Web ACL) 都必须与您的 CloudFront 发行版保持关联。除非切换回 pay-as-you-go定价，否则无法删除保护包 (Web ACL) 关联。  
虽然 AWS WAF Web ACL 必须与您的发行版保持关联，但您可以完全控制自己的安全配置。您可以通过调整 Web ACL 中启用或禁用的规则来自定义防护，也可以修改规则设置以满足您的安全要求。有关管理 Web ACL 规则的信息，请参阅[AWS WAF 规则](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html)。

# 保护 CloudFront 发行版的常见用例 AWS WAF
<a name="cloudfront-waf-use-cases"></a>

以下 AWS WAF 功能在所有 CloudFront 发行版中的作用方式相同。以下每个功能场景均列出多租户分配的注意事项。

## AWS WAF 与 CloudFront 自定义错误页面一起使用
<a name="cloudfront-features-custom-error-pages"></a>

默认情况下，当根据您指定的条件 AWS WAF 阻止 Web 请求时，它会`403 (Forbidden)`向查看者返回 HTTP 状态码 CloudFront，并将该状态代码 CloudFront 返回给查看者。然后，查看器显示简要且采用稀疏格式的默认消息，如下所示：

```
Forbidden: You don't have permission to access /myfilename.html on this server.
```

您可以通过定义自定义响应来覆盖 AWS WAF 保护包 (Web ACL) 规则中的此行为。有关使用 AWS WAF 规则自定义响应行为的更多信息，请参阅[发送 Block 操作的自定义响应](customizing-the-response-for-blocked-requests.md)。

**注意**  
使用 AWS WAF 规则自定义的响应优先于您在 CloudFront 自定义错误页面中定义的任何响应规范。

如果您希望通过 CloudFront显示自定义错误消息（可能使用与网站其余部分相同的格式），则可以配置 CloudFront 为向查看者返回包含自定义错误消息的对象（例如 HTML 文件）。

**注意**  
CloudFront 无法区分您的来源返回的 HTTP 状态码 403 和请求被阻止 AWS WAF 时返回的 HTTP 状态码 403。这意味着，您无法根据 HTTP 状态代码 403 的不同原因返回不同的自定义错误页面。

有关 CloudFront 自定义错误页面的更多信息，请参阅 *Amazon CloudFront 开发者指南*中的[生成自定义错误响应](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/GeneratingCustomErrorResponses.html)。

### 多租户分配的自定义错误页面
<a name="custom-error-pages-template-distributions"></a>

对于 CloudFront 多租户分发，您可以通过以下方式配置自定义错误页面：
+ 在多租户级别：这些设置适用于使用多租户分配模板的所有租户分配
+ 通过 AWS WAF 规则-在保护包 (Web ACLs) 中定义的自定义响应优先于多租户分发和租户级别的自定义错误页面

## AWS WAF 与一起 CloudFront 用于在您自己的 HTTP 服务器上运行的应用程序
<a name="cloudfront-features-your-own-http-server"></a>

 AWS WAF 与一起使用时 CloudFront，您可以保护在任何 HTTP 网络服务器上运行的应用程序，无论是在亚马逊弹性计算云 (Amazon EC2) 中运行的网络服务器，还是您私下管理的网络服务器。您也可以配置 CloudFront 为要求在 CloudFront 和您自己的 Web 服务器之间以及查看者和 CloudFront之间使用 HTTPS。

**需要在 CloudFront 和你自己的网络服务器之间使用 HTTPS**  
要要求在 CloudFront 和您自己的网络服务器之间使用 HTTPS，您可以使用 CloudFront 自定义源功能，并为特定**来源配置源协议策略****和源域名**设置。在您的 CloudFront 配置中，您可以指定服务器的 DNS 名称以及从源中获取对象时 CloudFront 要使用的端口和协议。您还应确保自定义源服务器上的 SSL/TLS 证书与您配置的源域名相匹配。在以外使用自己的 HTTP Web 服务器时 AWS，必须使用由受信任的第三方证书颁发机构 (CA) 签名的证书，例如 Comodo 或 Symante DigiCert c。有关要求在 CloudFront 和您自己的网络服务器之间进行通信时需要 HTTPS 的更多信息，请参阅《*亚马逊 CloudFront 开发者指南*》中的 “[需要使用 HTTPS 才能 CloudFront 与您的自定义源进行通](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-cloudfront-to-custom-origin.html)信” 主题。

**要求在查看者和之间使用 HTTPS CloudFront**  
要要求在**查看者和之间使用 HTTPS CloudFront，您可以更改 CloudFront 分配中一个或多个缓存行为的查看者协议策略**。有关在观看者和之间使用 HTTPS 的更多信息 CloudFront，请参阅 *Amazon CloudFront 开发者指南 CloudFront*中的 “[观看者之间需要使用 HTTPS 才能进行通信](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-https-viewers-to-cloudfront.html)” 主题。例如，您也可以自带 SSL 证书，以便查看者可以使用自己的域名通过 HTTPS 连接到您的 CloudFront 发行版*https://www.mysite.com*。有关更多信息，请参阅 *Amazon CloudFront 开发者指南*中的[配置备用域名和 HTTPS](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-and-https-procedures.html) 主题。

对于多租户分配，HTTP 方法配置遵循此层次结构：
+ 模板级别的设置定义允许所有租户分配使用的基准 HTTP 方法
+ 租户分配可覆盖这些设置：
  + 允许的方法少于多租户分配（使用 AWS WAF 规则阻止其他方法）
  + 如果将多租户分配配置为支持更多方法，则允许使用更多方法
+ AWS WAF 无论配置如何，多租户分布和租户级别的规则都可以进一步限制 HTTP 方法 CloudFront 

## 选择 CloudFront 响应的 HTTP 方法
<a name="cloudfront-features-allowed-http-methods"></a>

创建 Amazon CloudFront 网络分配时，您可以选择要 CloudFront 处理的 HTTP 方法并将其转发到您的来源。可从以下选项中进行选择：
+ **`GET`，`HEAD`**— 您 CloudFront 只能使用从原点获取对象或获取对象标题。
+ **`GET`,`HEAD`, `OPTIONS`** — 您 CloudFront 只能使用从您的来源获取对象、获取对象标头或检索源服务器支持的选项列表。
+ **`GET`、`HEAD`、`OPTIONS`、`PUT``POST`、`PATCH`、、`DELETE`** — 您可以使用获 CloudFront 取、添加、更新和删除对象以及获取对象标题。此外，您可以执行其他 `POST` 操作，例如从 web 表格提交数据。

您还可以使用 AWS WAF 字节匹配规则语句来允许或阻止基于 HTTP 方法的请求，如中所述[字符串匹配规则语句](waf-rule-statement-type-string-match.md)。如果您想使用 CloudFront 支持的方法组合，例如`GET`和`HEAD`，则无需配置 AWS WAF 以阻止使用其他方法的请求。如果要允许组合 CloudFront 不支持的方法，例如`GET``HEAD``POST`、和，则可以配置 CloudFront 为响应所有方法，然后使用 AWS WAF 来阻止使用其他方法的请求。

有关选择 CloudFront 响应方法的更多信息，请参阅《*Amazon CloudFront 开发者指南*》中 “[您在创建或更新 Web 分配时指定的值](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html)” 主题中的 “[允许的 HTTP 方法](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesAllowedHTTPMethods)”。

**多租户分配中允许的 HTTP 方法配置**  
对于多租户分配，默认情况下，在多租户分配级别设置的 HTTP 方法配置适用于所有租户分配。如有需要，租户分配可覆盖这些设置。
+ 如果要使用 CloudFront 支持的方法组合，例如`GET`和`HEAD`，则无需配置 AWS WAF 以阻止使用其他方法的请求。
+ 如果要允许使用默认情况下 CloudFront 不支持的方法组合，例如`GET``HEAD``POST`、和，则可以配置 CloudFront 为响应所有方法，然后使用 AWS WAF 来阻止使用其他方法的请求。

在多租户分配中实施安全标头时，请考虑以下几点：
+ 模板级别的安全标头为所有租户分配提供基准保护
+ 租户分配可以：
  + 添加未在多租户分配中定义的新安全标头
  + 修改租户专用标头的值
  + 无法移除或覆盖在多租户分配级别设置的安全标头
+ 考虑使用多租户分配级别的标头实现应适用于所有租户的关键安全控制

## 日志记录注意事项
<a name="cloudfront-features-logging"></a>

标准版和多租户分发版都支持 AWS WAF 日志记录，但是日志的结构和管理方式有重要区别：


**日志记录比较**  

| 标准分配 | 多租户分配 | 
| --- | --- | 
| 每个分配一个日志配置 | 模板级别和租户级别的日志记录选项 | 
| 标准日志字段 | 其他租户标识符字段 | 
| 每个分配单个目标 | 可用于多租户分配和租户日志的单独目标 | 

## 其他资源
<a name="cloudfront-saas-additional-resources"></a>
+ 要了解有关多租户分配的更多信息，请参阅 *Amazon CloudFront 开发者指南*中的[配置分配](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)。
+ 要了解有关 AWS WAF 与一起使用的更多信息 CloudFront，请参阅《*Amazon CloudFront 开发者指南*》中的[使用 AWS WAF 保护](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-awswaf.html)。
+ 要了解有关 AWS WAF 日志的更多信息，请参阅[保护包（web ACL）流量的日志字段](logging-fields.md)。

# 您使用 AWS WAF 服务的安全性
<a name="security"></a>

本节说明了分担责任模型的适用方式 AWS WAF。

云安全 AWS 是重中之重。作为 AWS 客户，您可以受益于专为满足大多数安全敏感型组织的要求而构建的数据中心和网络架构。

**注意**  
本节为您使用 AWS WAF 服务及其 AWS 资源（例如 AWS WAF 保护包 (Web ACLs) 和规则组）提供标准 AWS 安全指导。  
有关使用保护 AWS 资源的信息 AWS WAF，请参阅 AWS WAF 指南的其余部分。

安全是双方共同承担 AWS 的责任。[责任共担模式](https://aws.amazon.com/compliance/shared-responsibility-model/)将其描述为云*的* 安全性和云*中* 的安全性：
+ **云安全** — AWS 负责保护在云中运行 AWS 服务的基础架构 AWS 云。 AWS 还为您提供可以安全使用的服务。作为 [AWS 合规性计划](https://aws.amazon.com/compliance/programs/)的一部分，我们的安全措施的有效性定期由第三方审计员进行测试和验证。要了解适用的合规计划 AWS WAF，请参阅[按合规计划划分的范围内的AWS 服务](https://aws.amazon.com/compliance/services-in-scope/)。
+ **云端安全**-您的责任由您使用的 AWS 服务决定。您还需要对其他因素负责，包括您的数据的敏感性、您组织的要求以及适用的法律法规。

本文档可帮助您了解在使用时如何应用分担责任模型 AWS WAF。以下主题向您介绍如何进行配置 AWS WAF 以满足您的安全和合规性目标。您还将学习如何使用其他 AWS 服务来帮助您监控和保护您的 AWS WAF 资源。

**Topics**
+ [保护您的数据 AWS WAF](data-protection.md)
+ [将 IAM 与 AWS WAF](security-iam.md)
+ [登录和监控 AWS WAF](waf-incident-response.md)
+ [验证合规性 AWS WAF](waf-compliance.md)
+ [增强抵御能力 AWS WAF](disaster-recovery-resiliency.md)
+ [基础设施安全 AWS WAF](infrastructure-security.md)

# 保护您的数据 AWS WAF
<a name="data-protection"></a>

分 AWS [担责任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)适用于中的数据保护 AWS WAF。如本模型所述 AWS ，负责保护运行所有内容的全球基础架构 AWS 云。您负责维护对托管在此基础结构上的内容的控制。您还负责您所使用的 AWS 服务 的安全配置和管理任务。有关数据隐私的更多信息，请参阅[数据隐私常见问题](https://aws.amazon.com/compliance/data-privacy-faq/)。有关欧洲数据保护的信息，请参阅 *AWS Security Blog* 上的 [AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 博客文章。

出于数据保护目的，我们建议您保护 AWS 账户 凭证并使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 设置个人用户。这样，每个用户只获得履行其工作职责所需的权限。还建议您通过以下方式保护数据：
+ 对每个账户使用多重身份验证（MFA）。
+ 用于 SSL/TLS 与 AWS 资源通信。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 使用设置 API 和用户活动日志 AWS CloudTrail。有关使用 CloudTrail 跟踪捕获 AWS 活动的信息，请参阅《*AWS CloudTrail 用户指南》*中的[使用跟 CloudTrail 踪](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解决方案以及其中的所有默认安全控件 AWS 服务。
+ 使用高级托管安全服务（例如 Amazon Macie），它有助于发现和保护存储在 Amazon S3 中的敏感数据。
+ 如果您在 AWS 通过命令行界面或 API 进行访问时需要经过 FIPS 140-3 验证的加密模块，请使用 FIPS 端点。有关可用的 FIPS 端点的更多信息，请参阅《美国联邦信息处理标准（FIPS）第 140-3 版》[https://aws.amazon.com/compliance/fips/](https://aws.amazon.com/compliance/fips/)。

强烈建议您切勿将机密信息或敏感信息（如您客户的电子邮件地址）放入标签或自由格式文本字段（如**名称**字段）。这包括您使用控制台、API AWS WAF 或以其他 AWS 服务 方式使用控制台 AWS CLI、API 或时 AWS SDKs。在用于名称的标签或自由格式文本字段中输入的任何数据都可能会用于计费或诊断日志。如果您向外部服务器提供 URL，强烈建议您不要在网址中包含凭证信息来验证对该服务器的请求。

AWS WAF 保护包 (Web ACLs)、规则组和 IP 集等实体均采用静态加密，但某些不提供加密的地区除外，包括中国（北京）和中国（宁夏）。每个区域使用唯一的加密密钥。

## 删除 AWS WAF 资源
<a name="deleting-resources"></a>

您可以删除您在 AWS WAF中创建的资源。请参阅以下各节中每种资源类型的指南。
+ [删除保护包（web ACL）](web-acl-deleting.md)
+ [删除规则组](waf-rule-group-deleting.md)
+ [删除 IP 集](waf-ip-set-managing.md#waf-ip-set-deleting)
+ [删除正则表达式模式集](waf-regex-pattern-set-managing.md#waf-regex-pattern-set-deleting)

# 将 IAM 与 AWS WAF
<a name="security-iam"></a>

本节介绍如何将 IAM 与配合使用 AWS WAF。



AWS Identity and Access Management (IAM) AWS 服务 可帮助管理员安全地控制对 AWS 资源的访问权限。IAM 管理员控制谁可以*进行身份验证*（登录）和*授权*（拥有权限）使用 AWS WAF 资源。您可以使用 IAM AWS 服务 ，无需支付额外费用。

**Topics**
+ [受众](#security_iam_audience)
+ [使用身份进行身份验证](#security_iam_authentication)
+ [使用策略管理访问](#security_iam_access-manage)
+ [如何 AWS WAF 与 IAM 配合使用](security_iam_service-with-iam.md)
+ [基于身份的策略示例 AWS WAF](security_iam_id-based-policy-examples.md)
+ [AWS 的托管策略 AWS WAF](security-iam-awsmanpol.md)
+ [对 AWS WAF 身份和访问进行故障排除](security_iam_troubleshoot.md)
+ [将服务相关角色用于 AWS WAF](using-service-linked-roles.md)

## 受众
<a name="security_iam_audience"></a>

您的使用方式 AWS Identity and Access Management (IAM) 因您的角色而异：
+ **服务用户**：如果您无法访问功能，请从管理员处请求权限（请参阅[对 AWS WAF 身份和访问进行故障排除](security_iam_troubleshoot.md)）
+ **服务管理员**：确定用户访问权限并提交权限请求（请参阅[如何 AWS WAF 与 IAM 配合使用](security_iam_service-with-iam.md)）
+ **IAM 管理员**：编写用于管理访问权限的策略（请参阅[基于身份的策略示例 AWS WAF](security_iam_id-based-policy-examples.md)）

## 使用身份进行身份验证
<a name="security_iam_authentication"></a>

身份验证是您 AWS 使用身份凭证登录的方式。您必须以 IAM 用户身份进行身份验证 AWS 账户根用户，或者通过担任 IAM 角色进行身份验证。

您可以使用来自身份源的证书 AWS IAM Identity Center （例如（IAM Identity Center）、单点登录身份验证或 Google/Facebook 证书，以联合身份登录。有关登录的更多信息，请参阅《AWS 登录 用户指南》**中的[如何登录您的 AWS 账户](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)。

对于编程访问， AWS 提供 SDK 和 CLI 来对请求进行加密签名。有关更多信息，请参阅*《IAM 用户指南》*中的[适用于 API 请求的AWS 签名版本 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)。

### AWS 账户 root 用户
<a name="security_iam_authentication-rootuser"></a>

 创建时 AWS 账户，首先会有一个名为 AWS 账户 *root 用户的*登录身份，该身份可以完全访问所有资源 AWS 服务 和资源。我们强烈建议不要使用根用户进行日常任务。有关需要根用户凭证的任务，请参阅《IAM 用户指南》**中的[需要根用户凭证的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

### 联合身份
<a name="security_iam_authentication-federated"></a>

作为最佳实践，要求人类用户使用与身份提供商的联合身份验证才能 AWS 服务 使用临时证书进行访问。

*联合身份是指*来自您的企业目录、Web 身份提供商的用户 Directory Service ，或者 AWS 服务 使用来自身份源的凭据进行访问的用户。联合身份代入可提供临时凭证的角色。

要集中管理访问权限，建议使用。 AWS IAM Identity Center有关更多信息，请参阅《AWS IAM Identity Center 用户指南》**中的[什么是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。

### IAM 用户和群组
<a name="security_iam_authentication-iamuser"></a>

*[IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*是对某个人员或应用程序具有特定权限的一个身份。建议使用临时凭证，而非具有长期凭证的 IAM 用户。有关更多信息，请参阅 *IAM 用户指南*[中的要求人类用户使用身份提供商的联合身份验证才能 AWS 使用临时证书进行访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)指定一组 IAM 用户，便于更轻松地对大量用户进行权限管理。有关更多信息，请参阅*《IAM 用户指南》*中的 [IAM 用户使用案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)。

### IAM 角色
<a name="security_iam_authentication-iamrole"></a>

*[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*是具有特定权限的身份，可提供临时凭证。您可以通过[从用户切换到 IAM 角色（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或调用 AWS CLI 或 AWS API 操作来代入角色。有关更多信息，请参阅《IAM 用户指南》**中的[担任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

IAM 角色对于联合用户访问、临时 IAM 用户权限、跨账户访问、跨服务访问以及在 Amazon EC2 上运行的应用程序非常有用。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

## 使用策略管理访问
<a name="security_iam_access-manage"></a>

您可以 AWS 通过创建策略并将其附加到 AWS 身份或资源来控制中的访问权限。策略定义了与身份或资源关联时的权限。 AWS 在委托人提出请求时评估这些政策。大多数策略都以 JSON 文档的 AWS 形式存储在中。有关 JSON 策略文档的更多信息，请参阅*《IAM 用户指南》*中的 [JSON 策略概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)。

管理员使用策略，通过定义哪个**主体**可以在什么**条件**下对哪些**资源**执行哪些**操作**来指定谁有权访问什么。

默认情况下，用户和角色没有权限。IAM 管理员创建 IAM 策略并将其添加到角色中，然后用户可以担任这些角色。IAM 策略定义权限，与执行操作所用的方法无关。

### 基于身份的策略
<a name="security_iam_access-manage-id-based-policies"></a>

基于身份的策略是您附加到身份（用户、组或角色）的 JSON 权限策略文档。这些策略控制身份可以执行什么操作、对哪些资源执行以及在什么条件下执行。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

基于身份的策略可以是*内联策略*（直接嵌入到单个身份中）或*托管策略*（附加到多个身份的独立策略）。要了解如何在托管策略和内联策略之间进行选择，请参阅*《IAM 用户指南》*中的[在托管策略与内联策略之间进行选择](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)。

### 基于资源的策略
<a name="security_iam_access-manage-resource-based-policies"></a>

基于资源的策略是附加到资源的 JSON 策略文档。示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

基于资源的策略是位于该服务中的内联策略。您不能在基于资源的策略中使用 IAM 中的 AWS 托管策略。

### 其他策略类型
<a name="security_iam_access-manage-other-policies"></a>

AWS 支持其他策略类型，这些策略类型可以设置更常见的策略类型授予的最大权限：
+ **权限边界** – 设置基于身份的策略可以授予 IAM 实体的最大权限。有关更多信息，请参阅《 IAM 用户指南》**中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。
+ **服务控制策略 (SCPs)**-在中指定组织或组织单位的最大权限 AWS Organizations。有关更多信息，请参阅《AWS Organizations 用户指南》**中的[服务控制策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)。
+ **资源控制策略 (RCPs)**-设置账户中资源的最大可用权限。有关更多信息，请参阅《*AWS Organizations 用户指南》*中的[资源控制策略 (RCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
+ **会话策略** – 在为角色或联合用户创建临时会话时，作为参数传递的高级策略。有关更多信息，请参阅《IAM 用户指南》**中的[会话策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)。

### 多个策略类型
<a name="security_iam_access-manage-multiple-policies"></a>

当多个类型的策略应用于一个请求时，生成的权限更加复杂和难以理解。要了解在涉及多种策略类型时如何 AWS 确定是否允许请求，请参阅 *IAM 用户指南*中的[策略评估逻辑](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)。

# 如何 AWS WAF 与 IAM 配合使用
<a name="security_iam_service-with-iam"></a>

本节介绍如何将 IAM 的功能与一起使用 AWS WAF。

在使用 IAM 管理访问权限之前 AWS WAF，请先了解哪些可用的 IAM 功能 AWS WAF。






**您可以搭配使用的 IAM 功能 AWS WAF**  

| IAM 功能 | AWS WAF 支持 | 
| --- | --- | 
|  [基于身份的策略](#security_iam_service-with-iam-id-based-policies)  |   是  | 
|  [基于资源的策略](#security_iam_service-with-iam-resource-based-policies)  |   是  | 
|  [策略操作](#security_iam_service-with-iam-id-based-policies-actions)  |   是  | 
|  [策略资源](#security_iam_service-with-iam-id-based-policies-resources)  |   是  | 
|  [策略条件键（特定于服务）](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   是  | 
|  [ACLs](#security_iam_service-with-iam-acls)  |   否   | 
|  [ABAC（策略中的标签）](#security_iam_service-with-iam-tags)  |   部分  | 
|  [临时凭证](#security_iam_service-with-iam-roles-tempcreds)  |   是  | 
|  [转发访问会话（FAS）](#security_iam_service-with-iam-principal-permissions)  |   是  | 
|  [服务角色](#security_iam_service-with-iam-roles-service)  |   是  | 
|  [服务关联角色](#security_iam_service-with-iam-roles-service-linked)  |   是  | 

要全面了解 AWS WAF 以及其他 AWS 服务如何与大多数 IAM 功能配合使用，请参阅 IAM *用户指南中的与 IAM* [配合使用的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## 基于身份的策略 AWS WAF
<a name="security_iam_service-with-iam-id-based-policies"></a>

**支持基于身份的策略：**是

基于身份的策略是可附加到身份（如 IAM 用户、用户组或角色）的 JSON 权限策略文档。这些策略控制用户和角色可在何种条件下对哪些资源执行哪些操作。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。要了解可在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素引用](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。

要查看 AWS WAF 基于身份的策略的示例，请参阅。[基于身份的策略示例 AWS WAF](security_iam_id-based-policy-examples.md)

## 内部基于资源的政策 AWS WAF
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**支持基于资源的策略：**是

基于资源的策略是附加到资源的 JSON 策略文档。基于资源的策略的示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。对于在其中附加策略的资源，策略定义指定主体可以对该资源执行哪些操作以及在什么条件下执行。您必须在基于资源的策略中[指定主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)。委托人可以包括账户、用户、角色、联合用户或 AWS 服务。

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

AWS WAF 使用基于资源的策略来支持跨账户共享规则组。通过向 AWS WAF API 调用或等效的 CLI `PutPermissionPolicy` 或 SDK 调用提供基于资源的策略设置，您可以与其他 AWS 账户共享您拥有的规则组。如需了解更多信息，包括其他可用语言的示例和文档链接，请参阅 AWS WAF API 参考[PutPermissionPolicy](https://docs.aws.amazon.com/waf/latest/APIReference/API_PutPermissionPolicy.html)中的。此功能无法通过其他方式使用，例如控制台或 CloudFormation。

## 的政策行动 AWS WAF
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**支持策略操作：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。



要查看每个 AWS WAF 操作和权限的列表，请参阅《*服务授权参考*》中的 [AWS WAF V2 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html#awswafv2-actions-as-permissions)。

正在执行的策略操作在操作前 AWS WAF 使用以下前缀：

```
wafv2
```

要在单个语句中指定多项操作，请使用逗号将它们隔开。

```
"Action": [
      "wafv2:action1",
      "wafv2:action2"
         ]
```



您也可以使用通配符（\$1）指定多个操作。例如，要指定以开头的所有操作`List`，请包括以下操作： AWS WAF 

```
"Action": "wafv2:List*"
```

要查看 AWS WAF 基于身份的策略的示例，请参阅。[基于身份的策略示例 AWS WAF](security_iam_id-based-policy-examples.md)

### 需要额外权限设置的操作
<a name="security_iam_action-additions"></a>

有些操作需要的权限无法在《*服务授权参考*》中的 [AWS WAF V2 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html#awswafv2-actions-as-permissions)中进行完整描述。本节提供其他权限信息。

**Topics**
+ [`AssociateWebACL` 权限](#security_iam_action-AssociateWebACL)
+ [`DisassociateWebACL` 权限](#security_iam_action-DisassociateWebACL)
+ [`GetWebACLForResource` 权限](#security_iam_action-GetWebACLForResource)
+ [`ListResourcesForWebACL` 权限](#security_iam_action-ListResourcesForWebACL)

#### `AssociateWebACL` 权限
<a name="security_iam_action-AssociateWebACL"></a>

本节列出使用 AWS WAF 操作 `AssociateWebACL` 将保护包（web ACL）与资源关联所需的权限。

对于 Amazon CloudFront 分配，请使用操作代替此 CloudFront 操作`UpdateDistribution`。有关信息，请参阅[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)《*亚马逊 CloudFront API 参考*》。

**Amazon API Gateway REST API**  
需要权限才能在 REST API 资源类型`SetWebACL`上调用 API Gateway 以及调用 AWS WAF `AssociateWebACL`保护包（Web ACL）。

```
{
    "Sid": "AssociateWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:AssociateWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "AssociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "apigateway:SetWebACL"
    ],
    "Resource": [
        "arn:aws:apigateway:*::/restapis/*/stages/*"
    ]
}
```

**应用程序负载均衡器**  
需要权限才能调用 Applicati `elasticloadbalancing:SetWebACL` on Load Balancer 资源类型和调用 AWS WAF `AssociateWebACL`保护包 (Web ACL)。

```
{
    "Sid": "AssociateWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:AssociateWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "AssociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "elasticloadbalancing:SetWebACL"
    ],
    "Resource": [
        "arn:aws:elasticloadbalancing:*:account-id:loadbalancer/app/*/*"
    ]
}
```

**AWS AppSync GraphQL API**  
需要权限才能调用 AWS AppSync `SetWebACL` GraphQL API 资源类型和调 AWS WAF `AssociateWebACL`用保护包（Web ACL）。

```
{
    "Sid": "AssociateWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:AssociateWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "AssociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "appsync:SetWebACL"
    ],
    "Resource": [
        "arn:aws:appsync:*:account-id:apis/*"
    ]
}
```

**Amazon Cognito 用户池**  
需要权限才能对用户池资源类型调用 Amazon Cognito `AssociateWebACL` 操作和调用 AWS WAF `AssociateWebACL`保护包（Web ACL）。

```
{
    "Sid": "AssociateWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:AssociateWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "AssociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "cognito-idp:AssociateWebACL"
    ],
    "Resource": [
        "arn:aws:cognito-idp:*:account-id:userpool/*"
    ]
}
```

**AWS App Runner 服务**  
需要权限才能对 App Runner 服务资源类型调用 App Runner `AssociateWebACL` 操作并调用 AWS WAF `AssociateWebACL` Web ACL。

```
{
    "Sid": "AssociateWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:AssociateWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "AssociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "apprunner:AssociateWebAcl"
    ],
    "Resource": [
        "arn:aws:apprunner:*:account-id:service/*/*"
    ]
}
```

**AWS 已验证访问实例**  
需要权限才能在 “已验证访问权限” 实例资源类型上调用`ec2:AssociateVerifiedAccessInstanceWebAcl`操作并调用 AWS WAF `AssociateWebACL` Web ACL。

```
{
    "Sid": "AssociateWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:AssociateWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "AssociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "ec2:AssociateVerifiedAccessInstanceWebAcl"
    ],
    "Resource": [
        "arn:aws:ec2:*:account-id:verified-access-instance/*"
    ]
}
```

#### `DisassociateWebACL` 权限
<a name="security_iam_action-DisassociateWebACL"></a>

本节列出了使用 AWS WAF 操作 `DisassociateWebACL` 将保护包（web ACL）与资源取消关联所需的权限。

对于 Amazon CloudFront 分配，请使用`UpdateDistribution`带有空保护包 (Web ACL) ID 的 CloudFront 操作，而不是此操作。有关信息，请参阅[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)《*亚马逊 CloudFront API 参考*》。

**Amazon API Gateway REST API**  
需要权限才能在 REST API 资源类型上调用 API Gateway `SetWebACL`。不需要通话许可 AWS WAF `DisassociateWebACL`。

```
{
    "Sid": "DisassociateWebACL",
    "Effect": "Allow",
    "Action": [
        "apigateway:SetWebACL"
    ],
    "Resource": [
        "arn:aws:apigateway:*::/restapis/*/stages/*"
    ]
}
```

**应用程序负载均衡器**  
需要权限才能在应用程序负载均衡器资源类型上调用 `elasticloadbalancing:SetWebACL` 操作。不需要通话许可 AWS WAF `DisassociateWebACL`。

```
{
    "Sid": "DisassociateWebACL",
    "Effect": "Allow",
    "Action": [
        "elasticloadbalancing:SetWebACL"
    ],
    "Resource": [
        "arn:aws:elasticloadbalancing:*:account-id:loadbalancer/app/*/*"
    ]
}
```

**AWS AppSync GraphQL API**  
需要权限才能调用 AWS AppSync `SetWebACL` GraphQL API 资源类型。不需要通话许可 AWS WAF `DisassociateWebACL`。

```
{
    "Sid": "DisassociateWebACL",
    "Effect": "Allow",
    "Action": [
        "appsync:SetWebACL"
    ],
    "Resource": [
        "arn:aws:appsync:*:account-id:apis/*"
    ]
}
```

**Amazon Cognito 用户池**  
需要权限才能对用户池资源类型调用 Amazon Cognito `DisassociateWebACL` 操作并进行调用。 AWS WAF `DisassociateWebACL`

```
{
    "Sid": "DisassociateWebACL1",
    "Effect": "Allow",
    "Action": "wafv2:DisassociateWebACL",
    "Resource": "*"
},
{
    "Sid": "DisassociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "cognito-idp:DisassociateWebACL"
    ],
    "Resource": [
        "arn:aws:cognito-idp:*:account-id:userpool/*"
    ]
}
```

**AWS App Runner 服务**  
需要权限才能在 App Runner 服务资源类型上调用 App Runner `DisassociateWebACL` 操作并进行调用 AWS WAF `DisassociateWebACL`。

```
{
    "Sid": "DisassociateWebACL1",
    "Effect": "Allow",
    "Action": "wafv2:DisassociateWebACL",
    "Resource": "*"
},
{
    "Sid": "DisassociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "apprunner:DisassociateWebAcl"
    ],
    "Resource": [
        "arn:aws:apprunner:*:account-id:service/*/*"
    ]
}
```

**AWS 已验证访问实例**  
需要权限才能在 “已验证访问权限” 实例资源类型上调用`ec2:DisassociateVerifiedAccessInstanceWebAcl`操作并进行调用 AWS WAF `DisassociateWebACL`。

```
{
    "Sid": "DisassociateWebACL1",
    "Effect": "Allow",
    "Action": "wafv2:DisassociateWebACL",
    "Resource": "*"
},
{
    "Sid": "DisassociateWebACL2",
    "Effect": "Allow",
    "Action": [
        "ec2:DisassociateVerifiedAccessInstanceWebAcl"
    ],
    "Resource": [
        "arn:aws:ec2:*:account-id:verified-access-instance/*"
    ]
}
```

#### `GetWebACLForResource` 权限
<a name="security_iam_action-GetWebACLForResource"></a>

本节列出使用 AWS WAF 操作 `GetWebACLForResource` 获取受保护资源的保护包（web ACL）所需的权限。

对于 Amazon CloudFront 分配，请使用操作代替此 CloudFront 操作`GetDistributionConfig`。有关信息，请参阅[GetDistributionConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetDistributionConfig.html)《*亚马逊 CloudFront API 参考*》。

**注意**  
`GetWebACLForResource` 需要调用 `GetWebACL` 的权限。在这种情况下，`GetWebACL`仅 AWS WAF 用于验证您的账户是否具有访问`GetWebACLForResource`返回的保护包 (Web ACL) 所需的权限。当您致电时`GetWebACLForResource`，您可能会收到一条错误消息，表明您的账户无权使用`wafv2:GetWebACL`该资源。 AWS WAF 不会将此类错误添加到 AWS CloudTrail 事件历史记录中。

**亚马逊 API Gateway REST API、Application Load Balancer 和 AWS AppSync GraphQL API**  
需要通话 AWS WAF `GetWebACLForResource`权限才能`GetWebACL`使用保护包（Web ACL）。

```
{
    "Sid": "GetWebACLForResource",
    "Effect": "Allow",
    "Action": [
        "wafv2:GetWebACLForResource",
        "wafv2:GetWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
}
```

**Amazon Cognito 用户池**  
需要权限才能对用户池资源类型调用 Amazon Cognito `GetWebACLForResource` 操作以及调 AWS WAF `GetWebACLForResource`用和。`GetWebACL`

```
{
    "Sid": "GetWebACLForResource1",
    "Effect": "Allow",
    "Action": [
        "wafv2:GetWebACLForResource",
        "wafv2:GetWebACL"
    ],
    "Resource": [ 
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "GetWebACLForResource2",
    "Effect": "Allow",
    "Action": [
        "cognito-idp:GetWebACLForResource"
    ],
    "Resource": [
        "arn:aws:cognito-idp:*:account-id:userpool/*"
    ]
}
```

**AWS App Runner 服务**  
需要权限才能调用 App Runner 服务资源类型的 App Runner `DescribeWebAclForService` 操作以及调用 AWS WAF `GetWebACLForResource`和`GetWebACL`。

```
{
    "Sid": "GetWebACLForResource1",
    "Effect": "Allow",
    "Action": [
        "wafv2:GetWebACLForResource",
        "wafv2:GetWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "GetWebACLForResource2",
    "Effect": "Allow",
    "Action": [
        "apprunner:DescribeWebAclForService"
    ],
    "Resource": [
        "arn:aws:apprunner:*:account-id:service/*/*"
    ]
}
```

**AWS 已验证访问实例**  
需要权限才能在 “已验证访问权限” 实例资源类型上调用`ec2:GetVerifiedAccessInstanceWebAcl`操作并调用 AWS WAF `GetWebACLForResource`和`GetWebACL`。

```
{
    "Sid": "GetWebACLForResource1",
    "Effect": "Allow",
    "Action": [
        "wafv2:GetWebACLForResource",
        "wafv2:GetWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "GetWebACLForResource2",
    "Effect": "Allow",
    "Action": [
        "ec2:GetVerifiedAccessInstanceWebAcl"
    ],
    "Resource": [
        "arn:aws:ec2:*:account-id:verified-access-instance/*"
    ]
}
```

#### `ListResourcesForWebACL` 权限
<a name="security_iam_action-ListResourcesForWebACL"></a>

本节列出使用 AWS WAF 操作 `ListResourcesForWebACL` 检索保护包（web ACL）的受保护资源列表所需的权限。

对于 Amazon CloudFront 分配，请使用操作代替此 CloudFront 操作`ListDistributionsByWebACLId`。有关信息，请参阅[ListDistributionsByWebACLId](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListDistributionsByWebACLId.html)《*亚马逊 CloudFront API 参考*》。

**亚马逊 API Gateway REST API、Application Load Balancer 和 AWS AppSync GraphQL API**  
需要权限才能调 AWS WAF `ListResourcesForWebACL`用 Web ACL。

```
{
    "Sid": "ListResourcesForWebACL",
    "Effect": "Allow",
    "Action": [
        "wafv2:ListResourcesForWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
}
```

**Amazon Cognito 用户池**  
需要权限才能在用户群体资源类型上调用 Amazon Cognito `ListResourcesForWebACL` 操作并调用 AWS WAF `ListResourcesForWebACL`。

```
{
    "Sid": "ListResourcesForWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:ListResourcesForWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "ListResourcesForWebACL2",
    "Effect": "Allow",
    "Action": [
        "cognito-idp:ListResourcesForWebACL"
    ],
    "Resource": [
        "arn:aws:cognito-idp:*:account-id:userpool/*"
    ]
}
```

**AWS App Runner 服务**  
需要权限才能在 App Runner 服务资源类型上调用 App Runner `ListAssociatedServicesForWebAcl` 操作并进行调用 AWS WAF `ListResourcesForWebACL`。

```
{
    "Sid": "ListResourcesForWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:ListResourcesForWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "ListResourcesForWebACL2",
    "Effect": "Allow",
    "Action": [
        "apprunner:ListAssociatedServicesForWebAcl"
    ],
    "Resource": [
        "arn:aws:apprunner:*:account-id:service/*/*"
    ]
}
```

**AWS 已验证访问实例**  
需要权限才能在 Verified Access 实例资源类型上调用 `ec2:DescribeVerifiedAccessInstanceWebAclAssociations` 操作并调用 AWS WAF `ListResourcesForWebACL`。

```
{
    "Sid": "ListResourcesForWebACL1",
    "Effect": "Allow",
    "Action": [
        "wafv2:ListResourcesForWebACL"
    ],
    "Resource": [
        "arn:aws:wafv2:region:account-id:regional/webacl/*/*"
    ]
},
{
    "Sid": "ListResourcesForWebACL2",
    "Effect": "Allow",
    "Action": [
        "ec2:DescribeVerifiedAccessInstanceWebAclAssociations"
    ],
    "Resource": [
        "arn:aws:ec2:*:account-id:verified-access-instance/*"
    ]
}
```

## 的政策资源 AWS WAF
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**支持策略资源：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符 (\$1) 指示语句应用于所有资源。

```
"Resource": "*"
```

要查看 AWS WAF 资源类型及其列表 ARNs，请参阅《*服务授权参考*》中的 [AWS WAF V2 定义的资源](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html#awswafv2-resources-for-iam-policies)。要了解您可以使用哪些操作来指定每种资源的 ARN，请参阅 V2 [定义的 AWS WAF 操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html#awswafv2-actions-as-permissions)。要允许或拒绝访问 AWS WAF 资源子集，请在策略的`resource`元素中包含该资源的 ARN。

o AWS WAF `wafv2` f ARNs 资源的格式如下：

```
arn:partition:wafv2:region:account-id:scope/resource-type/resource-name/resource-id
```

有关 ARN 规范的一般信息，请参阅中的 A [mazon 资源名称 (ARNs)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。 Amazon Web Services 一般参考

以下列出了特定于 ARNs `wafv2`资源的要求：
+ *region*：对于用于保护 Amazon CloudFront 分配的 AWS WAF 资源，请将其设置为`us-east-1`。否则，请将其设置为您正在使用受保护区域资源的区域。
+ *scope*：将范围设置`global`为用于 Amazon CloudFront 分销或`regional`与 AWS WAF 支持的任何区域资源一起使用。区域资源是 Amazon API Gateway REST API、应用程序负载均衡器、 AWS AppSync GraphQL API、Amazon Cognito 用户池、服务和 AWS 已验证访问实 AWS App Runner 例。
+ *resource-type*：指定以下值之一：`webacl`、`rulegroup`、`ipset``regexpatternset`、或`managedruleset`。
+ *resource-name*：指定您为 AWS WAF 资源提供的名称，或指定通配符 (`*`) 以表示满足 ARN 中其他规格的所有资源。您必须指定资源名称和资源 ID，或者为两者指定通配符。
+ *resource-id*：指定 AWS WAF 资源的 ID，或指定通配符 (`*`) 以表示满足 ARN 中其他规格的所有资源。您必须指定资源名称和资源 ID，或者为两者指定通配符。

例如，以下 ARN 为区域中的账户`111122223333`指定了所有具有区域范围的保护包（网络 ACLs）：`us-west-1`

```
arn:aws:wafv2:us-west-1:111122223333:regional/webacl/*/*
```

以下 ARN 为区域 `us-east-1` 中的账户 `111122223333` 指定了名为 `MyIPManagementRuleGroup` 全局范围规则组：

```
arn:aws:wafv2:us-east-1:111122223333:global/rulegroup/MyIPManagementRuleGroup/1111aaaa-bbbb-cccc-dddd-example-id
```

要查看 AWS WAF 基于身份的策略的示例，请参阅。[基于身份的策略示例 AWS WAF](security_iam_id-based-policy-examples.md)

## 的策略条件密钥 AWS WAF
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**支持特定于服务的策略条件键：**是

管理员可以使用 AWS JSON 策略来指定谁有权访问什么。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 AWS 全局条件键，请参阅 *IAM 用户指南*中的[AWS 全局条件上下文密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

此外，还 AWS WAF 支持以下条件键，您可以使用这些条件键为您的 IAM 策略提供精细筛选：
+ **wafv2：LogDestinationResource**

  此条件键采用日志记录目标的 Amazon 资源名称 (ARN)。这是您在使用 REST API 调用 `PutLoggingConfiguration` 时为日志记录目标提供的 ARN。

  您可以明确指定 ARN，也可以指定筛选 ARN。以下示例指定筛选具有特定位置和前缀 ARNs 的 Amazon S3 存储桶。

  ```
  "Condition": { "ArnLike": { "wafv2:LogDestinationResource": "arn:aws:s3:::aws-waf-logs-suffix/custom-prefix/*" } }
  ```
+ **wafv2：LogScope**

  此条件键以字符串形式定义了日志记录配置的来源。当前始终设置为默认值 `Customer`，这表示日志记录目标归您所有和管理。

要查看 AWS WAF 条件键列表，请参阅《*服务授权参考*》中的 [AWS WAF V2 条件密钥](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html#awswafv2-policy-keys)。要了解可以使用条件键的操作和资源，请参阅 [AWS WAF V2 定义的操作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html#awswafv2-actions-as-permissions)。

要查看 AWS WAF 基于身份的策略的示例，请参阅。[基于身份的策略示例 AWS WAF](security_iam_id-based-policy-examples.md)

## ACLs in AWS WAF
<a name="security_iam_service-with-iam-acls"></a>

**支持 ACLs：**否 

访问控制列表 (ACLs) 控制哪些委托人（账户成员、用户或角色）有权访问资源。 ACLs 与基于资源的策略类似，尽管它们不使用 JSON 策略文档格式。

## ABAC with AWS WAF
<a name="security_iam_service-with-iam-tags"></a>

**支持 ABAC（策略中的标签）：**部分支持

基于属性的访问权限控制（ABAC）是一种授权策略，该策略基于称为标签的属性来定义权限。您可以将标签附加到 IAM 实体和 AWS 资源，然后设计 ABAC 策略以允许在委托人的标签与资源上的标签匹配时进行操作。

要基于标签控制访问，您需要使用 `aws:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。

如果某个服务对于每种资源类型都支持所有这三个条件键，则对于该服务，该值为**是**。如果某个服务仅对于部分资源类型支持所有这三个条件键，则该值为**部分**。

有关 ABAC 的更多信息，请参阅《IAM 用户指南》**中的[使用 ABAC 授权定义权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。要查看设置 ABAC 步骤的教程，请参阅《IAM 用户指南》**中的[使用基于属性的访问权限控制（ABAC）](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

## 将临时证书与 AWS WAF
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**支持临时凭证：**是

临时证书提供对 AWS 资源的短期访问权限，并且是在您使用联合身份或切换角色时自动创建的。 AWS 建议您动态生成临时证书，而不是使用长期访问密钥。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的临时安全凭证](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)和[使用 IAM 的。AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)

## 转发服务的访问会话 AWS WAF
<a name="security_iam_service-with-iam-principal-permissions"></a>

**支持转发访问会话（FAS）：**是

 转发访问会话 (FAS) 使用调用主体的权限 AWS 服务，再加上 AWS 服务 向下游服务发出请求的请求。有关发出 FAS 请求时的策略详情，请参阅[转发访问会话](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

## 的服务角色 AWS WAF
<a name="security_iam_service-with-iam-roles-service"></a>

**支持服务角色：**是

 服务角色是由一项服务担任、代表您执行操作的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
更改服务角色的权限可能会中断 AWS WAF 功能。只有在 AWS WAF 提供操作指导时才编辑服务角色。

## 的服务相关角色 AWS WAF
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**支持服务关联角色：**是

 服务相关角色是一种链接到的服务角色。 AWS 服务服务可以代入代表您执行操作的角色。服务相关角色出现在您的中 AWS 账户 ，并且归服务所有。IAM 管理员可以查看但不能编辑服务关联角色的权限。

有关创建或管理 AWS WAF 服务相关角色的详细信息，请参阅[将服务相关角色用于 AWS WAF](using-service-linked-roles.md)。

# 基于身份的策略示例 AWS WAF
<a name="security_iam_id-based-policy-examples"></a>

本节提供基于身份的策略示例。 AWS WAF

默认情况下，用户和角色没有创建或修改 AWS WAF 资源的权限。要授予用户对所需资源执行操作的权限，IAM 管理员可以创建 IAM 策略。

要了解如何使用这些示例 JSON 策略文档创建基于 IAM 身份的策略，请参阅《IAM 用户指南》**中的[创建 IAM 策略（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)。

有关由 AWS WAF定义的操作和资源类型（包括每种资源类型的格式）的详细信息，请参阅《*服务授权参考*》中的 [AWS WAF V2 的操作、资源和条件密钥](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awswafv2.html)。 ARNs 

**Topics**
+ [策略最佳实践](#security_iam_service-with-iam-policy-best-practices)
+ [使用控制 AWS WAF 台](#security_iam_id-based-policy-examples-console)
+ [允许用户查看他们自己的权限](#security_iam_id-based-policy-examples-view-own-permissions)
+ [授予对 AWS WAF CloudFront、和的只读访问权限 CloudWatch](#security_iam_id-based-policy-examples-read-only1)
+ [授予对 AWS WAF CloudFront、和 CloudWatch](#security_iam_id-based-policy-examples-full-access1)
+ [向单个授予访问权限 AWS 账户](#security_iam_id-based-policy-examples-access-to-account)
+ [授予对单个保护包（web ACL）的访问权限](#security_iam_id-based-policy-examples-access-to-web-acl)
+ [授予对保护包（web ACL）和规则组的 CLI 访问权限](#security_iam_id-based-policy-examples-cli-access-to-web-acl)

## 策略最佳实践
<a name="security_iam_service-with-iam-policy-best-practices"></a>

基于身份的策略决定了某人是否可以在您的账户中创建、访问或删除 AWS WAF 资源。这些操作可能会使 AWS 账户产生成本。创建或编辑基于身份的策略时，请遵循以下指南和建议：
+ **开始使用 AWS 托管策略并转向最低权限权限** — 要开始向用户和工作负载授予权限，请使用为许多常见用例授予权限的*AWS 托管策略*。它们在你的版本中可用 AWS 账户。我们建议您通过定义针对您的用例的 AWS 客户托管策略来进一步减少权限。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)或[工作职能的AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **应用最低权限**：在使用 IAM 策略设置权限时，请仅授予执行任务所需的权限。为此，您可以定义在特定条件下可以对特定资源执行的操作，也称为*最低权限许可*。有关使用 IAM 应用权限的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的策略和权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)。
+ **使用 IAM 策略中的条件进一步限制访问权限**：您可以向策略添加条件来限制对操作和资源的访问。例如，您可以编写策略条件来指定必须使用 SSL 发送所有请求。如果服务操作是通过特定 AWS 服务的（例如）使用的，则也可以使用条件来授予对服务操作的访问权限 CloudFormation。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素：条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)。
+ **使用 IAM Access Analyzer 验证您的 IAM 策略，以确保权限的安全性和功能性**：IAM Access Analyzer 会验证新策略和现有策略，以确保策略符合 IAM 策略语言（JSON）和 IAM 最佳实践。IAM Access Analyzer 提供 100 多项策略检查和可操作的建议，以帮助您制定安全且功能性强的策略。有关更多信息，请参阅《IAM 用户指南》**中的[使用 IAM Access Analyzer 验证策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html)。
+ **需要多重身份验证 (MFA**)-如果 AWS 账户您的场景需要 IAM 用户或根用户，请启用 MFA 以提高安全性。若要在调用 API 操作时需要 MFA，请将 MFA 条件添加到您的策略中。有关更多信息，请参阅《IAM 用户指南》**中的[使用 MFA 保护 API 访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)。

有关 IAM 中的最佳实操的更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 使用控制 AWS WAF 台
<a name="security_iam_id-based-policy-examples-console"></a>

要访问 AWS WAF 控制台，您必须拥有一组最低权限。这些权限必须允许您列出和查看有关您的 AWS WAF 资源的详细信息 AWS 账户。如果创建比必需的最低权限更为严格的基于身份的策略，对于附加了该策略的实体（用户或角色），控制台将无法按预期正常运行。

对于仅调用 AWS CLI 或 AWS API 的用户，您无需为其设置最低控制台权限。相反，只允许访问与其尝试执行的 API 操作相匹配的操作。

为确保用户和角色可以使用 AWS WAF 控制台，还应至少将 AWS WAF `AWSWAFConsoleReadOnlyAccess` AWS 托管策略附加到实体。有关托管策略的信息，请参阅 [AWS 托管策略： AWSWAFConsoleReadOnlyAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-AWSWAFConsoleReadOnlyAccess)。有关将托管策略附加到用户的更多信息，请参阅 *IAM 用户指南*中的[向用户添加权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_change-permissions.html#users_change_permissions-add-console)。

## 允许用户查看他们自己的权限
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

该示例说明了您如何创建策略，以允许 IAM 用户查看附加到其用户身份的内联和托管式策略。此策略包括在控制台上或使用 AWS CLI 或 AWS API 以编程方式完成此操作的权限。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## 授予对 AWS WAF CloudFront、和的只读访问权限 CloudWatch
<a name="security_iam_id-based-policy-examples-read-only1"></a>

以下政策授予用户对 AWS WAF 资源、Amazon CloudFront 网络分配和亚马逊 CloudWatch 指标的只读访问权限。对于需要查看 AWS WAF 条件、规则和保护包 (Web ACLs) 中设置的权限的用户，可以查看哪个发行版与保护包 (Web ACL) 相关联，以及监控中的指标和请求样本，这非常有用 CloudWatch。这些用户无法创建、更新或删除 AWS WAF 资源：

```
 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "wafv2:Get*",
                "wafv2:List*",
                "cloudfront:GetDistribution",
                "cloudfront:GetDistributionConfig",
                "cloudfront:ListDistributions",
                "cloudfront:ListDistributionsByWebACLId",
                "cloudfront:ListDistributionTenantsByCustomization",
                "cloudfront:ListDistributionTenants",
                "cloudfront:GetDistributionTenant",
                "cloudwatch:GetMetricData",
                "cloudwatch:ListMetrics",
                "cloudwatch:GetMetricStatistics",
                "ec2:DescribeRegions",
                "pricingplanmanager:GetSubscription",
                "pricingplanmanager:ListSubscriptions",
                "route53:ListHostedZones",
                "route53:GetHostedZone"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

## 授予对 AWS WAF CloudFront、和 CloudWatch
<a name="security_iam_id-based-policy-examples-full-access1"></a>

以下政策允许用户在中执行任何 AWS WAF 操作、对 CloudFront Web 分配执行任何操作以及监控指标和请求示例 CloudWatch。它对 AWS WAF 管理员用户很有用。

```
 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "wafv2:*",
                "cloudfront:CreateDistribution",
                "cloudfront:ListDistributions",
                "cloudfront:ListDistributionsByWebACLId",
                "cloudfront:UpdateDistribution",
                "cloudfront:GetDistributionConfig",
                "cloudfront:GetDistribution",
                "cloudfront:DisassociateDistributionTenantWebACL",
                "cloudfront:DisassociateDistributionWebACL",
                "cloudfront:AssociateDistributionTenantWebACL",
                "cloudfront:AssociateDistributionWebACL",
                "cloudfront:ListDistributionTenantsByCustomization",
                "cloudfront:ListDistributionTenants",
                "cloudfront:DeleteDistribution",
                "cloudfront:GetDistributionTenant",
                "cloudfront:DeleteDistributionTenant",
                "cloudwatch:GetMetricData",
                "cloudwatch:ListMetrics",
                "cloudwatch:GetMetricStatistics",
                "ec2:DescribeRegions",
                "pricingplanmanager:GetSubscription",
                "pricingplanmanager:ListSubscriptions",
                "pricingplanmanager:UpdateSubscription",
                "pricingplanmanager:CancelSubscription",
                "pricingplanmanager:CancelSubscriptionChange",
                "pricingplanmanager:AssociateResourcesToSubscription",
                "pricingplanmanager:DisassociateResourcesFromSubscription",
                "route53:ListHostedZones",
                "route53:GetHostedZone"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

强烈建议您为拥有管理权限的用户配置 Multi-Factor Authentication (MFA)。有关更多信息，请参阅《IAM 用户指南》**中的[在 AWS中使用多重身份验证（MFA）设备](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingMFA.html)。

## 向单个授予访问权限 AWS 账户
<a name="security_iam_id-based-policy-examples-access-to-account"></a>

此策略向账户 444455556666 授予以下权限：
+ 对所有 AWS WAF 操作和资源的完全访问权限。
+ 读取和更新所有 CloudFront 发行版的访问权限，这样您就可以关联保护包 (Web ACLs) 和 CloudFront 发行版。
+ 读取所有 CloudWatch 指标和指标统计信息的访问权限，以便您可以在 AWS WAF 控制台中查看 CloudWatch 数据和请求示例。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "wafv2:*"
         ],
         "Resource": [
            "arn:aws:wafv2:us-east-1:444455556666:*"
         ]
      },
      {
         "Effect": "Allow",
         "Action": [
            "cloudfront:GetDistribution",
            "cloudfront:GetDistributionConfig",
            "cloudfront:ListDistributions",
            "cloudfront:ListDistributionsByWebACLId",
            "cloudfront:UpdateDistribution",
            "cloudwatch:ListMetrics",
            "cloudwatch:GetMetricStatistics",
            "ec2:DescribeRegions"
         ],
         "Resource": [
            "*"
         ]
      }
   ]
}
```

------

## 授予对单个保护包（web ACL）的访问权限
<a name="security_iam_id-based-policy-examples-access-to-web-acl"></a>

以下策略允许用户通过控制台对账户中的特定保护包 (Web ACL) 执行任何 AWS WAF 操作`444455556666`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "wafv2:*"
            ],
            "Resource": [
                "arn:aws:wafv2:us-east-1:444455556666:regional/webacl/test123/112233d7c-86b2-458b-af83-51c51example"
            ]
        },
        {
            "Sid": "consoleAccess",
            "Effect": "Allow",
            "Action": [
                "wafv2:ListWebACLs",
                "ec2:DescribeRegions"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

## 授予对保护包（web ACL）和规则组的 CLI 访问权限
<a name="security_iam_id-based-policy-examples-cli-access-to-web-acl"></a>

以下策略允许用户通过 CLI 对账户中的特定保护包 (Web ACL) 和特定规则组执行任何 AWS WAF 操作`444455556666`。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "wafv2:*"
         ],
         "Resource": [
        "arn:aws:wafv2:us-east-1:444455556666:regional/webacl/test123/112233d7c-86b2-458b-af83-51c51example",
        "arn:aws:wafv2:us-east-1:444455556666:regional/rulegroup/test123rulegroup/555555555-6666-1234-abcd-00d11example"
         ]
      }
   ]
}
```

------

以下策略允许用户通过控制台对账户中的特定保护包 (Web ACL) 执行任何 AWS WAF 操作`444455556666`。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "wafv2:*"
            ],
            "Resource": [
                "arn:aws:wafv2:us-east-1:444455556666:regional/webacl/test123/112233d7c-86b2-458b-af83-51c51example"
            ]
        },
        {
            "Sid": "consoleAccess",
            "Effect": "Allow",
            "Action": [
                "wafv2:ListWebACLs",
                "ec2:DescribeRegions"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

# AWS 的托管策略 AWS WAF
<a name="security-iam-awsmanpol"></a>

本节介绍如何使用 AWS 托管策略 AWS WAF。

 AWS 托管策略是由创建和管理的独立策略 AWS。 AWS 托管策略旨在为许多常见用例提供权限，以便您可以开始为用户、组和角色分配权限。

请记住， AWS 托管策略可能不会为您的特定用例授予最低权限权限，因为它们可供所有 AWS 客户使用。我们建议通过定义特定于使用案例的[客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)来进一步减少权限。

您无法更改 AWS 托管策略中定义的权限。如果 AWS 更新 AWS 托管策略中定义的权限，则更新会影响该策略所关联的所有委托人身份（用户、组和角色）。 AWS 最有可能在启动新的 API 或现有服务可以使用新 AWS 服务 的 API 操作时更新 AWS 托管策略。

有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管式策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AWS 托管策略： AWSWAFReadOnlyAccess
<a name="security-iam-awsmanpol-AWSWAFReadOnlyAccess"></a>

该策略授予只读权限，允许用户访问集成服务的 AWS WAF 资源和资源，例如亚马逊 CloudFront、Amazon API Gateway、Application Load Balancer、 AWS AppSync、Amazon Cognito、、、 AWS App Runner、 AWS Amplify Amazon CloudWatch 和 AWS 已验证访问权限。您可以将此策略附加到您的 IAM 身份。 AWS WAF 还将此策略附加 AWS WAF 到允许代表您执行操作的服务角色。

有关此策略的详细信息，请参阅 IAM 控制台[AWSWAFReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFReadOnlyAccess$serviceLevelSummary)中的。

## AWS 托管策略： AWSWAFFull访问权限
<a name="security-iam-awsmanpol-AWSWAFFullAccess"></a>

该政策授予对集成服务的 AWS WAF 资源和资源的完全访问权限，例如亚马逊、Amazon API Gateway CloudFront、Application Load Balancer、 AWS AppSync、Amazon Cognito、、、 AWS App Runner、 AWS Amplify Ama CloudWatch zon 和 AWS 经过验证的访问权限。您可以将此策略附加到您的 IAM 身份。 AWS WAF 还将此策略附加 AWS WAF 到允许代表您执行操作的服务角色。

有关此策略的详细信息，请参阅 IAM 控制台中的[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。

## AWS 托管策略： AWSWAFConsoleReadOnlyAccess
<a name="security-iam-awsmanpol-AWSWAFConsoleReadOnlyAccess"></a>

该策略向 AWS WAF 控制台授予只读权限，其中包括用于 AWS WAF 集成服务的资源，例如亚马逊 CloudFront、Amazon API Gateway、Application Load Balancer、 AWS AppSync、Amazon Cognito、、、 AWS App Runner、 AWS Amplify Amazon CloudWatch 和 AWS 已验证访问权限。您可以将此策略附加得到 IAM 身份。

有关此策略的详细信息，请参阅 IAM 控制台[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary)中的。

## AWS 托管策略： AWSWAFConsoleFullAccess
<a name="security-iam-awsmanpol-AWSWAFConsoleFullAccess"></a>

该政策授予对 AWS WAF 控制台的完全访问权限，其中包括用于 AWS WAF 集成服务的资源，例如亚马逊 CloudFront、Amazon API Gateway、Application Load Balancer、 AWS AppSync、Amazon Cognito、、、 AWS App Runner、 AWS Amplify Amazon CloudWatch 和 AWS 已验证访问权限。您可以将此策略附加到您的 IAM 身份。 AWS WAF 还将此策略附加 AWS WAF 到允许代表您执行操作的服务角色。

有关此策略的详细信息，请参阅 IAM 控制台[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary)中的。

## AWS 托管策略： WAFV2LoggingServiceRolePolicy
<a name="security-iam-awsmanpol-WAFV2LoggingServiceRolePolicy"></a>

该策略 AWS WAF 允许将日志写入亚马逊数据 Firehose。只有在启用登录功能后才会使用此策略 AWS WAF。此策略附加到 `AWSServiceRoleForWAFV2Logging` 服务关联角色。有关服务相关角色的更多信息，请参阅 [将服务相关角色用于 AWS WAF](using-service-linked-roles.md)。

有关此策略的详细信息，请参阅 IAM 控制台[WAFV2LoggingServiceRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/aws-service-role/WAFV2LoggingServiceRolePolicy$serviceLevelSummary)中的。

## AWS WAF AWS 托管策略的更新
<a name="security-iam-awsmanpol-updates"></a>



查看 AWS WAF 自该服务开始跟踪这些更改以来 AWS 托管策略更新的详细信息。要获得有关此页面变更的自动提醒，请订阅 AWS WAF 文档历史记录页面上的 RSS feed，网址为[文档历史记录](doc-history.md)。




| Policy | 更改的说明 | 日期 | 
| --- | --- | --- | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  为 CloudFront 定价计划添加了以下权限。欲了解更多详情，请参阅 [AWS WAF 与 CloudFront 统一费率定价计划一起使用](cloudfront-features.md#waf-cf-pricing-plans) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html)  | 2025-11-18  | 
|  `AWSWAFConsoleReadOnlyAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary).  |  为 CloudFront 定价计划添加了以下权限。欲了解更多详情，请参阅 [AWS WAF 与 CloudFront 统一费率定价计划一起使用](cloudfront-features.md#waf-cf-pricing-plans) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html)  | 2025-11-18 | 
|  `AWSWAFConsoleReadOnlyAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary).  |  更新了以下权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) 添加了以下权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html)  | 2025-11-03 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  更新了以下权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) 添加了以下权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html)  | 2025-11-03 | 
| `AWSWAFFullAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息：[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。 |  添加了所需的权限 AssociateWeb DisassociateWeb ACL、ACL、 GetWebACLFor资源和 ListResourcesForWeb ACL AWS Amplify。  | 2025-05-05 | 
| `AWSWAFReadOnlyAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 有关此策略的详细信息，请参阅 IAM 控制台[AWSWAFReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFReadOnlyAccess$serviceLevelSummary)中的。 |  添加了所需的权限 GetWebACLFor资源和 ListResourcesForWeb ACL AWS Amplify。  | 2025-05-05 | 
|  `AWSWAFConsoleReadOnlyAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary).  |  添加了以下权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html)  | 2025-05-05 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  添加了以下权限： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/waf/latest/developerguide/security-iam-awsmanpol.html)  | 2025-05-05 | 
| `WAFV2LoggingServiceRolePolicy` 该策略 AWS WAF 允许将日志写入亚马逊数据 Firehose。只有在启用日志记录时才会使用。 IAM 控制台中的详细信息:[WAFV2LoggingServiceRolePolicy](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/aws-service-role/WAFV2LoggingServiceRolePolicy$serviceLevelSummary). |  在此策略所关联的服务相关角色的权限设置中添加了声明 IDs (Sids)。  | 2024-06-03 | 
| `AWSServiceRoleForWAFV2Logging` 此服务相关角色提供的权限策略允许 AWS WAF 向 Amazon Data Firehose 写入日志。 IAM 控制台中的详细信息：[AWSServiceRoleForWAFV2日志记录](https://console.aws.amazon.com/iam/home#/roles/details/AWSServiceRoleForWAFV2Logging)。 |  在权限设置中添加了声明 IDs （Sids）。  | 2024-06-03 | 
|  AWS WAF 对变更跟踪的补充  |  AWS WAF 开始跟踪托管策略`WAFV2LoggingServiceRolePolicy`和服务相关角色`AWSServiceRoleForWAFV2Logging`的更改。  | 2024-06-03 | 
| `AWSWAFFullAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息：[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。 |  扩展了权限，可将 AWS 已验证访问权限实例添加到您可以保护的资源类型中 AWS WAF。  | 2023-06-17 | 
| `AWSWAFReadOnlyAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息:[AWSWAFReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFReadOnlyAccess$serviceLevelSummary).  |  扩展了权限，可将 AWS 已验证访问权限实例添加到您可以保护的资源类型中 AWS WAF。  | 2023-06-17 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  扩展了权限，可将 AWS 已验证访问权限实例添加到您可以保护的资源类型中 AWS WAF。  | 2023-06-17 | 
|  `AWSWAFConsoleReadOnlyAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary).  |  扩展了权限，可将 AWS 已验证访问权限实例添加到您可以保护的资源类型中 AWS WAF。  | 2023-06-17 | 
| `AWSWAFFullAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息：[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。 |  扩展了权限以更正 AWS App Runner 服务的访问设置。  | 2023-06-06 | 
| `AWSWAFReadOnlyAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息:[AWSWAFReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFReadOnlyAccess$serviceLevelSummary).  |  扩展了权限以更正 AWS App Runner 服务的访问设置。  | 2023-06-06 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  扩展了权限以更正 AWS App Runner 服务的访问设置。  | 2023-06-06 | 
|  `AWSWAFConsoleReadOnlyAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary).  |  扩展了权限以更正 AWS App Runner 服务的访问设置。  | 2023-06-06 | 
| `AWSWAFFullAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息：[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。 |  扩展了向可用来保护的资源类型添加 AWS App Runner 服务的权限 AWS WAF。  | 2023-03-30 | 
| `AWSWAFReadOnlyAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息:[AWSWAFReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFReadOnlyAccess$serviceLevelSummary).  |  扩展了向可用来保护的资源类型添加 AWS App Runner 服务的权限 AWS WAF。  | 2023-03-30 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  扩展了向可用来保护的资源类型添加 AWS App Runner 服务的权限 AWS WAF。  | 2023-03-30 | 
|  `AWSWAFConsoleReadOnlyAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary).  |  扩展了向可用来保护的资源类型添加 AWS App Runner 服务的权限 AWS WAF。  | 2023-03-30 | 
| `AWSWAFFullAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息：[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。 |  扩展了权限，将 Amazon Cognito 用户池添加到您可以保护的资源类型中。 AWS WAF  | 2022-08-25 | 
| `AWSWAFReadOnlyAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息:[AWSWAFReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFReadOnlyAccess$serviceLevelSummary).  |  扩展了权限，将 Amazon Cognito 用户池添加到您可以保护的资源类型中。 AWS WAF  | 2022-08-25 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  扩展了权限，将 Amazon Cognito 用户池添加到您可以保护的资源类型中。 AWS WAF  | 2022-08-25 | 
|  `AWSWAFConsoleReadOnlyAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleReadOnlyAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleReadOnlyAccess$serviceLevelSummary).  |  扩展了权限，将 Amazon Cognito 用户池添加到您可以保护的资源类型中。 AWS WAF  | 2022-08-25 | 
| `AWSWAFFullAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息：[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。  |  更正了亚马逊简单存储服务 (Amazon S3) 和亚马逊 CloudWatch 日志的日志传输权限设置。此更改解决了日志配置期间出现的拒绝访问错误。有关记录保护包（web ACL）流量的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。  | 2022-01-11 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  更正了亚马逊简单存储服务 (Amazon S3) 和亚马逊 CloudWatch 日志的日志传输权限设置。此更改解决了日志配置期间发生的访问错误。有关记录保护包（web ACL）流量的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。  | 2022-01-11 | 
|  `AWSWAFFullAccess` 本政策 AWS WAF 允许代表您管理集成服务中的 AWS 资源 AWS WAF 和集成服务中的资源。 IAM 控制台中的详细信息：[AWSWAFFull访问权限](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFFullAccess$serviceLevelSummary)。  |  为扩展的日志记录选项添加了新权限。 此更改 AWS WAF 允许访问其他日志目标亚马逊简单存储服务 (Amazon S3) 和亚马逊 CloudWatch 日志。有关记录保护包（web ACL）流量的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。  | 2021-11-15 | 
|  `AWSWAFConsoleFullAccess` 此政策 AWS WAF 允许您代表您在集成服务中和集成服务中 AWS WAF 管理 AWS 控制台 AWS 资源和其他资源。 IAM 控制台中的详细信息:[AWSWAFConsoleFullAccess](https://console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSWAFConsoleFullAccess$serviceLevelSummary).  |  为扩展的日志记录选项添加了新权限。 此更改 AWS WAF 允许访问其他日志目标亚马逊简单存储服务 (Amazon S3) 和亚马逊 CloudWatch 日志。有关记录保护包（web ACL）流量的信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。  | 2021-11-15 | 
|  AWS WAF 已开始跟踪更改  |  AWS WAF 开始跟踪其 AWS 托管策略的更改。  | 2021-3-01 | 

# 对 AWS WAF 身份和访问进行故障排除
<a name="security_iam_troubleshoot"></a>

使用以下信息来帮助您诊断和修复在使用 AWS WAF 和 IAM 时可能遇到的常见问题。

**Topics**
+ [我无权在以下位置执行操作 AWS WAF](#security_iam_troubleshoot-no-permissions)
+ [我无权执行 iam：PassRole](#security_iam_troubleshoot-passrole)
+ [我想允许我以外的人 AWS 账户 访问我的 AWS WAF 资源](#security_iam_troubleshoot-cross-account-access)

## 我无权在以下位置执行操作 AWS WAF
<a name="security_iam_troubleshoot-no-permissions"></a>

如果您收到错误提示，指明您无权执行某个操作，则必须更新策略以允许执行该操作。

当 `mateojackson` IAM 用户尝试使用控制台查看有关虚构 `my-example-widget` 资源的详细信息，但不拥有虚构 `wafv2:GetWidget` 权限时，会发生以下示例错误。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: wafv2:GetWidget on resource: my-example-widget
```

在此情况下，必须更新 `mateojackson` 用户的策略，以允许使用 `wafv2:GetWidget` 操作访问 `my-example-widget` 资源。

如果您需要帮助，请联系您的 AWS 管理员。您的管理员是提供登录凭证的人。

## 我无权执行 iam：PassRole
<a name="security_iam_troubleshoot-passrole"></a>

如果您收到一个错误，表明您无权执行 `iam:PassRole` 操作，则必须更新策略以允许您将角色传递给。 AWS WAF

有些 AWS 服务 允许您将现有角色传递给该服务，而不是创建新的服务角色或服务相关角色。为此，您必须具有将角色传递到服务的权限。

当名为 `marymajor` 的 IAM 用户尝试使用控制台在 AWS WAF中执行操作时，会发生以下示例错误。但是，服务必须具有服务角色所授予的权限才可执行此操作。Mary 不具有将角色传递到服务的权限。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

在这种情况下，必须更新 Mary 的策略以允许她执行 `iam:PassRole` 操作。

如果您需要帮助，请联系您的 AWS 管理员。您的管理员是提供登录凭证的人。

## 我想允许我以外的人 AWS 账户 访问我的 AWS WAF 资源
<a name="security_iam_troubleshoot-cross-account-access"></a>

您可以创建一个角色，以便其他账户中的用户或您组织外的人员可以使用该角色来访问您的资源。您可以指定谁值得信赖，可以代入角色。对于支持基于资源的策略或访问控制列表 (ACLs) 的服务，您可以使用这些策略向人们授予访问您的资源的权限。

要了解更多信息，请参阅以下内容：
+ 要了解是否 AWS WAF 支持这些功能，请参阅[如何 AWS WAF 与 IAM 配合使用](security_iam_service-with-iam.md)。
+ 要了解如何提供对您拥有的资源的访问权限 AWS 账户 ，请参阅 [IAM 用户*指南中的向您拥有 AWS 账户 的另一个 IAM 用户*提供访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)权限。
+ 要了解如何向第三方提供对您的资源的访问[权限 AWS 账户，请参阅 *IAM 用户指南*中的向第三方提供](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)访问权限。 AWS 账户 
+ 要了解如何通过身份联合验证提供访问权限，请参阅《IAM 用户指南》**中的[为经过外部身份验证的用户（身份联合验证）提供访问权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html)。
+ 要了解使用角色和基于资源的策略进行跨账户访问之间的差别，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

# 将服务相关角色用于 AWS WAF
<a name="using-service-linked-roles"></a>

本节介绍如何使用服务相关角色授予对 AWS 账户中资源的 AWS WAF 访问权限。

AWS WAF 使用 AWS Identity and Access Management (IAM) [服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)。服务相关角色是一种与之直接关联的 IAM 角色的独特类型。 AWS WAF服务相关角色由服务预定义 AWS WAF ，包括该服务代表您调用其他 AWS 服务所需的所有权限。

服务相关角色使设置变得 AWS WAF 更加容易，因为您不必手动添加必要的权限。 AWS WAF 定义其服务相关角色的权限，除非另有定义，否则 AWS WAF 只能担任其角色。定义的权限包括信任策略和权限策略。这些权限策略不能附加到任何其他 IAM 实体。

只有在先删除角色的相关资源后，才能删除服务相关角色。这样可以保护您的 AWS WAF 资源，因为您不会无意中删除访问资源的权限。

有关支持服务相关角色的其他服务的信息，请参阅[使用 IAM 的AWS 服务](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)并查找**服务相关角色**列中显示为**是**的服务。选择**是**和链接，查看该服务的服务关联角色文档。

## 的服务相关角色权限 AWS WAF
<a name="slr-permissions"></a>

AWS WAF 使用服务相关角色`AWSServiceRoleForWAFV2Logging`向 Amazon Data Firehose 写入日志。只有在启用登录功能后才会使用此角色 AWS WAF。有关日志记录的信息，请参阅[记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

此服务相关角色附加到 AWS 托管策略`WAFV2LoggingServiceRolePolicy`。有关托管策略的更多信息，请参阅 [AWS 托管策略： WAFV2LoggingServiceRolePolicy](security-iam-awsmanpol.md#security-iam-awsmanpol-WAFV2LoggingServiceRolePolicy)。

`AWSServiceRoleForWAFV2Logging` 服务关联角色信任 `wafv2.amazonaws.com` 服务来代入角色。

该角色的权限策略 AWS WAF 允许对指定资源完成以下操作：
+ Amazon Data Firehose 操作：Firehose 数据流资源上名称以 `aws-waf-logs-` 开头的 `PutRecord` 和 `PutRecordBatch`。例如 `aws-waf-logs-us-east-2-analytics`。
+ AWS Organizations 行动：`DescribeOrganization`在 Organizations 组织资源上。

在 IAM 控制台中查看完整的服务相关角色：[AWSServiceRoleForWAFV2日志记录](https://console.aws.amazon.com/iam/home#/roles/details/AWSServiceRoleForWAFV2Logging)。

您必须配置权限，允许 IAM 实体（如用户、组或角色）创建、编辑或删除服务关联角色。有关更多信息，请参阅《IAM 用户指南》**中的[服务关联角色权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

## 为创建服务相关角色 AWS WAF
<a name="create-slr"></a>

您无需手动创建服务关联角色。当您启用 AWS WAF 登录功能 AWS 管理控制台，或者在 CLI 或 AWS WAF AP AWS WAF I 中`PutLoggingConfiguration`发出请求时， AWS WAF 会为您创建服务相关角色。

您必须具有 `iam:CreateServiceLinkedRole` 权限以启用日志记录。

如果您删除该服务关联角色，然后需要再次创建，您可以使用相同流程在账户中重新创建此角色。启用 AWS WAF 日志记录后， AWS WAF 会再次为您创建服务相关角色。

## 编辑的服务相关角色 AWS WAF
<a name="edit-slr"></a>

AWS WAF 不允许您编辑`AWSServiceRoleForWAFV2Logging`服务相关角色。在创建服务相关角色后，您将无法更改角色的名称，因为可能有多种实体引用该角色。不过，您可以使用 IAM 编辑角色的说明。有关更多信息，请参阅《IAM 用户指南》**中的[编辑服务关联角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)。

## 删除的服务相关角色 AWS WAF
<a name="delete-slr"></a>

如果不再需要使用某个需要服务关联角色的功能或服务，我们建议您删除该角色。这样就没有未被主动监控或维护的未使用实体。但是，必须先清除服务相关角色的资源，然后才能手动删除它。

**注意**  
如果您尝试删除资源时 AWS WAF 服务正在使用该角色，则删除可能会失败。如果发生这种情况，请等待几分钟后重试。

**删除使用的 AWS WAF 资源 `AWSServiceRoleForWAFV2Logging`**

1. 在 AWS WAF 控制台上，从每个 Web ACL 中删除日志记录。有关更多信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

1. 使用 API 或 CLI，为已启用日志记录的每个 web ACL 提交 `DeleteLoggingConfiguration` 请求。有关更多信息，请参阅 [AWS WAF API 参考](https://docs.aws.amazon.com/waf/latest/APIReference/Welcome.html)。

**使用 IAM 手动删除服务关联角色**

使用 IAM 控制台、IAM CLI 或 IAM API 删除 `AWSServiceRoleForWAFV2Logging` 服务相关角色。有关更多信息，请参阅《IAM 用户指南》**中的[删除服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)。

## AWS WAF 服务相关角色支持的区域
<a name="slr-regions"></a>

AWS WAF 支持在提供服务的所有地区使用服务相关角色。有关更多信息，请参阅 [AWS WAF 终端节点和限额](https://docs.aws.amazon.com/general/latest/gr/waf.html)。

# 登录和监控 AWS WAF
<a name="waf-incident-response"></a>

本节介绍如何使用 AWS 工具来监视和响应中的事件 AWS WAF。

监控是维护 AWS 解决方案的可靠性、可用性和性能的重要组成部分。 AWS WAF 您应该从 AWS 解决方案的各个部分收集监控数据，以便在出现多点故障时可以更轻松地进行调试。 AWS 提供了多种用于监控您的 AWS WAF 资源和响应潜在事件的工具：

**亚马逊 CloudWatch 警报**  
使用 CloudWatch 警报，您可以监视您指定的时间段内的单个指标。如果指标超过给定阈值，则会向 Amazon SNS 主题或 AWS Auto Scaling 政策 CloudWatch 发送通知。有关更多信息，请参阅 [使用 Amazon 进行监控 CloudWatch](monitoring-cloudwatch.md)。

**AWS CloudTrail 日志**  
CloudTrail 提供了用户、角色或 AWS 服务在中执行的操作的记录 AWS WAF。使用收集的信息 CloudTrail，您可以确定向哪个请求发出 AWS WAF、发出请求的 IP 地址、谁发出了请求、何时发出请求以及其他详细信息。有关更多信息，请参阅 [使用 记录 AWS CloudTrail API 调用](logging-using-cloudtrail.md)。

**AWS WAF 保护包 (Web ACL) 流量记录**  
AWS WAF 为保护包 (Web ACLs) 分析的流量提供日志记录。日志包含诸如从您的受保护 AWS 资源 AWS WAF 收到请求的时间、有关该请求的详细信息以及请求匹配的规则的操作设置等信息。有关更多信息，请参阅 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md)。

# 验证合规性 AWS WAF
<a name="waf-compliance"></a>

本节说明您在使用时的合规责任 AWS WAF。

要了解是否属于特定合规计划的范围，请参阅AWS 服务 “[按合规计划划分的范围](https://aws.amazon.com/compliance/services-in-scope/)” ”，然后选择您感兴趣的合规计划。 AWS 服务 有关一般信息，请参阅[AWS 合规计划AWS](https://aws.amazon.com/compliance/programs/)。

您可以使用下载第三方审计报告 AWS Artifact。有关更多信息，请参阅中的 “[下载报告” 中的 “ AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)。

您在使用 AWS 服务 时的合规责任取决于您的数据的敏感性、贵公司的合规目标以及适用的法律和法规。有关您在使用时的合规责任的更多信息 AWS 服务，请参阅[AWS 安全文档](https://docs.aws.amazon.com/security/)。

# 增强抵御能力 AWS WAF
<a name="disaster-recovery-resiliency"></a>

本节介绍 AWS 架构如何支持数据冗余 AWS WAF。

 AWS 全球基础设施是围绕 AWS 区域 可用区构建的。 AWS 区域 提供多个物理隔离和隔离的可用区，这些可用区通过低延迟、高吞吐量和高度冗余的网络连接。利用可用区，您可以设计和操作在可用区之间无中断地自动实现失效转移的应用程序和数据库。与传统的单个或多个数据中心基础架构相比，可用区具有更高的可用性、容错性和可扩展性。

有关 AWS 区域 和可用区的更多信息，请参阅[AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)。

# 基础设施安全 AWS WAF
<a name="infrastructure-security"></a>

本节介绍如何 AWS WAF 隔离服务流量。

作为一项托管服务 AWS WAF ，受 AWS 全球网络安全的保护。有关 AWS 安全服务以及如何 AWS 保护基础设施的信息，请参阅[AWS 云安全](https://aws.amazon.com/security/)。要使用基础设施安全的最佳实践来设计您的 AWS 环境，请参阅 S * AWS ecurity Pillar Well-Architected Fram* ework 中的[基础设施保护](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 已发布的 API 调用 AWS WAF 通过网络进行访问。客户端必须支持以下内容：
+ 传输层安全性协议（TLS）。我们要求使用 TLS 1.2，建议使用 TLS 1.3。
+ 具有完全向前保密（PFS）的密码套件，例如 DHE（临时 Diffie-Hellman）或 ECDHE（临时椭圆曲线 Diffie-Hellman）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。

# AWS WAF 配额
<a name="limits"></a>

**注意**  
这是的最新版本 AWS WAF。有关 AWS WAF 经典版的信息，请参阅[AWS WAF 经典](classic-waf-chapter.md)。

AWS WAF 受以下配额（以前称为限制）的约束。这些配额适用于所有可用区域。 AWS WAF 每个区域分别受这些限额的约束。限额不会跨区域累积。

AWS WAF 在每个账户可以拥有的最大实体数量上有默认配额。您可以[请求提高](https://console.aws.amazon.com/servicequotas/home/services/wafv2/quotas)这些限额。


| 资源 | 每个区域每个账户的默认限额 | 
| --- | --- | 
|  保护包的最大数量（网络 ACLs）  |  100  | 
|  最大规则组数   |  100  | 
| 最大 IP 集数  |  100  | 
| 每个保护包（web ACL）每秒的最大请求数  |  100000  | 
| 每个保护包（web ACL）或规则组的最大自定义请求标头数 | 100 | 
| 每个保护包（web ACL）或规则组的最大自定义响应标头数 | 100 | 
| 每个保护包（web ACL）或规则组的最大自定义响应正文数 | 50 | 
| 保护包（web ACL）令牌域列表中令牌域的最大数量 | 10 | 
| 正则表达式模式集的最大数量  |  10  | 
| 每个保护包（web ACL）的最大应用程序负载均衡器关联数 | 100  | 

允许的最大每秒请求数 (RPS) CloudFront 由 AWS WAF 《[CloudFront 开发者指南》](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cloudfront-limits.html)设置 CloudFront 和描述。

AWS WAF 每个地区的每个账户的以下实体设置都有固定的配额。无法更改这些限额。


| 资源 | 每区域每账户的限额 | 
| --- | --- | 
|  每个保护包 (Web ACL) 的最大保护包 (Web ACLWCUs) 容量单位 () (Web ACL) \$1  |  5000  | 
|  WCUs 每个规则组的最大值 |  5000  | 
| 每个规则组的最大参考语句数。在规则组中，参考语句可以引用 IP 集或正则表达式模式集。 |  50  | 
| 每个保护包（web ACL）的最大参考语句数。在保护包（web ACL）中，参考语句可以引用规则组、IP 集或正则表达式模式集。 |  50  | 
| 每个 IP 集以 CIDR 表示法表示的 IP 地址的最大数量 |  10000  | 
| 每个保护包（web ACL）基于速率的规则的最大数量  |  10  | 
| 每个规则组基于速率的规则的最大数量 |  4  | 
| 可为基于速率的规则定义的最小请求速率 |  10  | 
| 每个基于速率的规则可以限制的唯一 IP 地址的最大数量 |  10000  | 
| 字符串匹配语句中的最大字符数 |  200  | 
| 每个正则表达式模式中的最大字符数 |  200  | 
| 每个正则表达式模式集的唯一正则表达式模式的最大数量 |  10  | 
| 可以检查 Application Load Balancer AWS AppSync 和保护措施的 Web 请求正文的最大大小 |  8 KB  | 
| 可以检查的 Web 请求正文的最大大小为 API Gateway CloudFront、Amazon Cognito、App Runner 和已验证访问保护\$1\$1 |  64 KB  | 
| 每条规则语句的最大文本转换次数 |  10  | 
| 单个自定义响应定义的自定义响应正文内容的最大大小 |  4 KB  | 
| 单个自定义响应定义的最大自定义标头数 |  10  | 
| 单个自定义请求定义的最大自定义标头数 |  10  | 
| 单个规则组或单个保护包（web ACL）的所有响应正文内容的最大组合大小 |  50 KB  | 
| 单个规则中地理匹配国家/地区代码的最大数量  |  50  | 

\$1在保护包 (Web ACL) WCUs 中使用超过 1,500 的保护包会产生超出基本保护包 (Web ACL) 价格的成本。有关更多信息，请参阅 [Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md) 和 [AWS WAF 定价](https://aws.amazon.com/waf/pricing/)。

\$1\$1默认情况下，API Gateway CloudFront、Amazon Cognito、App Runner 和已验证访问资源的身体检查限制设置为 16 KB，但您可以将保护包 (Web ACL) 配置中的任何资源增加到列出的最大值。有关更多信息，请参阅 [管理人体检查的注意事项 AWS WAF](web-acl-setting-body-inspection-limit.md)。

AWS WAF 每个地区的每个账户有以下固定通话配额。这些配额适用于通过任何可用方式（包括控制台、CLI、REST API 和）对服务的总调用 SDKs。 AWS CloudFormation无法更改这些限额。


| 调用类型 | 每区域每账户的限额 | 
| --- | --- | 
| 调用 AssociateWebACL 的最大次数 |  每 2 秒一个请求   | 
| 调用 DisassociateWebACL 的最大次数 |  每 2 秒一个请求   | 
| 调用 GetWebACLForResource 的最大次数  |  每秒一个请求  | 
| 调用 ListResourcesForWebACL 的最大次数 |  每秒一个请求  | 
| 调用 GetDecryptedAPIKey 的最大次数 |  每 2 秒一个请求  | 
| 对任何单个 Get 或 List 操作的最大调用次数（如果未为其定义其他限额）  |  每秒五个请求  | 
| 对任何单个 Create、Put 或 Update 操作的最大调用次数（如果未为其定义其他限额）  |  每秒一个请求  | 

AWS WAF 中单个组织中所有账户的通话都有以下固定配额 AWS Organizations。这些配额适用于通过任何可用方式（包括控制台、CLI、REST API 和）对服务的总调用 SDKs。 AWS CloudFormation无法更改这些限额。


| 调用类型 | 单个区域中每个组织的配额 | 
| --- | --- | 
| 在美国东部（弗吉尼亚州北部）(us-east-1)、美国西部（俄勒冈州）(us-west-2) 或欧洲地区（爱尔兰）(eu-west-1) 中的任何单个区域中，一个组织内所有账户对 ListResourcesForWebACL 的最大调用次数。 |  每秒 12 个请求  | 
| 在本表中没有列出不同配额的任何单个区域中，一个组织内所有账户对 ListResourcesForWebACL 的最大调用次数。 |  每秒 6 个请求  | 

# 将您的 AWS WAF 经典资源迁移到 AWS WAF
<a name="waf-migrating-from-classic"></a>

**警告**  
AWS WAF Classic 正在按计划 end-of-life进行。有关您所在地区的里程碑和日期，请参阅您的 AWS Health 控制面板。

**注意**  
这是 **AWS WAF** 文档。只有在 2019 年 11 月 AWS WAF 之前创建了诸如规则和 Web ACLs 之类的 AWS WAF 资源，并且尚未将其迁移到最新版本时，才应使用此版本。要迁移您的网站 ACLs，请参阅[将您的 AWS WAF 经典资源迁移到 AWS WAF](#waf-migrating-from-classic)。  
**有关的最新版本 AWS WAF，**请参阅[AWS WAF](waf-chapter.md)。

本节提供将规则和保护包 (Web ACLs) 从 Classic 迁移到 AWS WAF Classic 的指导 AWS WAF。 AWS WAF 已于 2019 年 11 月发布。如果您使用 C AWS WAF lassic 创建了诸如规则和保护包 (Web ACLs) 之类的资源，则需要使用 C AWS WAF lassic 来处理这些资源，或者将其迁移到最新版本。

**警告**  
AWS WAF 经典支持将于 2025 年 9 月 30 日结束。

在开始迁移工作之前，请 AWS WAF 通过通读来熟悉一下。[AWS WAF](waf-chapter.md)

**Topics**
+ [为什么要迁移到 AWS WAF？](waf-migrating-why-migrate.md)
+ [迁移注意事项和限制](waf-migrating-caveats.md)
+ [迁移的工作原理](waf-migrating-how-it-works.md)
+ [将保护包 (Web ACL) 从 Cl AWS WAF assic 迁移到 AWS WAF](waf-migrating-procedure.md)

# 为什么要迁移到 AWS WAF？
<a name="waf-migrating-why-migrate"></a>

与之前的版本相比，最新版本 AWS WAF 提供了许多改进，同时保留了您习惯的大部分概念和术语。

以下列表介绍 AWS WAF最新版本中的主要更改。在继续迁移之前，请花点时间查看此列表并熟悉指南的 AWS WAF 其余部分。
+ **对 AWS WAF 经典版的支持将于 2025 年 9 月 30 日结束。**
+ **AWS 的托管规则 AWS WAF**-现在可通过 AWS 托管规则提供的规则组提供针对常见 Web 威胁的防护。这些规则组中的大多数都是免费包含的 AWS WAF。有关更多信息[AWS 托管规则规则组列表](aws-managed-rule-groups-list.md)，请参阅博客文章[宣布的 AWS 托管规则 AWS WAF](https://aws.amazon.com/blogs/aws/announcing-aws-managed-rules-for-aws-waf/)。
+ **新 AWS WAF API** — 新 API 允许您使用一组配置所有 AWS WAF 资源 APIs。为了区分区域和全球应用程序，新 API 包括一个 `scope` 设置。有关 API 的更多信息，请参阅[AWS WAFV2 操作](https://docs.aws.amazon.com/waf/latest/APIReference/API_Operations_AWS_WAFV2.html)和[AWS WAFV2 数据类型](https://docs.aws.amazon.com/waf/latest/APIReference/API_Types_AWS_WAFV2.html)。

  在 APIs、 SDKs CLIs AWS CloudFormation、和 AWS WAF Classic 中，Classic 保留了其命名方案`v2`，并根据上下文添加了`V2`或。 AWS WAF 
+ **简化的服务配额（限制）**— AWS WAF 现在允许每个保护包（Web ACL）有更多规则，并允许您表达更长的正则表达式模式。有关更多信息，请参阅 [AWS WAF 配额](limits.md)。
+ **计算需求决定容量限制** — 保护包 (Web ACLs) 的限制现在基于保护包 (Web ACL) 容量单位 (WCUs)。 AWS WAF WCUs 根据规则所需的运行容量计算规则。保护包 (Web ACL) 的总 WCUs 和等于其所有规则和规则组的 WCUs 总和。

  有关 WCU 的一般信息，请参阅 [如何 AWS WAF 运作](how-aws-waf-works.md)。有关每个规则的 WCU 使用情况的信息，请参阅 [在中使用规则语句 AWS WAF](waf-rule-statements.md)。
+ **基于文档的规则编**写-您现在可以以 JSON 格式编写和表达规则、规则组和保护包 (Web ACLs)。您不再需要使用单独的 API 调用来创建不同的条件，然后将条件与规则相关联。这极大地简化了编写和维护代码的方式。在查看保护包 (Web ACL ACLs) 时，您可以通过控制台访问保护包 (Web ACL) 的 JSON 格式，方法是选择**下载保护包 (Web ACL) 作为 JSON**。创建自己的规则时，可以通过选择**规则 JSON 编辑器**来访问其 JSON 表示形式。
+ **规则嵌套和完全逻辑操作支持**：您可以使用逻辑规则语句和使用嵌套来编写复杂的组合规则。您可以创建语句，如 `[A AND NOT(B OR C)]`。有关更多信息，请参阅 [在中使用逻辑规则语句 AWS WAF](waf-rule-statements-logical.md)。
+ **改进的基于速率的规则**-在的最新版本中 AWS WAF，您可以自定义规则评估的时间窗口以及规则聚合请求的方式。可以使用多个 web 请求特征的组合来自定义聚合。此外，最新的基于速率的规则可以更快地应对流量变更。有关更多信息，请参阅 [在中使用基于费率的规则语句 AWS WAF](waf-rule-statement-type-rate-based.md)。
+ **对于 IP 集的可变 CIDR 范围支持**：IP 设置规范现在对于 IP 范围具有更大的灵活性。对于 IPv4`/1`， AWS WAF 支持`/32`。对于 IPv6`/1`， AWS WAF 支持`/128`。有关 IP 集的更多信息，请参阅 [IP 集匹配规则语句](waf-rule-statement-type-ipset-match.md)。
+ **可链接的文本转换** — AWS WAF 可以在检查网络请求内容之前对其进行多次文本转换。有关更多信息，请参阅 [在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。
+ **改善了控制台体验** — 新的 AWS WAF 控制台具有可视化规则生成器和更直观的控制台设计。
+ Fi@@ **rewall Manager AWS WAF 策略的扩展选项**-在 Firewall Manager 的 AWS WAF 保护包管理 (Web ACLs) 中，您现在可以创建一组先 AWS WAF 处理的规则组和一组最后 AWS WAF 处理的规则组。应用 AWS WAF 策略后，本地账户所有者可以添加自己的规则组，这些规则组在这两个规则组之间进行 AWS WAF 处理。有关 Firewall Manager AWS WAF 策略的更多信息，请参阅 [在 Firewall Manager 中使用 AWS WAF 策略](waf-policies.md)。
+ **AWS CloudFormation 支持所有规则语句类型** — AWS WAF AWS CloudFormation 支持 AWS WAF 控制台和 API 支持的所有规则语句类型。此外，您可以轻松地将您以 JSON 格式编写的规则转换为 YAML 格式。



# 迁移注意事项和限制
<a name="waf-migrating-caveats"></a>

迁移仅处理保护包 (Web ACL) 配置，而保护包 (Web ACL) 迁移不会像 AWS WAF 经典版中那样引入所有设置。在 AWS WAF (v2) 中，某些配置项目需要手动配置。有些事情在两个版本之间并不完全一致，你需要决定如何配置 AWS WAF (v2) 中的功能。某些设置（如保护包（web ACL）与 AWS 资源的关联）最初会在新版本中禁用，以便您可以在准备就绪后添加它们。

以下列表介绍迁移的注意事项，并说明您可能要采取的任何应对步骤。使用此概览来规划迁移。稍后的详细迁移步骤将指导您完成建议的迁移步骤。
+ **单账户迁移**-您只能将任何账户的 AWS WAF 经典资源迁移到同一账户的 AWS WAF 资源。
+ **仅限保护包 (Web ACL) 配置**-迁移仅迁移保护包 (Web ACLs) 和保护包 (Web ACLs) 正在使用的资源。要迁移未被任何迁移的 Web ACL 使用的资源（例如规则组或 IP 集），请在 AWS WAF (v2) 中手动创建该资源。
+ **没有 AWS Marketplace 托管规则**-迁移不会从 AWS Marketplace 卖家那里移交任何托管规则。有些 AWS Marketplace 卖家有同等的托管规则 AWS WAF ，您可以再次订阅。在执行此操作之前，请查看最新版本附带的 AWS 托管规则 AWS WAF。其中大多数对 AWS WAF 用户都是免费的。有关托管规则的信息，请参阅[在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)。
+ **无保护包（web ACL）关联**：迁移不会带入保护包（web ACL）和受保护资源之间的任何关联。这是设计使然，目的是避免影响生产工作负载。验证所有内容都已正确迁移后，请将新的保护包（web ACL）与您的资源关联。
+ **日志记录已禁用**：默认情况下，已迁移保护包（web ACL）的日志记录处于禁用状态。这是设计使然。准备好从 Classic 切换到 C AWS WAF lassic 时启用日志记录 AWS WAF。
+ **没有 AWS Firewall Manager 规则组**-迁移不处理由 Firewall Manager 管理的规则组。您可以迁移由 Firewall Manager 管理的保护包（web ACL），但迁移不会带入规则组。与其使用这些保护包的迁移工具 (Web ACLs)，不如在 Firewall Manager AWS WAF 中为新保护包重新创建策略。
**注意**  
Firewall Manager 为 AWS WAF 经典版管理的规则组是 Firewall Manager 规则组。在新版本中 AWS WAF，规则组就是 AWS WAF 规则组。在功能上，它们是一样的。
+ **AWS WAF 安全自动化警告** — 不要尝试迁移任何 AWS WAF 安全自动化。迁移不会转换自动化过程可能正在使用的 Lambda 函数。可考虑改为部署自动采用最新版本。有关信息，请参阅 [AWS WAF 安全自动化](https://aws.amazon.com/solutions/aws-waf-security-automations/)。

# 迁移的工作原理
<a name="waf-migrating-how-it-works"></a>

您可以使用多种方法将网页 ACLs 从 AWS WAF v2 迁移 AWS WAF Classic 到 v2。按照以下步骤完成迁移。

**从迁移 AWS WAF Classic 到 AWS WAF v2**

1. 识别您的 AWS WAF Classic 网站 ACLs：
   + 在 AWS Health 控制面板 ACLs 中查看您的网站列表。
   + 使用 [AWS WAF Classic Web ACL 清理脚本](         https://github.com/aws-samples/sample-for-waf-classic-to-wafv2-migrate-and-cleanup/tree/main/scripts/waf-classic-cleanup          )获取您的所有 Web ACLs 及其关联的列表。这可以帮助您识别哪些网站 ACLs 正在积极保护资源，并允许您删除未使用的网站 ACLs。

1. 迁移个人网站 ACLs：
   + 按照 [AWS WAF 开发人员指南](https://docs.aws.amazon.com/waf/latest/developerguide/waf-migrating-procedure.html)中的迁移过程进行操作。
   + 使用迁移向导解析您的 AWS WAF Classic Web ACL 并生成 AWS CloudFormation 模板。
   + 使用生成的模板创建等效的 AWS WAF v2 Web ACL 并完成迁移。

1. 对于多个符合条件的网站 ACLs：
   + 使用[AWS WAF 批量迁移脚本](https://github.com/aws-samples/sample-for-waf-classic-to-wafv2-migrate-and-cleanup/tree/main/scripts/waf-classic-migration          ) ACLs 同时迁移多个符合条件的 AWS WAF Classic 网站。

1. 对于由 AWS Firewall Manager以下机构 ACLs 管理的网站：
   + Firewall Manager 策略使用 ACLs 带有 AWS WAF Classic 策略 AWS WAF Classic 的 Web。对于 2022 年 1 月之前创建的 Shield 高级策略，Firewall Manager 也使用 AWS WAF Classic 网络 ACLs。您必须迁移这些策略才能使用 AWS WAF v2 Web ACLs。

     按照 [在 Fire AWS WAF Classic wall Manager ACLs 中迁移网站](migrate-waf-classic-fms.md) 中的说明进行操作。

**重要**  
我们建议您在将其与您的资源关联之前，先检查每个迁移的网站， ACLto 确保其符合您的安全要求。

# 将保护包 (Web ACL) 从 Cl AWS WAF assic 迁移到 AWS WAF
<a name="waf-migrating-procedure"></a>

自动迁移会继承您的大部分 AWS WAF 经典保护包 (Web ACL) 配置，剩下一些需要手动处理的事情。

**注意**  
某些保护配置无法自动迁移，需要在 AWS WAF (v2) 中进行手动配置。列表见 [迁移注意事项和限制](waf-migrating-caveats.md)。

以下列出了迁移保护包（web ACL）的概要步骤。

1. 自动迁移会读取与现有保护包 (Web ACL) 相关的所有内容，无需在 Cl AWS WAF assic 中修改或删除任何内容。它创建 Web ACL 及其相关资源的表示形式，与兼容 AWS WAF。它为新的保护包（web ACL）生成一个 CloudFormation 模板，并将其存储在 Amazon S3 存储桶中。

1. 将模板部署到中 CloudFormation，以便在中重新创建保护包 (Web ACL) 和相关资源。 AWS WAF

1. 您可以查看保护包（web ACL）并手动完成迁移，同时确保新的保护包（web ACL）充分利用最新 AWS WAF的功能。

1. 您可以手动将受保护的资源切换到新的保护包（web ACL）。

**Topics**
+ [迁移保护包（web ACL）：自动迁移](waf-migrating-procedure-automatic.md)
+ [迁移保护包（web ACL）：手动后续操作](waf-migrating-procedure-manual-finish.md)
+ [迁移保护包（web ACL）：其他注意事项](waf-migrating-procedure-additional.md)
+ [迁移保护包（web ACL）：切换](waf-migrating-procedure-switchover.md)

# 迁移保护包（web ACL）：自动迁移
<a name="waf-migrating-procedure-automatic"></a>

**自动将保护包 (Web ACL) 配置从 Cl AWS WAF assic 迁移到 AWS WAF**

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

1. 选择 “**切换到 AWS WAF 经典**”，然后查看保护包 (Web ACL) 的配置设置。记下这些设置，同时考虑到前一节[迁移注意事项和限制](waf-migrating-caveats.md)中介绍的注意事项和限制。

1. 在顶部的信息对话框中，找到以 M **igrate 保护包 (Web ACLs)** 开头的句子，然后选择**迁移向导**的链接。这将启动迁移向导。

   如果您没有看到信息对话框，则可能是自启动 C AWS WAF lassic 主机以来已将其关闭。在导航栏中，选择 “**切换到新建**”， AWS WAF然后选择 “**切换到 AWS WAF 经典**”，信息对话框就会重新出现。

1. 选择要迁移的保护包（web ACL）。

1. 对于**迁移配置**，提供要用于模板的 Amazon S3 存储桶。您需要为迁移 API 正确配置的 Amazon S3 存储桶来存储迁移 API 生成的 AWS CloudFormation 模板。
   + 如果存储桶已加密，则必须使用 Amazon S3（SSE-S3）密钥。迁移不支持使用 AWS Key Management Service (SSE-KMS) 密钥进行加密。
   + 存储桶名称必须以 `aws-waf-migration-` 开头。例如 `aws-waf-migration-my-web-acl`。
   + 存储桶必须位于您要部署此模板的区域中。例如，对于 `us-west-2` 中的保护包（web ACL），您必须使用 `us-west-2` 中的 Amazon S3 存储桶，并且必须将模板堆栈部署到 `us-west-2`。

1. 对于 **S3 存储桶策略**，我们建议选择 **自动应用迁移所需的存储桶策略**。或者，如果您想自行管理存储桶，则必须手动应用以下存储桶策略：
   + 对于全球亚马逊 CloudFront 应用程序 (`waf`)：

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

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {
                     "Service": "apiv2migration.waf.amazonaws.com"
                 },
                 "Action": "s3:PutObject",
                 "Resource": "arn:aws:s3:::<BUCKET_NAME>/AWSWAF/<CUSTOMER_ACCOUNT_ID>/*"
             }
         ]
     }
     ```

------
   + 对于区域性 Amazon API Gateway 或应用程序负载均衡器应用程序 (`waf-regional`)：

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

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement": [
             {
                 "Effect": "Allow",
                 "Principal": {
                     "Service": "apiv2migration.waf-regional.amazonaws.com"
                 },
                 "Action": "s3:PutObject",
                 "Resource": "arn:aws:s3:::<BUCKET_NAME>/AWSWAF/<CUSTOMER_ACCOUNT_ID>/*"
             }
         ]
     }
     ```

------

1. 在 **选择如何处理无法迁移的规则** 中，选择排除无法迁移的规则或选择停止迁移。有关无法迁移的规则的信息，请参阅[迁移注意事项和限制](waf-migrating-caveats.md)。

1. 选择**下一步**。

1. 对于**创建 CloudFormation 模板**，请验证您的设置，然后选择**开始创建 CloudFormation 模板**以开始迁移过程。这可能需要几分钟时间，具体取决于保护包（web ACL）的复杂性。

1. 在 “**创建并运行 CloudFormation 堆栈以完成迁移**” 中，您可以选择进入 AWS CloudFormation 控制台根据模板创建堆栈，创建新的保护包 (Web ACL) 及其资源。为此，请选择**创建 CloudFormation 堆栈**。

自动迁移过程完成后，您可以继续执行手动后续步骤。请参阅[迁移保护包（web ACL）：手动后续操作](waf-migrating-procedure-manual-finish.md)。

# 迁移保护包（web ACL）：手动后续操作
<a name="waf-migrating-procedure-manual-finish"></a>

自动迁移完成后，请查看新创建的保护包（web ACL）并填入迁移过程未带入的组件。以下过程介绍迁移未处理的保护包（web ACL）管理的各个方面。有关列表，请参阅[迁移注意事项和限制](waf-migrating-caveats.md)。

**完成基本迁移 - 手动步骤**

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

1. 控制台应自动使用最新版本的 AWS WAF。要验证这一点，请在导航窗格中查看是否可以看到 “**切换到 AWS WAF 经典版**” 选项。如果您看到 “**切换到新**版本” AWS WAF，请选择该选项以切换到最新版本。

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

1. 在**保护包 (Web ACLs)** 页面中，在创建新保护包 (Web ACL) 的区域列表中找到您的新保护包 (Web ACL)。选择保护包（web ACL）的名称以显示保护包（web ACL）的设置。

1. 对照之前的 AWS WAF 经典 Web ACL，查看新保护包 (Web ACL) 的所有设置。默认情况下，日志记录和受保护的资源关联处于禁用状态。您可以在准备好进行切换时启用这些功能。

1. 如果您的 AWS WAF 经典保护包 (Web ACL) 具有托管规则组，则迁移中不会移除包含的规则组。您可以将托管规则组添加到新的保护包（web ACL）中。查看有关托管规则组的信息，包括新版本中可用的 AWS 托管规则列表 AWS WAF，网址为[在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md)。要添加托管规则组，请执行以下操作：

   1. 在保护包（web ACL）设置页面中，选择保护包（web ACL）**规则**选项卡。

   1. 选择**添加规则**，然后选择**添加托管规则组**。

   1. 展开您选择的供应商的列表，然后选择要添加的规则组。对于 AWS Marketplace 卖家，您可能需要订阅规则组。有关在保护包（web ACL）中使用托管规则组的更多信息，请参阅 [在中使用托管规则组 AWS WAF](waf-managed-rule-groups.md) 和 [使用包含规则和规则组的保护包 (Web ACLs) AWS WAF](web-acl-processing.md)。

完成基本迁移过程后，我们建议您查看您的需求并考虑其他选项，以确保新配置尽可能高效并使用最新的可用安全选项。请参阅[迁移保护包（web ACL）：其他注意事项](waf-migrating-procedure-additional.md)。

# 迁移保护包（web ACL）：其他注意事项
<a name="waf-migrating-procedure-additional"></a>

查看您的新保护包 (Web ACL)，并考虑新 AWS WAF 版中可供您使用的选项，以确保配置尽可能高效，并且使用的是最新的可用安全选项。

**其他 AWS 托管规则**  
考虑在保护包 (Web ACL) 中实施其他 AWS 托管规则，以提高应用程序的安全状况。这些都包含 AWS WAF 在内，不收取额外费用。 AWS 托管规则具有以下类型的规则组：
+ 基准规则组针对各种常见威胁提供了一般保护，例如阻止已知错误输入进入应用程序并防止访问管理页面。
+ 使用案例特定的规则组为许多不同的使用案例和环境提供增量保护。
+ IP 声誉列表基于客户端的源 IP 提供威胁情报。

有关更多信息，请参阅 [AWS 的托管规则 AWS WAF](aws-managed-rule-groups.md)。

**规则优化和清理**  
重新访问旧规则，并考虑通过重写它们或删除过时的规则来优化它们。例如，如果您过去部署了技术论文《OWASP 十大 Web 应用程序漏洞》、《为 OWASP 十大 Web 应用程序漏洞[使用做好准备》 AWS WAF 和《我们的新白皮书》中的 AWS CloudFormation 模板，则应考虑将其替换为托](https://aws.amazon.com/blogs/aws/prepare-for-the-owasp-top-10-web-application-vulnerabilities-using-aws-waf-and-our-new-white-paper/)管规则。 AWS 虽然文档中的概念仍然适用，可以帮助您编写自己的规则，但模板创建的规则在很大程度上已被 AWS 托管规则所取代。

**Amazon CloudWatch 指标和警报**  
重新访问您的 Amazon CloudWatch 指标并根据需要设置警报。迁移不会带入 CloudWatch 警报，并且您的指标名称可能并不符合您需要。

**与您的应用程序团队一起审核**  
与您的应用程序团队合作并检查安全状况。找出应用程序经常解析哪些字段，并添加规则以相应地清理输入。如果应用程序的业务逻辑无法处理边缘案例，请检查是否存在任何边缘案例，并添加规则以捕获这些案例。

**规划切换**  
与您的应用程序团队一起规划切换的时间。从旧的保护包（web ACL）关联切换到新的保护包（web ACL）关联可能需要很少的时间才能传播到存储资源的所有区域。传播时间可以从几秒钟到几分钟不等。在此期间，有些请求将由旧的保护包（web ACL）处理，而其他请求将由新的保护包（web ACL）处理。在整个交换过程中，您的资源都将受到保护，但是您可能会注意到在切换进行期间请求处理存在不一致之处。

准备好切换时，请按照[迁移保护包（web ACL）：切换](waf-migrating-procedure-switchover.md)中的步骤操作。

# 迁移保护包（web ACL）：切换
<a name="waf-migrating-procedure-switchover"></a>

验证新的保护包（web ACL）设置后，可以开始使用它来代替 AWS WAF Classic 保护包（web ACL）。

**开始使用您的新 AWS WAF 保护包 (Web ACL)**

1. 按照中的指导将 AWS WAF 保护包 (Web ACL) 与要保护的资源相关联[将保护与资源关联或取消关联 AWS](web-acl-associating-aws-resource.md)。这会自动断开资源与旧保护包（web ACL）的关联。

   切换可能需要几秒到几分钟的传播时间。在此期间，一些请求可能会由旧的保护包（web ACL）处理，而其他请求则由新的保护包（web ACL）处理。在整个交换过程中，您的资源都将受到保护，但是在请求处理完成之前，您可能会注意到请求处理存在不一致之处。

1. 按照 [记录 AWS WAF 保护包 (Web ACL) 流量](logging.md) 中的指导为新的保护包（web ACL）配置日志记录。

1. （可选）如果您的 AWS WAF 经典保护包 (Web ACL) 不再与任何资源关联，请考虑将其完全从 AWS WAF 经典版中删除。有关信息，请参阅[删除 Web ACL](classic-web-acl-deleting.md)。