セキュリティグループとネットワークACLの違いを整理する
AWSのVPCで通信を制御するセキュリティグループとネットワークACLについて、適用範囲やステートフル・ステートレスの違いを整理する
今日やったこと
- セキュリティグループとネットワークACLの違いを整理した
- セキュリティグループは、EC2などのリソース単位で通信を制御することを確認した
- ネットワークACLは、サブネット単位で通信を制御することを確認した
- ステートフルとステートレスの違いを確認した
- 許可ルールと拒否ルールの扱いが異なることを整理した
学んだこと
セキュリティグループとは
セキュリティグループは、EC2インスタンスなどのリソースに適用する仮想ファイアウォール。
主に、次のような通信を制御する。
- インバウンド通信
- アウトバウンド通信
たとえば、WebサーバーにHTTPS通信を許可する場合は、インバウンドルールにTCPの443番ポートを追加する。
プロトコル: TCP
ポート: 443
送信元: 0.0.0.0/0
セキュリティグループには許可ルールだけを設定でき、明示的な拒否ルールは設定できない。
セキュリティグループはステートフル
セキュリティグループはステートフルに動作する。
ステートフルとは、許可した通信に対する戻りの通信が自動的に許可される仕組み。
たとえば、インバウンドでHTTPS通信を許可した場合、そのリクエストに対するレスポンスは、アウトバウンドルールに関係なく戻すことができる。
クライアント
↓ HTTPSリクエスト
EC2
↑ レスポンスは自動的に許可
通信の往復をひとまとまりとして追跡しているイメージ。
ネットワークACLとは
ネットワークACLは、サブネットに適用する通信制御の仕組み。
サブネットへ入る通信と、サブネットから出る通信を制御する。
インバウンド:
サブネットに入ってくる通信
アウトバウンド:
サブネットから出ていく通信
セキュリティグループがリソース単位であるのに対し、ネットワークACLはサブネット単位で適用される。
ネットワークACLはステートレス
ネットワークACLはステートレスに動作する。
ステートレスでは、行きの通信と戻りの通信を別々に評価する。
たとえば、インバウンドでHTTPS通信を許可しても、戻りの通信をアウトバウンド側でも許可する必要がある。
クライアント
↓ インバウンドルールで許可
EC2
↑ アウトバウンドルールでも許可が必要
戻りの通信では、クライアント側のエフェメラルポートを許可する必要がある場合もある。
ネットワークACLでは拒否ルールを設定できる
ネットワークACLでは、許可ルールと拒否ルールの両方を設定できる。
ALLOW:
通信を許可する
DENY:
通信を拒否する
ルールには番号が付いていて、小さい番号から順番に評価される。
最初に一致したルールが適用され、それ以降のルールは評価されない。
ルール100: 特定IPを拒否
ルール200: その他を許可
このように、特定のIPアドレスだけを明示的に拒否する設定ができる。
違いを整理する
| 項目 | セキュリティグループ | ネットワークACL |
|---|---|---|
| 適用単位 | EC2などのリソース | サブネット |
| 動作 | ステートフル | ステートレス |
| 許可ルール | 設定できる | 設定できる |
| 拒否ルール | 設定できない | 設定できる |
| ルールの評価 | 許可ルールをまとめて評価 | 番号の小さい順に評価 |
| 戻り通信 | 自動的に許可 | 明示的な許可が必要 |
基本はセキュリティグループを使う
通常の通信制御では、まずセキュリティグループを使用する。
たとえば、Webサーバーなら次のような設定が考えられる。
インターネット
↓ 443番ポート
ALB
↓ アプリケーション用ポート
EC2
EC2のセキュリティグループでは、送信元としてALBのセキュリティグループを指定できる。
これにより、インターネット全体からEC2への直接アクセスを許可せず、ALB経由の通信だけを許可できる。
ネットワークACLは追加の防御に使う
ネットワークACLは、サブネット全体に対する追加の防御として利用できる。
たとえば、次のような場合に使われる。
- 特定のIPアドレスを明示的に拒否したい
- サブネット単位で通信を制限したい
- セキュリティグループとは別の防御層を設けたい
ただし、ステートレスで戻り通信の設定も必要になるため、セキュリティグループより設定が複雑になりやすい。
まとめ
セキュリティグループとネットワークACLは、どちらもVPC内の通信を制御する仕組みだが、役割が異なる。
セキュリティグループ:
リソース単位
ステートフル
許可ルールのみ
ネットワークACL:
サブネット単位
ステートレス
許可・拒否ルールを設定可能
SAAの問題では、次のように判断するとよさそう。
EC2やALBなど、個別リソースへの通信を制御したい
→ セキュリティグループ
サブネット全体を制御したい
特定IPを明示的に拒否したい
→ ネットワークACL
次にやること
- パブリックサブネットとプライベートサブネットの違いを整理する
- Internet GatewayとNAT Gatewayの違いを整理する
- ステートレス通信で必要になるエフェメラルポートを整理する
- ALBとEC2のセキュリティグループ設計を整理する