封鎖動作的自訂回應 - AWS WAF、AWS Firewall Manager 與 AWS Shield Advanced

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

封鎖動作的自訂回應

你可以指導AWS WAF,將自訂 HTTP 回應傳送回用戶端,以進行規則動作或 Web ACL 預設處理行動 (設定為)Block。如需規則動作的詳細資訊,請參閱 AWS WAF 規則動作。如需預設 Web ACL 動作的詳細資訊,請參閱決定 Web ACL 的預設動作

當您定義區塊動作的自訂回應處理時,您可以定義狀態碼、標頭和回應內文。如需可搭配使用的狀態碼清單AWS WAF,請參閱下面的章節,自訂回應的支援狀態碼

使用案例

自訂回應的使用案例包含下列範例:

  • 將非預設狀態碼傳回給用戶端。

  • 將靜態錯誤頁面傳回給用戶端。

  • 將用戶端重新導向至不同的 URL。若要執行此作業,請指定3xx重定向狀態代碼,如301 (Moved Permanently)或者302 (Found),然後指定一個名為的新標頭Location使用新的網址。

與您在受保護資源中定義的回應互動

您指定的自訂回應AWS WAF區塊動作的優先順序高於您在受保護資源中定義的任何回應規格。

的主機服務AWS您保護的資源AWS WAF可能允許對 Web 請求進行自定義響應處理。範例如下:

  • 亞馬遜 CloudFront 允許您根據狀態碼自定義錯誤頁面。如需相關資訊,請參閱「」。產生自訂錯誤回應中的亞馬遜 CloudFront 開發人員指南

  • Amazon API Gateway 可讓您定義閘道的回應和狀態碼。如需相關資訊,請參閱「」。API Gateway 中的閘道回應中的Amazon API Gateway 開發人員指南

您不能合併AWS WAF自定義響應設置與受保護的自定義響應設置AWS資源。任何單獨的 Web 請求的響應規範要么完全來自AWS WAF或完全不受保護的資源。

對於網絡請求AWS WAF塊,以下顯示優先級的順序。

  1. AWS WAF自訂回應— 如果AWS WAF封鎖動作已啟用自訂回應,受保護的資源會將設定的自訂回應傳送回用戶端。這適用於是否在定義的自定義響應AWS WAF指定只是 HTTP 代碼,只是一個自定義頁面,或兩者。您可能已在受保護的資源本身中定義的任何回應設定都沒有任何作用。

  2. 在受保護的資源中定義的自訂回應— 否則,如果受保護的資源已指定自訂回應設定,則受保護的資源會使用這些設定來回應用戶端。

  3. AWS WAF預設值回應— 否則,受保護的資源會回應用戶端AWS WAF預設值回應403 (Forbidden)

對於網絡請求AWS WAF允許,您對受保護資源的配置決定了它發送回客戶端的響應。您無法於以下配置回應設定AWS WAF對於允許的請求。您可以在中配置的唯一自定義AWS 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 } }