AWS WAF を CloudFront の機能と組み合わせて使うときのポイント #reinvent

AWS WAF

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS WAF と CloudFront の組み合わせ

AWS WAF は Amazon CloudFront と簡単に組み合わせて使うことができます。ACL を作成したときに1つ以上 Distribution を設定していれば、AWF は認可とブロック、または Web リクエストのカウントなどを開始できます。

…という以下のページを参考にしながら、CloudFront と組み合わせて使うとどうなるのか眺めていきたいと思います。

カスタムエラーページ

Web リクエストをベースとする WAF によるブロックを指定した場合、CloudFront からは 403 エラーになります。CloudFront では、デフォルトでは次のようなエラーメッセージが設定されているので、WAF を使った場合もこのようなメッセージが表示されます。

Forbidden: You don't have permission to access /myfilename.html on this server.

CloudFrontのカスタムエラーページを作成する機能を使うことで、このオブジェクトは自由にカスタマイズすることができます。なお、403 エラーコードが WAF のブロックによるものかどうかを判別することができない点に注意してください。

地域制限

ジオブロッキングとして知られている CloudFront の地域制限機能を使用している場合、特定の地域からアクセスしてきているユーザーに限定したディストリビューションを行うことができます。もし指定した地域からの Web リクエストのブロックを行いたい場合、WAF を組み合わせて実現することができます。この場合、他のブロックと同様 403 エラーとして返されます。

HTTP メソッド

CloudFront の Web ディストリビューションを作成した場合、以下のように HTTP メソッドを選択することができます。

  • GET, HEAD - GET メソッドに限定した CloudFront の利用。
  • GET, HEAD, OPTIONS - GET メソッドに加え、OPTIONS メソッドも可能にした CloudFront の利用。
  • GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE - よく使われる、ほとんどのメソッドを可能にした CloudFront の利用。

WAF では String Match Conditions を利用することで、HTTP メソッドの制限を行うことができます。GET と HEAD だけを有効化したい場合は WAF を利用する必要なく CloudFront のみの機能で実現可能です。WAF では、例えばこれに加えて POST だけ有効化したいなど、特定の HTTP メソッドだけをカスタマイズして設定することができます。このようなカスタマイズは CloudFront のみではサポートされていません。