VPCのネットワークACLとセキュリティグループ - 2つの仮想ファイアウォールの違いと使い分け

どうも、Shinyaです。この記事では、Amazon VPCにおけるセキュリティの要となるネットワークACL(Access Control List)とセキュリティグループについて解説します。どちらもVPCの仮想ファイアウォールですが、動作レベルやステートの扱いが異なります。それぞれの特徴と使い分けを整理します。
- VPCのセキュリティ構成を理解したい人
- ネットワークACLとセキュリティグループの違いを整理したい人
- AWSにおけるトラフィック制御の仕組みを学びたい人
- VPCの仮想ファイアウォールの適切な使い分けを知りたい人
この記事では、Amazon VPCの基本概念(サブネット、ゲートウェイなど)を理解していることを前提としています。
VPCにおける2つの仮想ファイアウォール
VPCでは、トラフィックを制御するためにネットワークACLとセキュリティグループの2つの仮想ファイアウォールが提供されています。この2つは動作するレベルとステートの扱いが異なり、組み合わせて使用することで多層的なセキュリティを実現します。
ネットワークACL
ネットワークACLは、サブネットレベルでインバウンド(受信)とアウトバウンド(送信)のトラフィックを制御する仮想ファイアウォールです。ゲートウェイとサブネットの間で動作し、サブネットに出入りするすべてのトラフィックを検証します。
ネットワークACLの特徴
- ステートレス: インバウンドとアウトバウンドの双方向で、サブネットの境界でリストの検証が必ず行われる。インバウンドで許可されたトラフィックであっても、アウトバウンドで再度検証される
- デフォルトの動作: デフォルトのネットワークACLはすべてのインバウンド・アウトバウンドトラフィックを許可する
- ルールの評価順序: ルール番号の昇順で評価され、最初にマッチしたルールが適用される
- カスタムルール: 独自のルールを明示的に設定することで、トラフィック制御が可能
セキュリティグループ
セキュリティグループは、リソースレベル(EC2インスタンス、RDS、Lambda等の個々のリソース)でトラフィックを制御する仮想ファイアウォールです。サブネット内の特定のリソースに対して、許可するトラフィックを定義します。
セキュリティグループの特徴
- ステートフル: インバウンドで許可されたトラフィックのレスポンスは、アウトバウンドルールに関係なく自動的に許可される。一度検証されたパケットは再検証されない
- デフォルトの動作: すべてのインバウンドトラフィックを拒否し、すべてのアウトバウンドトラフィックを許可する
- 許可ルールのみ: セキュリティグループでは許可ルールのみ設定可能で、明示的な拒否ルールは設定できない
- カスタムルール: アクセスを許可するトラフィックのソース、ポート、プロトコルを指定できる
ネットワークACLとセキュリティグループの比較
| 項目 | ネットワークACL | セキュリティグループ |
|---|---|---|
| 動作レベル | サブネットレベル | リソースレベル |
| ステート | ステートレス(双方向で検証) | ステートフル(検証済みは再検証不要) |
| デフォルト動作 | 全トラフィック許可 | インバウンド全拒否 / アウトバウンド全許可 |
| ルールの種類 | 許可と拒否の両方 | 許可のみ |
| 評価方法 | ルール番号順に評価 | すべてのルールを評価 |
| 適用対象 | サブネット内のすべてのリソース | 関連付けられた特定のリソース |
使い分けの指針
- サブネットレベルでのアクセス制御が必要な場合はネットワークACLを使用する。例えば、特定のIPアドレス範囲からのアクセスをサブネット単位で一括して拒否する場合に有効
- 個々のリソースレベルでアクセス制御が必要な場合はセキュリティグループを使用する。例えば、特定のEC2インスタンスに対して特定のポートのみアクセスを許可する場合に有効
- 多層防御の観点から、ネットワークACLとセキュリティグループの両方を適切に設定することが推奨される
AWSの責任共有モデルにおいて、EC2などのアンマネージドサービスにおけるネットワークACLとセキュリティグループの設定・管理はユーザー側の責任です。適切なトラフィック制御の設定は、セキュリティ確保のために不可欠です。
まとめ
この記事では、VPCにおける2つの仮想ファイアウォールであるネットワークACLとセキュリティグループについて解説しました。ネットワークACLはサブネットレベルでステートレスに動作し、セキュリティグループはリソースレベルでステートフルに動作します。サブネット単位での一括制御にはネットワークACL、個々のリソースに対するきめ細かい制御にはセキュリティグループを使用し、両者を組み合わせた多層防御でVPCのセキュリティを確保できます。
参考リンク:

