本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
傳送自訂回應 Block actions
本節說明如何指示 AWS WAF ,將自訂回應傳送HTTP回用戶端,以進行規則動作或 Web ACL 預設處理行動 (設定為) Block。 如需規則動作的詳細資訊,請參閱使用規則動作於 AWS WAF。如需有關預設 Web ACL 動作的詳細資訊,請參閱設定網頁ACL預設動作 AWS WAF。
當您定義自訂回應處理 Block 動作時,您可以定義狀態碼、標頭和回應主體。如需可搭配使用的狀態碼清單 AWS WAF,請參閱下面的章節自訂回應的支援狀態碼。
使用案例
自訂回應的使用案例如下:
-
將非預設狀態碼傳送回用戶端。
-
將自定義響應頭發送回客戶端。您可以指定除外的任何標頭名稱
content-type
。 -
將靜態錯誤頁面發送回客戶端。
-
將用戶端重新導向至不同URL的. 若要這麼做,您可以指定其中一個重新
3xx
導向狀態碼 (例如301 (Moved Permanently)
或)302 (Found)
,然後指定以 new 命名Location
的新標頭URL。
與您在受保護資源中定義的回應互動
您指定的自訂回應 AWS WAF Block 動作的優先順序高於您在受保護資源中定義的任何回應規格。
的主機服務 AWS 您保護的資源 AWS WAF 可能允許對 Web 請求進行自定義響應處理。範例如下:
-
使用 Amazon CloudFront,您可以根據狀態碼自訂錯誤頁面。如需詳細資訊,請參閱 Amazon CloudFront 開發人員指南中的產生自訂錯誤回應。
-
使用 Amazon API 閘道,您可以定義閘道的回應和狀態碼。如需相關資訊,請參閱 Amazon API 閘道開發人員指南中的API閘道回應。
你不能合併 AWS WAF 自定義響應設置與受保護的自定義響應設置 AWS 資源。任何單獨的 Web 請求的響應規範要么完全來自 AWS WAF 或完全不受保護的資源。
對於網絡請求 AWS WAF 塊,以下顯示優先級的順序。
-
AWS WAF 自定義響應 — 如果 AWS WAF Block 動作啟用了自定義響應,受保護的資源將配置的自定義響應發送回客戶端。您可能已在受保護的資源本身中定義的任何回應設定都沒有作用。
-
受保護資源中定義的自訂回應 — 否則,如果受保護的資源指定了自訂回應設定,則受保護的資源會使用這些設定來回應用戶端。
-
AWS WAF 預設 Block response — 否則,受保護的資源會以 AWS WAF 預設 Block 響應
403 (Forbidden)
。
對於網絡請求 AWS WAF 允許,您對受保護資源的配置決定了它發送回客戶端的響應。您無法在中配置響應設置 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 } }