AWS WAF リクエストブロック時のレスポンスをカスタマイズ

9月 27, 2022AWS,AWS WAF

概要

  • AWS WAF は、リクエストがブロックされたときに返される HTTP ステータスコードと、レスポンス本文をカスタマイズすることが可能です。AWSアナウンスは、こちら
  • デフォルトでは、AWS WAF は、リクエストをブロックした際に、HTTP ステータスコード 403を返します。今回紹介する方法によって、HTTP ステータスコードに、3xx (リダイレクト)、4xx (クライアントエラー)、5xx (サーバーエラー) など異なる HTTP ステータスコードを返せるようになります。また、レスポンス本文に、JSON を使用するなどエラーのカスタマイズも可能です。
  • デフォルトアクション or 個々のルールに対して、カスタマイズしたレスポンスを設定します。
    ※AWS managed Rule や WafCharm によって定義されたルールには使用できません。

 

デフォルトのレスポンス

  • デフォルトは、リクエストをブロックした際に以下のレスポンスを返します。
niikawa@niikawa1:~$ curl https://d1vmj58jrb59di.cloudfront.net/dev
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.
We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
<BR clear="all">
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: __4vWtfwz9QJ9FNbORhVE9mF44fHcNKG06W3wTjIHctCVAXRedUAjQ==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>

 

レスポンスをカスタマイズしよう

  • WebACLを選択、「Custom response bodies」タブを選択します。

  • 「Create custom response body」を選択します。

  • 以下、Details の設定を行います。
    • 「Save」を選択

  • custom response body が作成されました。

 

  • WebACLを選択「Rules」タブを選択します。デフォルトアクションあるいは個々のルールにカスタムレスポンスを設定します。
  • デフォルトアクションにカスタムレスポンスを設定する場合は、Default web ACL action for requests that don’t match any rules の「Edit」を選択します。
    • Custom response – optional を展開
    • Enable をチェック
    • Response code を入力
    • 必要に応じて、Response headers – optional にて「Add new custom header」を押して、Key, Value を入力
    • Choose how you would like to specify the response body – optional にて、先ほど作成したcustom response body を選択
    • 「Save」を選択

  • デフォルトアクションにカスタムレスポンスが設定されました。

 

  • 個々のルールにカスタムレスポンスを設定する場合は、対象のルールを選択し、「Edit」を選択します。なお、Action にはBlock が選択されている必要があります。
    • Action のCustom response – optional を展開
    • Enable をチェック
    • Response code を入力
    • 必要に応じて、Response headers – optional にて「Add new custom header」を押して、Key, Value を入力
    • Choose how you would like to specify the response body – optional にて、先ほど作成したcustom response body を選択
    • 「Save rule」を選択

 

  • 個々のルールにカスタムレスポンスが設定されました。

 

カスタマイズ後のレスポンス

  • 上記のカスタマイズ後、リクエストをブロックした際に以下のレスポンスを返されました。
niikawa@niikawa1:~$ curl https://d1vmj58jrb59di.cloudfront.net/dev
{
    "error": "access denied"
}

 

AWS,AWS WAF

Posted by takaaki