AWS WAF のマネージドルールでリクエストを許可/ブロック(Allow/Block)する設定方法を教えてください

2021.08.13

困っていた内容

AWS WAF コンソールでマネージドルールのルールアクションを変えたいのですが、「カウント」しか見当たらず許可・ブロックに該当する項目が見当たりません。

現状すべてのルールをカウントモードで実行していますが、一部ルールをブロックにして動作確認を行いたいです。

どのようにすればマネージドルールグループのルール毎のリクエスト許可・ブロックができますか?

どう対応すればいいの?

AWS WAF コンソールのマネージドルールグループは「Rule action」の編集項目に Count のトグルスイッチがあります。

このスイッチのオン/オフ変更でルール毎のカウント(監視)・ブロックができます。
スイッチオン/オフ後の挙動は以下の通りです。

  • スイッチオン: カウント有効(監視)
  • スイッチオフ: カウント無効、かつブロック(拒否)

AWSマネージドルールAWS WAF - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

マネージドルールに一致するリクエストをカウント(監視)するか、ブロックするかを選択できます。

スイッチオン時のリクエスト成否結果は、カウントを有効にしたマネージドルールよりもプライオリティの低い(後続の)ルール判定結果と、Web ACL のデフォルトアクションによって変わります。

マネージドルールの後続ルール・Web ACL のデフォルトアクションによるリクエストの成否表

後続ルールの判定結果 デフォルトアクション(Allow) デフォルトアクション(Block)
Allow ×
Block × ×

リクエストの成否によらず、カウントを有効にしたマネージドルールで判定を行ったリクエストはカウントされます。

まとめますと、リクエストを許可・ブロックするには以下の設定をしてください。

リクエストを許可する設定例

  • 対象マネージドルールと評価順序の異なるルールで Block しない
  • 対象マネージドルールの Edit から、許可したいルールのスイッチをオンにする
  • 対象マネージドルールの Web ACL デフォルトアクションを Allow にする

リクエストをブロックする設定例

  • 対象マネージドルールよりプライオリティの高いルールで Allow しない
  • 対象マネージドルールの Edit から、ブロックしたいルールのスイッチをオフにする(マネージドルールの初期設定ですべてオフ)

動作例

Bot Control ルールグループを例として紹介します。Bot Control 以外のルールはなし、Web ACL のデフォルトアクションは Allow とします。

トグルスイッチがオンの状態

$ curl -sLI -A "test-bot" https://example.com/ninja.jpg -o /dev/null -w '%{http_code}\n'
200

→ HTTP ステータスコード 200: OK、アクセス成功

トグルスイッチがオフの状態

SignalNonBrowserUserAgent(Webブラウザからではないと思われるユーザーエージェント文字列を検査します。)のスイッチオフ

$ curl -sLI -A "test-bot" https://example.com/ninja.jpg -o /dev/null -w '%{http_code}\n'
403

→ HTTP ステータスコード 403: Forbidden、アクセス拒否

運用観点でのワンポイント

AWS WAF のルールをルールビルダーで作成する場合は、条件に一致した場合のアクションが 3 種類(Allow/Block/Count)の中から選択できますが、マネージドルールの場合は上述のとおり 2 種類(Block/Count)の中から選択することになります。

マネージドルール導入時のベストプラクティスとしては、テスト環境でカウントモード(Override rule group action to count 設定がオン)で動作チェックし、意図した動作であることを確認後、本番環境でカウントモードを外し導入する形となります。

AWSマネージドルールAWS WAF - AWS WAF、AWS Firewall Manager、および AWS Shield Advanced

ベストプラクティスとして、本番稼働環境でルールグループを使用する前に、アクションの上書きをカウントに設定して、非本番稼働環境でテストします。Amazon CloudWatch メトリクスをAWS WAFサンプリングされたリクエストまたはAWS WAFログ。ルールグループが目的どおりに実行できたら、グループのオーバーライドを削除します。

2022-05-14 に記事内容を更新しました。
更新前はスイッチオンの箇所で「カウント有効(監視)、かつ許可」と記載しておりました。参考資料の AWS ドキュメントに記載されている通り、カウントは非終了アクションのため、後続のルールやデフォルトアクションによってリクエストの成否が異なります。そのため、誤解を招く可能性がある記載を修正し、より正確に理解して頂けるよう修正しました。

参考資料

カウントは非終了アクションです— count アクションを持つルールがリクエストに一致すると、AWS WAFリクエストをカウントし、ウェブ ACL ルールセットに続くルールの処理を継続します。一致する唯一のルールにカウントアクションが設定されている場合、AWS WAF はウェブ ACL のデフォルトのアクション設定を適用します。