本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Block 操作的自定义响应
对于设置 AWS WAF 为的规则操作或 Web ACL 默认操作,您可以指示将自定义 HTTP 响应发送回客户端。Block有关规则操作的更多信息,请参阅 规则操作。有关默认 Web ACL 操作的更多信息,请参阅 Web ACL 默认操作。
在为 Block 操作定义自定义响应处理时,您可以定义状态代码、标头和响应正文。有关可与配合使用的状态码列表 AWS WAF,请参阅以下部分自定义响应支持的状态码。
使用案例
自定义响应的用例包括:
-
将默认状态码发送回客户端。
-
将自定义响应标头发送回客户端。您可以为指定任何标头名称,除
content-type
外。 -
将静态错误页面发送回客户端。
-
将客户端重定向到其他 URL。为此,您需要指定一个
3xx
重定向状态码,例如301 (Moved Permanently)
或302 (Found)
,然后以新 URL 指定一个名为Location
的新标头。
与您在受保护资源中定义的响应进行交互
您为 AWS WAF Block操作指定的自定义响应优先于您在受保护资源中定义的任何响应规范。
您保护的 AWS 资源的主机服务 AWS WAF 可能允许对 Web 请求进行自定义响应处理。示例包括:
-
借助 Amazon CloudFront,您可以根据状态代码自定义错误页面。有关信息,请参阅《Amazon CloudFront 开发者指南》中的生成自定义错误响应。
-
使用 Amazon API Gateway,您可以为网关定义响应和状态码。有关更多信息,请参阅 Amazon API Gateway 开发人员指南中的 API Gateway 中的 Gateway 响应。
在受保护的 AWS 资源中,您不能将 AWS WAF 自定义响应设置与自定义响应设置结合使用。任何单个 Web 请求的响应规范要么完全来自 AWS WAF ,要么完全来自受保护的资源。
对于 AWS WAF 阻塞的 Web 请求,以下显示了优先顺序。
-
AWS WAF 自定义响应-如果 AWS WAF Block操作启用了自定义响应,则受保护的资源会将配置的自定义响应发送回客户端。您在受保护的资源中定义的任何响应设置(如有)均无效。
-
在受保护资源中定义的自定义响应 – 否则,如果受保护资源有指定的自定义响应设置,则受保护资源将使用这些设置来响应客户端。
-
AWS WAF 默认Block响应-否则,受保护的资源将使用 AWS WAF 默认响应来Block响应客户端
403 (Forbidden)
。
对于 AWS WAF 允许的 Web 请求,您对受保护资源的配置决定了它发送回客户端的响应。您无法在中 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 } }