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

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

區塊動作的自訂回應

您可以指示AWS WAF,將自訂 HTTP 回應傳回用戶端,以進行規則動作或設定為封鎖要求的 Web ACL 預設動作。如需規則動作的詳細資訊,請參閱 AWS WAF 規則動作。如需預設 Web ACL 動作的詳細資訊,請參閱決定 Web ACL 的預設動作

所以此AWS WAF區塊動作會定義相關聯的受保護資源傳回給用戶端的回應。預設情況下,回應為403 (Forbidden)。如需封鎖動作的詳細資訊,請參閱AWS WAF 規則動作

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

使用案例

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

  • 將非默認狀態碼傳回給用戶端。

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

  • 將用戶端重新導向至不同的 URL,方法是指定其中一個3xx重新導向狀態碼,例如301 (Moved Permanently)302 (Found),然後指定一個名為Location使用新的網址。

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

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

主機服務AWS資源,您可以使用AWS WAF可能允許自定義響應處理 Web 請求。範例如下:

這是不可能的結合AWS WAF自訂回應,其中包含受保護的AWS資源。對響應的控制要么完全屬於AWS WAF或完全使用受保護的資源:

  1. 如果AWS WAF阻止 Web 請求,AWS WAF會判斷受保護的資源傳回給用戶端的回應。對於預設的區塊動作,回應為403 (Forbidden)。如果您自訂封鎖動作,則完全以您的自訂設定提供回應。這些區塊動作回應的優先順序高於您可能在受保護資源本身中定義的任何回應設定。

  2. 如果AWS WAF允許 Web 請求通過,那麼您的受保護資源的配置將決定它發送回客戶端的響應。對於允許的要求,您可以在AWS WAF是將自定義標題插入到原始請求中,然後轉發到受保護的資源。請參閱上一節的相關說明,允許和計數動作的自訂要求標頭插入

自訂回應內文

您可以在要使用它的 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 } }