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

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

区块操作的自定义响应

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

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

使用案例

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

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

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

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

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

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

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

  • 亚马逊 CloudFront 允许您根据状态代码自定义错误页面。想要了解有关信息,请参阅生成自定义错误响应在里面亚马逊 CloudFront 开发人员指南.

  • Amazon API Gateway 允许您为网关定义响应和状态代码。想要了解有关信息,请参阅API Gateway 中的网关响应在里面Amazon API Gateway.

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

对于这样的网络请求Amazon WAF块,以下显示优先顺序。

  1. Amazon WAF自定义响应— 如果Amazon WAFblock action 启用了自定义响应,受保护资源将配置的自定义响应发送回客户端。无论是在中定义的自定义响应,这都适用Amazon WAF仅指定 HTTP 代码,仅指定自定义页面,或两者兼而有之。您可能在受保护资源本身中定义的任何响应设置都不起作用。

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

  3. Amazon WAF默认区块响应— 否则,受保护的资源会使用以下命令响应客户端Amazon WAF默认区块响应403 (Forbidden).

对于这样的网络请求Amazon WAF允许,您对受保护资源的配置决定了它发送回客户端的响应。您无法在中配置响应设置Amazon WAF用于允许的请求。你可以在中配置的唯一自定义项Amazon WAF允许的请求是在将请求转发到受保护资源之前,在原始请求中插入自定义标头。此选项已在上一节中介绍,用于允许、计数和的自定义请求标头插入CAPTCHA行动.

自定义响应正文

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

当您在控制台中创建自定义响应时,您可以从已经定义的响应正文中进行选择,也可以创建一个新的响应体。在控制台之外,您可以在 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 } }