ブロックアクションのカスタムレスポンス - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

ブロックアクションのカスタムレスポンス

Block に設定されているルールアクションまたはウェブ ACL のデフォルトアクションについて、カスタム HTTP 応答をクライアントに送り返すよう AWS WAF に指示できます。ルールアクションの詳細については、「AWS WAF ルールアクション」を参照してください。デフォルトのウェブ ACL アクションの詳細については、「ウェブ ACL のデフォルトアクションの決定」を参照してください。

ブロックアクションのカスタムレスポンス処理を定義する場合は、ステータスコード、ヘッダー、およびレスポンス本文を定義します。AWS WAF で使用できるステータスコードのリストについては、次のセクション「カスタムレスポンスでサポートされるステータスコード」を参照してください。

ユースケース

カスタムレスポンスのユースケースには、次が含まれます。

  • 非デフォルトのステータスコードをクライアントに送り返します。

  • 静的エラーページをクライアントに送り返します。

  • クライアントを別の URL にリダイレクトします。これを行うには、301 (Moved Permanently) または 302 (Found) などの 3xx リダイレクトステータスコードのいずれかを指定してから、新しい URL で Location という名前が付けられた新しいヘッダーを指定します。

保護されたリソースで定義したレスポンスとのインタラクション

AWS WAF ブロックアクション用に指定するカスタムレスポンスは、保護されたリソースで定義する応答の仕様よりも優先されます。

AWS WAF で保護する AWS リソースのホストサービスは、ウェブリクエストについてのカスタムレスポンス処理を許可する場合があります。次に例を示します。

  • Amazon CloudFront では、ステータスコードに基づいてエラーページをカスタマイズできます。カスタムエラーページの詳細については、「Amazon CloudFront デベロッパーガイド」の「カスタムエラーレスポンスの生成」を参照してください。

  • Amazon API Gateway では、ゲートウェイのレスポンスコードとステータスコードを定義できます。詳細については、「Amazon API Gateway デベロッパーガイド」の「API Gateway でのゲートウェイレスポンス」を参照してください。

保護された AWS リソースで、AWS WAF カスタムレスポンス設定をカスタムレスポンス設定と組み合わせることはできません。個々のウェブリクエストの応答の仕様は、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 アクションのカスタムリクエストヘッダーの挿入」で説明しました。

カスタムレスポンス本文

カスタムレスポンスの本文は、それを使用するウェブ ACL またはルールグループのコンテキスト内で定義します。カスタムレスポンスボディの定義後、それを作成したウェブ ACL またはルールグループの他の場所を参照して使用できます。個々のブロックアクション設定では、使用するカスタム本文を参照し、カスタムレスポンスのステータスコードとヘッダーを定義します。

コンソールでカスタムレスポンスを作成するときは、既に定義したレスポンス本文から選択するか、新しい本文を作成できます。コンソールの外部では、ウェブ ACL またはルールグループレベルでカスタムレスポンス本文を定義し、ウェブ 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 } }