为发送自定义回复 Block actions - AWS WAF, AWS Firewall Manager,以及 AWS Shield Advanced

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

为发送自定义回复 Block actions

本节介绍如何指示 AWS WAF 将设置为的规则操作或 Web ACL 默认操作的自定义HTTP响应发送回客户端 Block。 有关规则操作的更多信息,请参阅在中使用规则操作 AWS WAF。有关默认 Web ACL 操作的更多信息,请参阅在中设置 Web ACL 默认操作 AWS WAF

当你为定义自定义响应处理时 Block action 中,您可以定义状态码、标头和响应正文。有关可与配合使用的状态码列表 AWS WAF,请参阅以下部分,自定义响应支持的状态码

使用案例

自定义响应的用例包括:

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

  • 将自定义响应标头发送回客户端。您可以为指定任何标头名称,除 content-type 外。

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

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

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

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

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

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

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

你不能合并 AWS WAF 自定义响应设置,在受保护的环境中使用自定义响应设置 AWS 资源。任何单个 Web 请求的响应规范要么完全来自 AWS WAF 或者完全来自受保护的资源。

对于网络请求 AWS WAF 块,以下显示了优先顺序。

  1. AWS WAF 自定义响应 — 如果 AWS WAF Block action 启用了自定义响应,受保护的资源将配置的自定义响应发送回客户端。您在受保护的资源中定义的任何响应设置(如有)均无效。

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

  3. AWS WAF 默认值 Block response — 否则,受保护的资源会向客户端响应 AWS WAF 默认值 Block 响应403 (Forbidden)

对于网络请求 AWS WAF 允许,您对受保护资源的配置决定了它发送回客户端的响应。您无法在中配置响应设置 AWS WAF 用于允许的请求。您可以在中配置的唯一自定义设置 AWS WAF 对于允许的请求,是在将请求转发到受保护的资源之前,在原始请求中插入自定义标头。上一节 为非阻塞操作插入自定义请求标头 中介绍了此选项。

自定义响应标头

您可以为指定任何标头名称,除 content-type 外。

自定义响应正文

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

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

自定义响应示例

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

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