Block動作的自訂回應 - AWS WAF、 AWS Firewall Manager、和 AWS Shield Advanced

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

Block動作的自訂回應

您可以指示 AWS WAF 將規則動作或 Web ACL 預設處理行動設定為的自訂 HTTP 回應傳送回Block用戶端。如需規則動作的詳細資訊,請參閱 規則動作。如需有關預設 Web ACL 動作的更多資訊,請參閱網頁 ACL 預設動作

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

使用案例

自訂回應的使用案例如下:

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

  • 將自定義響應頭發送回客戶端。您可以指定除外的任何標頭名稱content-type

  • 將靜態錯誤頁面發送回客戶端。

  • 將用戶端重新導向至不同的 URL。若要這麼做,您可以指定其中一個重新3xx導向狀態碼 (例如301 (Moved Permanently)或)302 (Found),然後指定以新 URL 命名Location的新標頭。

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

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

您所保護之 AWS 資源的主機服務 AWS WAF 可能允許處理 Web 要求的自訂回應。範例如下:

您無法將 AWS WAF 自訂回應設定與受保護 AWS 資源中的自訂回應設定結合。任何個別 Web 請求的響應規範完全來自 AWS WAF 或完全來自受保護的資源。

對於 AWS WAF 封鎖的 Web 要求,下列項目顯示優先順序。

  1. AWS WAF 自定義響應 — 如果 AWS WAF Block操作啟用了自定義響應,則受保護的資源將配置的自定義響應發送回客戶端。您可能已在受保護的資源本身中定義的任何回應設定都沒有作用。

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

  3. 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 } }