为非阻止操作插入自定义请求标头 - AWS WAF、AWS Firewall Manager、AWS Shield Advanced 和 AWS Shield 网络安全分析器

介绍 AWS WAF 的全新控制台体验

现在,您可以使用更新后的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息,请参阅 使用更新的控制台体验

为非阻止操作插入自定义请求标头

本节介绍了当规则操作未阻止原始 HTTP 请求时,如何指示 AWS WAF 向该请求中插入自定义标头。使用此选项,您只需添加到请求中。您不能修改或替换原始请求的任何部分。插入自定义标头的使用案例包括向下游应用程序发出信号,要求其根据插入的标头以不同方式处理该请求,以及标记该请求以进行分析。

重要

此选项适用于规则操作 Allow、Count、CAPTCHA 和 Challenge,以及设置为 Allow 的保护包(web ACL)默认操作。有关规则操作的更多信息,请参阅 在 AWS WAF 中使用规则操作。有关默认保护包(web ACL)操作的更多信息,请参阅 在 AWS WAF 中设置保护包(web ACL)默认操作

使用自定义请求标头名称时的注意事项

在请求标头中添加了前缀

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" } } ]

有关使用字符串匹配规则的信息,请参阅 字符串匹配规则语句

同名标头

如果该请求中已有的标头与 AWS WAF 将要插入的标头同名,则 AWS WAF 会覆盖原标头。因此,如果您在多个具有相同名称的规则中定义标头,则检查请求并查找匹配项的最后一条规则将添加其标头,而之前的任何规则都不会添加标头。

使用带有非终止规则操作的自定义标头

与 Allow 操作不同,Count 操作不会阻止 AWS WAF 使用保护包(web ACL)中的其余规则处理 web 请求。同样,当 CAPTCHA 和 Challenge 确定请求令牌有效时,这些操作也不会阻止 AWS WAF 处理 web 请求。因此,如果采用具有这些操作之一的规则插入自定义标头,后续规则可能也会插入自定义标头。有关规则操作行为的更多信息,请参阅 在 AWS WAF 中使用规则操作

例如,假设您拥有以下规则,按所示顺序排列优先级:

  1. RuleA,其中包含一个 Count 操作和一个名为 RuleAHeader 的自定义标头。

  2. RuleB,其中包含一个 Allow 操作和一个名为 RuleBHeader 的自定义标头。

如果请求同时匹配 RuleA 和 RuleB,则 AWS WAF 插入标头 x-amzn-waf-RuleAHeaderx-amzn-waf-RuleBHeader,然后将请求转发到受保护的资源。

AWS WAF 在 web 请求完成检查后,将自定义标头插入到 web 请求中。因此,如果您将自定义请求处理与将操作设置为 Count 的规则一起使用,则后续规则不会检查您添加的自定义标头。

自定义请求处理示例

您可以为规则的操作或保护包(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" } }