はじめに
こんにちは。Tsukasaです!
皆さん、セキュリティについて理解されていますか?
私はまだまだです。
あまりよくわかっていないとは言っても、どんなシステムでもセキュリティは最重要課題になってくると思います。
というわけで今日はAWSでもよくでてくるWAF、セキュリティグループ、NACLの違いについて整理していこうと思います。どれもセキュリティに関連することなのは何となくわかりそうですが、初心者の方ですとその違いが何なのかよくわからない方も大勢いらっしゃるのではないでしょうか。
それでは見ていきましょう!
今回はタワマンに例える
今回はWAF、セキュリティグループ、NACLの違いをタワマンに例えてみようと思います。
タワマンではなくても、建物で考えるとわかりやすいかもしれません。
WAFとは
WAF(Web アプリケーションファイアウォール)とは、Web アプリケーションの通信をフィルター、監視、ブロックするためのソフトウェアまたは、ハードウェアのセキュリティ対策です。一般のファイアウォールや IDS/IPS との違いは、アプリケーションレベルで通信の中身を解析し、特定の条件にマッチする通信を検知・遮断する点です。WAF の代表的な用途には、SQL インジェクション、クロスサイトスクリプティングなど、アプリケーションの脆弱性を悪用した攻撃の遮断やアプリケーション層の DDoS 対策、不正なボットによるアクセスの遮断などがあります。
WAF単体で使用することはできず、CloudFrontやALBと一緒に併せて使う必要があります。
簡単に言うと「Webアプリケーションの脆弱性を悪用した攻撃からWebサイトやAPIを保護するセキュリティ対策」と言えると思います。
セキュリティグループ
セキュリティグループとは、クラウド(AWSやAzureなど)やネットワーク環境において、仮想サーバーやリソースへの通信を制御する「仮想ファイアウォール」です。IPアドレスやポート番号を指定し、許可する通信ルールを設定することで、不正アクセスを防ぎます。AWSでいうとEC2インスタンス等の個々のリソースを保護しているのがセキュリティグループです。
NACLとは
NACL(ネットワークアクセスコントロールリスト)は、サブネットレベルで特定のインバウンドまたはアウトバウンドのトラフィックを許可または拒否します。VPC のデフォルトのネットワーク ACL を使用するか、セキュリティグループと同様のルールを使用して VPC のカスタムネットワーク ACL を作成し、セキュリティの追加レイヤーを VPC に追加できます。
簡単に言うとEC2などが入っているサブネットを保護しているのがNACLです。
それぞれの違いについてまとめてみた
| サービス名 | 保護対象 | 詳細 |
|---|---|---|
| WAF | アプリケーション層 | Webアプリケーションの脆弱性を悪用した攻撃からWebサイトやAPIを保護するセキュリティ対策 |
| セキュリティグループ | トランスポート層 | EC2インスタンス等の個々のリソースを保護しているもの |
| NACL | ネットワーク層 | EC2などが入っているサブネットを保護しているもの |
このようにそれぞれ保護する対象が違うのが特徴です。
ここでアプリケーション層やトランスポート層といった言葉が出てきましたが、これはOSI参照モデルのレイヤーです。ITパスポートや基本情報技術者試験を受けたことがある方なら勉強したことのある方も多いのではないでしょうか。
レイヤーについては詳しくはこちらをご参照ください。
タワマンに例えてみた
それではタワマンに例えようと思います。
今回は下記のような構成図を基に例えていきます。
VPCの外にWAFがあり、VPC内にサブネット、サブネットの中にEC2があるという構成図で考えていきます。
※WAFはCloudFrontやALBと組み合わせて使う必要がありますが、今回は構成図に記載はせずに省略したいと思います。
WAF
WAFは今回VPCの外側にあります。
そのためタワマンに例えるなら、エントランスでの検査という風に言えます。
もしタワマンに不審者が来てしまっては困ります。
そのためエントランスで警備の人がこの人は中に通してもいいのだろうか?と確認をして、OKが出た人だけが、タワマンの中に入れるようにします。実際のAWSなら、ユーザーからのリクエストに対して、WAFがVPCに入れていいかどうかを判断します。DDoS攻撃や、SQLインジェクションといった悪意のある攻撃がありますので、それをWAFを使って遮断します。
NACL
NACLはタワマンではエレベーターの役割をしてくれます。
タワマンの各フロアにはEC2やRDSといった実際のAWSサービスが入居?しています。
例 : 301号室 EC2
EC2のようなサービスはサブネットの中に入っています。
つまり各階のフロアはこの場合、サブネットとして例えます。
NACLは上記に説明があるようにサブネットを保護しています。
そのためNACLはタワマンの例では各階のフロアに入れていいのかどうかの判断を行います。
エレベーターでこの人(通信)は3階にあるEC2があるサブネットに通して良いとなれば、3階に止まるようにボタンが押せるようになり、ダメな場合は3階を押すことができず、3階で降りることができません。
これがNACLの役割です。
NACLはステートレスであるため、インバウンド(サブネットに入る)とアウトバウンド(サブネットから出る)を別々にルール設定する必要があります。
セキュリティグループ
セキュリティグループはタワマンで例えると部屋の鍵になります。
部屋の中にはEC2やRDSといったAWSのサービスが配置されています。
その部屋の中に入るための鍵がセキュリティグループです。
許可された鍵(セキュリティグループ)を持っている人だけが、部屋の中に入ることができて、EC2などのサービスにアクセスすることができます。またセキュリティグループはステートフルなので、インバウンド(部屋の中に入る)が許可されたら、アウトバウンド(部屋の外に出る)も自動許可されます。
今回のタワマンの例を下記のように画像にしてみました。
ちょっと待った!!
レイヤーを理解されている方からすると、WAFはアプリケーション層を保護していて、アプリケーション層はレイヤー7なんだから、ネットワーク層(NACL/L3)→トランスポート層(セキュリティグループ/L4)→アプリケーション層(WAF/L7)の順番になるはずなのに何でWAFが一番手前(VPCの外)にあるの?と思った方もいると思います。
私もそう思いました。
この「ねじれ」の謎を解くカギは、「OSI参照モデル(データの開封順)」と「AWSの物理的なアーキテクチャ(通信を処理する場所)」の視点がごっちゃになっているからでしょう。(私もそうです)
AWS上でWAFがVPCの手前にある理由は、「WAF自身が、ユーザーの通信を一度ゴールとして受け取って開封する、独立した『Webサーバー(アプリケーション)』だから」です。
どういうことか、下記の視点から紐解いていきます。
1. 通信データは「マトリョーシカ」:教科書通りのレイヤー順
まず、パケット(通信データ)そのものの構造をおさらいします。
データは、外側から内側に向けて以下のように包まれています。
一番外側: L3(IPアドレス = NACLの担当)
真ん中: L4(ポート番号 = セキュリティグループの担当)
一番中身: L7(HTTPデータ = WAFの担当)
皆さんもマトリョーシカというロシアの人形をご存じではないでしょうか?
マトリョーシカは人形を開けるとその中に小さい人形が入っていて、更にその中にもっと小さい人形が入っているというものです。通信も同じようにIPアドレスがあり、その中にポート番号、更にその中にHTTPデータといったような構造になっています。
インフラの鉄則として、「外側の封筒(L3/L4)をパスしないと、一番中身の手紙(L7)は絶対に読めない」というルールがあります。だから、概念としてはL3→L4→L7の順番でガードが固くなっていく、という説明になるわけです。
2. AWSの物理配置:なぜL7のWAFが一番手前にあるのか?
では、なぜ一番奥にあるはずのL7(WAF)が、VPCの外という最前線に置かれているのでしょうか?
それは、WAF(CloudFrontなど)が、ユーザーからの通信をVPCの手前で一度「着信(終了)」させているからです。
通信の全開封:
ユーザーがWebサイトにアクセスするとき、最初の目的地は実はVPC内のEC2ではなく、手前にあるWAFです。通信がWAFに届いた時点で、WAFはL3からL7まですべての封筒を一気に開封します。
L7(中身)の検査:
WAF自身が高度な「アプリケーション(L7)」として動いているため、開封した手紙の中身(HTTPリクエスト)の文字をスラスラと読んで、「SQLインジェクションなどの攻撃コードが入っていないか」をチェックします。
安全な通信だけをリレーする:
検査の結果、安全だとわかったら、今度はWAF自身が新しい送信元となって、VPCの中にあるEC2に向けて通信を送り直します(リレーします)。
つまり、WAFは「奥にあるものを手前に持ってきた」のではなく、「VPCの手前に、通信を一度丸裸にしてチェックできる検問所(別のWebアプリ)を置いた」というのが物理的な正体です。
3. なぜこの順番にするのか?(先制防御のメリット)
もし、この物理配置を教科書通りにVPC(NACL)→セキュリティグループ→WAFの順番にしてしまったらどうなるでしょうか。
ハッカーが送りつけてきた大量の攻撃データが、VPCのゲートを通り、部屋の鍵を通り、VPCの敷地内を奥まで進んでくることになります。これでは、WAFに届く前にAWS内のネットワーク回線やサーバーが無駄な処理で疲弊してしまいます。
VPCの手前(エッジ)にWAFを置くことで、「100%安全だと保証されたクリーンな通信だけをVPCの内部(NACLやセキュリティグループ)に通す」という、究極の先制防御が成立しているのです。
まとめ
WAF、セキュリティグループ、NACLをタワマンに例えると下記の役割になります。
| サービス名 | 保護対象 | 役割 | 保護対象 |
|---|---|---|---|
| WAF | L7 | タワマンのエントランス(持ち物検査) | VPCの敷地に入る前に、通信を全開封して「悪意あるデータ(爆弾)」を検知・即ブロックする。 |
| セキュリティグループ | L4 | 各部屋の鍵 | EC2(部屋)の直前で、「許可されたポート番号(専用の通行証)」を持っている通信だけを通す。 |
| NACL | L3 | エレベーター | サブネット(階)の境界線で、「出禁のIPアドレス(不審な人)」をザックリ追い返す。 |
また、クラウドではデータのルール(OSIモデル)とインフラのリアル(物理配置)が入れ子構造になっています。
データのルール(OSIモデル):
L3(NACL)→L4(セキュリティグループ)→L7(WAF) の順に、封筒を開けていく。
インフラのリアル(現実):
L7(WAF)→L3(NACL)→L4(セキュリティグループ) の順に、通信が通り抜ける。
最後まで読んでいただき、ありがとうございました!



