对Block操作的自定义响应 - Amazon WAF、Amazon Firewall Manager 和 Amazon Shield Advanced
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

对Block操作的自定义响应

对于设置Amazon WAF为的规则操作或 Web ACL 默认操作,您可以指示将自定义 HTTP 响应发送回客户端Block。有关规则操作的更多信息,请参阅 Amazon WAF 规则操作。有关默认 Web ACL 操作的更多信息,请参阅决定 Web ACL 的默认操作

为操作定义自定义响应处理时,需要定义状态码、标头和响应正文。Block有关您可以使用的状态码列表Amazon WAF,请参阅以下部分自定义响应支持的状态码

使用案例

自定义响应的使用场景包括:

  • 将非默认状态码发送回客户端。

  • 将静态错误页面发送回客户端。

  • 将客户端重定向到不同的 URL。为此,您需要指定一个3xx重定向状态代码,例如301 (Moved Permanently)302 (Found),然后指定一个以新 URL 命名的新标Location头。

与您在受保护资源中定义的响应的交互

您为Amazon WAFBlock操作指定的自定义响应优先于您在受保护资源中定义的任何响应规范。

用于保护的Amazon资源的主机服务Amazon WAF可能允许对 Web 请求进行自定义响应处理。示例包括:

  • 使用亚马逊 CloudFront,您可以根据状态代码自定义错误页面。有关信息,请参阅《亚马逊 CloudFront 开发者指南》中的 “生成自定义错误响应”。

  • 使用 Amazon API Gateway,您可以为网关定义响应和状态代码。有关信息,请参阅《亚马逊 API Gateway 开发者指南》中的 API 网关中的网关响应

您无法在受保护Amazon资源中将Amazon WAF自定义响应设置与自定义响应设置合并。任何单个 Web 请求的响应规范要么完全来自受保护的资源,要Amazon WAF么完全来自受保护的资源。

对于Amazon WAF阻塞的 Web 请求,以下内容显示了优先顺序。

  1. Amazon WAF自定义响应-如果Amazon WAFBlock操作启用了自定义响应,则受保护的资源会将配置的自定义响应发送回客户端。无论中定义的自定义响应仅指定 HTTP 代码、仅Amazon WAF指定自定义页面,还是两者都适用。您可能在受保护资源本身中定义的任何响应设置都无效。

  2. 在@@ 受保护资源中定义的自定义响应-否则,如果受保护资源指定了自定义响应设置,则受保护资源使用这些设置来响应客户端。

  3. Amazon WAF默认Block响应 — 否则,受保护的资源将使用Amazon WAF默认Block响应响应响应客户端403 (Forbidden)

对于Amazon WAF允许的 Web 请求,您对受保护资源的配置决定了它发送回客户端的响应。您无法在中Amazon WAF为允许的请求配置响应设置。您可以Amazon WAF为允许的请求配置的唯一自定义设置是在原始请求中插入自定义标头,然后再将请求转发到受保护的资源。此选项在上一节中进行了描述为非阻塞操作插入自定义请求标头

自定义响应正文

您可以在要使用自定义响应的 Web ACL 或规则组的上下文中定义自定义响应的正文。定义自定义响应正文后,可以在创建自定义响应正文的 Web ACL 或规则组中的任何其他位置通过引用使用它。在单个Block操作设置中,您可以引用要使用的自定义正文,并定义自定义响应的状态代码和标题。

当您在控制台中创建自定义响应时,可以从已定义的响应正文中进行选择,也可以创建新的响应正文。在控制台之外,您可以在 Web ACL 或规则组级别定义自定义响应正文,然后从 Web ACL 或规则组中的操作设置中引用它们。如下部分的示例 JSON 所示。

自定义响应示例

以下示例列出了具有自定义响应设置的规则组的 JSON。为整个规则组定义自定义响应正文,然后在规则操作中按键引用。

{ "ARN": "test_rulegroup_arn", "Capacity": 1, "CustomResponseBodies": { "CustomResponseBodyKey1": { "Content": "This is a plain text response body.", "ContentType": "TEXT_PLAIN" } }, "Description": "This is a test rule group.", "Id": "test_rulegroup_id", "Name": "TestRuleGroup", "Rules": [ { "Action": { "Block": { "CustomResponse": { "CustomResponseBodyKey": "CustomResponseBodyKey1", "ResponseCode": 404, "ResponseHeaders": [ { "Name": "BlockActionHeader1Name", "Value": "BlockActionHeader1Value" } ] } } }, "Name": "GeoMatchRule", "Priority": 1, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "TestRuleGroupReferenceMetric", "SampledRequestsEnabled": true } } ], "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "TestRuleGroupMetric", "SampledRequestsEnabled": true } }