継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS WAF Classic に Rule で複数条件を指定するとどんな挙動を取るかを確認した

タダです.

マネージドサービスの挙動はドキュメントだけでなく動かして運用してみて理解できることや実感できることが多いのではないでしょうか.AWS WAF Classic の挙動を理解する機会があったのでこの記事で整理していきます.

今回のケースの詳細

WAF のホワイトリストのルールを作り,そこにIP一致条件を複数指定して特定のIPアドレスからのリクエストを許可する設定を意図した環境があるとします.

f:id:sadayoshi_tada:20200328151745p:plain

WAF ルールの中身

WAF ルールの中身を見ると下の画像のように複数条件が定義されています.条件との間にあるAndという表記を覚えておいてください.

f:id:sadayoshi_tada:20200328212004p:plain

さて,この設定で WAF の環境にリクエストを送った時にルールに定義している条件に一致するリクエストはあるのでしょうか? 結論からすると,マッチする IP アドレスからのリクエストはないです.つまり,ルール2つに両方マッチする IP アドレスからのリクエストが同時に送られることないので,マッチしないことになります.

ホワイトリストに定義できるがブロックされる原因

ホワイトリストのルールが定義できるが挙動としてはマッチしないリクエストとして評価されないのはなぜでしょうか? その理由はAnd条件にあります.AWS WAF Classic の仕様ではRule の判定はAnd条件,条件に全てマッチしないとリクエストが通らないような判定の挙動となるためです.そのため,2つの IP アドレスが一致するリクエストがない限り通らないことになります.AWS WAF Classic で事象を回避する場合は,リクエストが通っている Rule 1つに全て条件を包含するか,別の Rule にして分けるのが対策となります.ちなみに,AWS WAF v2 ではOR条件を指定できるようになっているため柔軟な制御が可能になりました.

まとめ

AWS WAF Classic Rule の判定条件の挙動を理解する機会になった事象と情報を整理しました.新しい AWS WAF も今後使っていく時にナレッジができたら記事にしていきたいと思います.