実務で扱っているプロダクトが、添付ファイル付きのマスタデータの保存時に403エラーを返すようになっていました。
ローカルや検証環境では再現せず・・・長期戦を覚悟しかけていたところ、本番環境でのみ導入しているAWS WAFのマネージドルールが原因であることが分かりました。
今回の教訓
- AWS WAFのマネージドルールによって正常なリクエストが意図せずにブロックされてしまう場合がある。
- マネージドルールの
SizeRestrictions_BODY
が有効な場合、リクエストボディが8KBを超えるリクエストは全てブロックされるため要注意。
原因特定までの経緯
ファイル添付機能があるデータの保存時には毎回403が発生していたため、S3の認証周りの不備か?と探っていましたが、ファイル添付なしでもPOSTするデータのサイズが比較的大きい場合には403が発生することに気づきました。
そして同様の事例がないか調べていたところ、よくある事例だそうで・・・
AWS WAFのマネージドルールSizeRestrictions_BODY
が原因と判明しました。
AWS WAFのマネージドルール
AWS WAFでは、いちいち利用者側でアクセスの許可/ブロックのルールを定義せずとも、AWSがデフォルトで用意してくれているルールセット、マネージドルールを適用することができます。その一つがAWSManagedRulesCommonRuleSet
です。
このAWSManagedRulesCommonRuleSet
には一般的によくある不正アクセスから守ってくれるルールが多数定義されており、その中の一つにSizeRestrictions_BODY
というものがあります。これによりリクエストボディが8KBを超えるリクエストは全てブロックされてしまっていました。
対策
リクエストボディが8KBを超えうるURIが非常に多く存在するため、今回はこのSizeRestrictions_BODY
というルールを無効にする対応を取りました。8KBを超えうるURIが少数の場合はスコープダウンステートメントを使用してWAFの検査対象外とすることもできるそうです。
補足
調べたところ、WAFによって意図せずに正常なリクエストをブロックしてしまう事例はSizeRestrictions_BODY
以外にもあるみたいです。(特にファイルアップロード系で引っかかることが多いそう)
適用しているルールセットは把握しておくようにします。