

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

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

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

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