はじめに
AWS WAF(Web Application Firewall)はウェブアプリケーションを様々な攻撃から保護するための強力なサービスです。しかし、適切に設定しないと正常なユーザーリクエストまでブロックしてしまうという事態に陥ることがあります。
この記事では、AWS WAFのCommonRuleSet
によって発生した実際のトラブル事例と、その解決方法について共有します。これからWAFを導入する方や、現在のWAF設定を見直したい方の参考になれば幸いです。
発生した問題
AWS WAFを本番環境に導入したところ、アプリケーションの一部機能にバグが発生。
問題の詳細
- WebACLに登録した
CommonRuleSet
のルールの一つ、SizeRestrictions_BODY
の影響で正常なリクエストがブロックされた - アプリケーション仕様上、正当に大きなデータを送信する必要がある機能が、データ量超過と判定され検知
- ユーザーからのエラー報告により発覚、WAFのログを確認することで原因を特定
原因の分析
CommonRuleSet
はAWS WAFが提供する一般的な脅威に対する保護ルールセットですが、その中のSizeRestrictions_BODY
ルールはHTTPリクエストボディのサイズ制限を設けています。
デフォルト設定では、このサイズ制限を超えるリクエストは「潜在的な攻撃」として自動的にブロックされてしまいます。
しかし、以下のような正当なユースケースでも大きなリクエストボディが必要な場合があります:
- ファイルアップロード機能
- リッチテキストエディタの保存
- 大量のフォームデータを送信する画面
- APIによる一括データ処理
今回のケースでは、アプリケーションの正常な機能であるにもかかわらず、WAFルールにより不正なリクエストとして判定・ブロックされてしまいました。
対応策
個別のルール内容自体は変更できないため、ルールの「アクション」を変更することで対応。
具体的な解決方法
- AWS マネジメントコンソールからWAFコンソールにアクセス
- 該当するWebACLを選択
- ルールグループ内の
SizeRestrictions_BODY
ルールを見つける - アクションのオーバーライドを「ブロック」から「カウント」に変更
これにより、サイズ制限を超えるリクエストもブロックされずに通過するようになり、アプリケーションの機能が正常に動作するようになりました。
同時に、「カウント」モードにすることで、該当するリクエストのログは引き続き記録されるため、不正なリクエストが増加していないかモニタリングすることも可能です。
注意
このAWS WAFの設定コンソールは2025年3月現在のUIです。
教訓と推奨事項
この経験から得られた教訓として、以下を強くお勧めします:
WAF導入時のベストプラクティス
-
段階的な導入
- 最初は全てのルールを「カウント」モードで設定
- ログを分析し、正常なトラフィックへの影響を確認
- 問題がなければ段階的に「ブロック」モードに移行
-
検証環境での事前テスト
- 本番環境への適用前に必ず検証環境でテスト
- アプリケーションの全機能が正常に動作するか確認
- 特に大きなデータを扱う機能の動作確認を重点的に
-
ルールの詳細確認
- 特に
CommonRuleSet
やAWSManagedRulesCommonRuleSet
など定義済みルールセットの詳細を理解 - 各ルールがどのようなリクエストを検知・ブロックするか把握
- AWS公式ドキュメントで各ルールの詳細を確認
- 特に
-
監視体制の整備
- WAFのログを定期的に分析
- 誤検知やブロックの傾向を把握
- CloudWatchアラームの設定で異常を早期検知
まとめ
AWS WAFは強力なセキュリティサービスですが、正しく設定しないとアプリケーションの正常な機能までブロックしてしまう可能性があります。特にCommonRuleSet
のような定義済みルールセットを使用する際は、各ルールの挙動を理解し、アプリケーションの特性に合わせて適切な設定を行うことが重要です。
段階的な導入と丁寧な検証を行うことで、セキュリティとユーザビリティの両立が可能になります。WAF導入時には、この記事で紹介したような潜在的な問題に注意しながら、慎重に設定を進めていきましょう。
参考資料
※画像はイメージです。実際の設定画面とは異なる場合があります。