はじめに
みなさん、こんにちは。AWS WAFを有効化したCloudFrontやAPI Gatewayに対する8KB以上のリクエストがブロックされてしまうといった事象に遭遇したので、今回はこちらの事象の原因と解決方法について紹介していきたいと思います。
リクエストがブロックされた原因
WAFのログを確認すると、そのままズバリAWS WAFのコアルールセット(CRS)マネージドルールグループ AWSManagedRulesCommonRuleSet
のSizeRestrictions_BODY
ルールに合致したため8KB(8,192バイト)を超えるBodyを持つリクエストがブロックされていることがわかりました。
余談ですが、なぜ8KBという制限が存在するかというとそもそもAWS WAFで検査できるBodyは最初の8KBという制限があります(おそらく性能の観点で)。そのため、8KBを超えるBodyを持つ(=全文検査ができない)リクエストをデフォルトでブロックしているのではないか、と個人的には考えております。
解決方法
次の例のようにSizeRestrictions_BODY
ルールのデフォルトアクションをBlock
からCount
へ変更することによって、8KBを超えるBodyを持つリクエストがブロックされず、ちゃんと扱えるようになりました。めでたしめでたし。
余談、Terraformで設定する場合は
managed_rule_group_statementブロック内のexcluded_ruleブロックへ除外したいルールの名前を定義することで実装することが可能です。本定義を利用したサンプルコードを書いてみましたので興味のある方は次の記事をご参照いただければと思います。
終わりに
API Gatewayを扱ってきた方からするとなにを今更いってんだか…といった内容かもしれませんが、こんな情報でも誰かの役に経っていただければ幸いです。なお、今回ご紹介したマネージドルールを抜きにしても、AWS WAFにはBody以外にもHeaderやCookieにもサイズや数の制限がありますので、それを超えるリクエストを扱う場合は次のサイトを参考にしていただければと思います。
以上、AWS WAFを有効化したCloudFrontやAPI Gatewayに対する8KBを超えるリクエストがブロックされた事象の原因と解決方法のご紹介でした。
- AWS は、米国その他の諸国における Amazon.com, Inc. またはその関連会社の商標です。
- その他、記載されている会社名および商品・製品・サービス名は、各社の商標または登録商標です。