

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

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

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

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