1.はじめに
みなさん、こんにちは!
AWSに携わっている方であればほぼ確実にAWS WAFに触れる機会があるのかなと思います。
そしてみなさん、なんとなく「WAFはCloudFrontとかALBにアタッチして攻撃とか防ぐやつでしょ?」という認識はあるのかなと思います。
しかし、WAFがどのような仕組みで攻撃をブロックしているのか...という部分に関しては、全員が理解できているわけではないのかな?と感じます。
というか私があまり理解できていませんでした、、
ということで、今回は超初心者向けに、AWS WAFがどのようにブロックを行っているのか?というところを超~~!かみ砕いて記事にしていこうと思います。
今回、解説の対象となるのは以下です。
・WAF
・Web ACL
・ルールグループ
・ルール
・デフォルトアクション
上記に対して既に理解がある方には物足りない記事になるかと思いますので、どうかご了承ください。
2.『お肉太郎を探し出せ大作戦』、始動!
さて、早速解説をはじめていきたいのですが...
正直、ただ真面目に解説するだけでは理解しにくい方もいらっしゃると思います。
少なくとも私は、真面目な文章というだけで頭に入らなくなってしまいます、、
と、いうわけで!
今回はとある場所で行われている極秘プロジェクトに照らし合わせながら見ていきましょう!
その名も・・・
お肉太郎を探し出せ大作戦!!
どんなプロジェクトが行われているのでしょうか...ドキドキ(〃∇〃)
さっそく見ていきましょう!
3.Web ACL
ここは関東のとあるビル。
ここでは、とあるプロジェクトが秘密裏に動いているそうです。
このプロジェクトの目的、それは────────
このビルにやってきた『”関東に住んでいるお肉太郎”だけを中に通すこと』。
逆に言えば、この条件に合わない方はビルから追い返したいみたいです。
怖いですね・・・
そして、このビルには本プロジェクトの対策本部が!!
このビル自体をWAF に、対策本部をWebACL に見立てています。
今はここを理解できなくてもOKなので、次に進みましょう。
4.WAFの動き(たとえ話編)
このプロジェクトには、3人の警備マンがいます。
ビルにやってきた人は、どんな方でも基本は
警備マンA
↓
警備マンB
↓
警備マンC
の順でチェックをされなければならないようです。。
そして、この警備マンにはそれぞれ決まった役割があります。
| 名前 | チェック内容 | チェックに合致した場合 |
|---|---|---|
| 警備マンA | 「関東以外」に住んでいる人か? | 追い返す |
| 警備マンB | 名前が「お肉太郎」か? | ビルへ入室を許可 |
| 警備マンC | 名前が「食べ物」か? | 追い返す |
おや?
さっそく人がやってきたようです!
どうなるか見てみましょう!
最初にやってきたのはお魚次郎さん。
チェックに合致しなかったため、次は警備マンBのところへ行くみたいですね。
ここでも同じ結果になりました。
警備マンBのチェックにも合致しなかったので、次は警備マンCのところへ行くようです。
・・・おや!?
警備マンCのチェックには合致したようです。
チェックに合致した、ということは・・・?
あらら、ビルには入れず、追い返されてしまいました。
お魚次郎さんには残念ですが、無事プロジェクトの決まりは守られたようですね。
では、次に来た方はどうなるか見てみましょう。
次にやってきたのはお肉太郎さん。
さて、どうなるか見ていきましょう。
(ここからは簡単にいきますね)
~Round1~
警備マンAのところでは、先ほどと同じように関東住みなのでチェックに合致しません。
つまり、そのまま警備マンBのところへ行きます。
~Round2~
警備マンBでは名前が「お肉太郎」かどうかをチェックしています。
・・・あれ?
確か、今来ている人も「お肉太郎」ですよね?
と、いうことは・・・??
やった!!
無事、お肉太郎さんはビルに入ることを認められ、『お肉太郎を探し出せ大作戦』も目的を達成できたようです。
いやー、めでたしめでた・・・
・・・ん?
最後にもう一人だけビルにやってきました。
少し様子を見てみましょう。
最後にやってきたのは野菜うま子さん。
当然、同じように警備マンのチェックを受けていきます。
~Round1~
確か警備マンAは「関東以外に住んでいるか?」をチェックしていました。
野菜うま子さんは、、東北住みのようです!
つまり、野菜うま子さんは警備マンAの時点でチェックに合致してしまうので、この時点でビルには入れず追い返されてしまいます。
さて、ここで冒頭の一言を思い出してください。
ビルにやってきた人は、どんな方でも基本は
警備マンA
↓
警備マンB
↓
警備マンC
の順でチェックをされなければならないようです。。
あれ?お肉太郎さんと野菜うま子さんは、全員のチェックを受けていないですよね?
これはどういうことなのでしょうか・・・
以降の項目で解説します。
5.WAFの動き(解説編)
今回4.の項目でお話した流れ、それこそが『WAFの流れ』なんです!
今回やってきた方は、実は・・・
・お肉太郎さん → 受け入れたいアクセス
・お魚次郎さん → 攻撃(防がなきゃいけないアクセス)
・野菜うま子さん → 攻撃(防がなきゃいけないアクセス)
こういった内容だったんですね。
当然、AWSで運用をしていく中で「受け入れたいアクセスだけを許可して、そうでないものは防ぎたい」というのはよくあることです。
そのための仕組みがWeb ACL (=お肉太郎を探し出せ大作戦)です!
web ACLの中には警備マンが複数いましたよね。
この警備マン1人1人がルール と呼ばれるものです。
先ほどのチェックのように、それぞれ役割をもっていて、A~Cへ順番にチェックを行います。
そしてルールの集まり、今回で言えば『警備マンA、B、C3人』をまとめてルールグループ と呼びます。
web ACL、ルール、ルールグループに関してはなんとなく分かりましたでしょうか?
補足
基本、ルールは順番にすべてのチェックを受けなければいけません。
ただし、それは『ルールに合致するまで 』という前提です。
つまり、警備マンAというルールに合致すれば、警備マンB、Cのチェックは受けずあらかじめ決められた結果(=今回で言う追い返す、ビルに受け入れるというもの)が返されます。
この結果を返す、というのはルールのお仕事です。
・ルール → チェックを行い、『受け入れる / 追い返す』という結果を持つ
・ルールグループ → 複数のルールを順番付きでまとめたもの
こんな感じですね。
実際のAWS WAFでは、
ルール1つ1つが「合致したらどうするか(Allow / Block)」を持っており、ルールグループはそれらを順番に評価するためのまとまりです。
しかし、このルールですべてのパターンを網羅できるとは限りません。
たとえば、『ベイブレード 三郎』さんがやってきたとしたら?
警備マンA、B、Cどれのチェックにも合致しません。
そういう時に役立つのが、デフォルトアクション です。
デフォルトアクションについて
先ほど『結果を返す』のはルールだという話をしました。
実はもう1つあって、web ACLでも結果を返すことができるんです。
え??なんで結果を返すのが2つあるの???
と思いますよね。
実は役割が全然違くて、
・ルールグループ → ルールに基づいて結果を返す
・web ACL(デフォルトアクション) → すべてのルールに合致しないもの に対して結果を返す
という違いがあります。
ですので、結果の返し漏れが起きることが無くなるわけです。
さいごに
さて、今回のWAFの解説はいかがでしたでしょうか?
分かりやすかったよ、または逆に分かりにくかった、など、感じたことがあれば是非お知らせ頂ければ幸いです。
クラウドって難しくて大変なことが沢山ありますが、みなさん一緒に頑張っていきましょう!
最後までお読み頂き、ありがとうございました!







