セキュリティグループとネットワークACLの比較:AWS VPCファイアウォールの選択
Amazon Web Services(AWS)でセキュアな仮想プライベートクラウド(VPC)環境を設計する際、管理者はネットワークトラフィックを管理するために複数の制御層に依存します。ネットワークレベルでトラフィックをフィルタリングするための2つの基本的なコンポーネントは、セキュリティグループ(SG)とネットワークアクセスコントロールリスト(NACL)です。
これらはいずれも仮想ファイアウォールとして機能し、ルールを使用してインバウンドおよびアウトバウンドトラフィックを制御しますが、VPCアーキテクチャの根本的に異なる層で動作し、ルール評価に明確に異なるメカニズムを利用します。これらの違い、特にその適用範囲、ステートフル性、およびルール処理を理解することは、堅牢でコンプライアンスに準拠したネットワークセキュリティ体制を確立するために不可欠です。このガイドでは、包括的な比較を提供し、多層防御(Defense-in-Depth)のためにSGとNACLの両方を効果的に活用する方法を説明します。
AWS VPCにおけるファイアウォールの役割
AWSは、VPC内の主に2つのレベルでネットワークセキュリティを提供します。
- インスタンスレベル(セキュリティグループ): 特定のEC2インスタンスまたはリソース(RDSデータベースやElastic Load Balancerなど)のファイアウォールとして機能します。ネットワークインターフェイスへのトラフィックとネットワークインターフェイスからのトラフィックを制御します。
- サブネットレベル(ネットワークACL): サブネット全体のステートレスなファイアウォールとして機能し、サブネット境界を出入りするトラフィックフローを制御します。
セキュリティグループ(SG)の詳細
セキュリティグループは、個々のリソースに対する主要な、きめ細かなファイアウォールとして機能します。これらはステートフルであり、OSIモデルのレイヤー4(トランスポート層)で動作します。
セキュリティグループの主な特徴
| 特徴 | 説明 | 使用上の意味 |
|---|---|---|
| 適用範囲 | インスタンスのElastic Network Interface (ENI) に直接適用されます。 | インスタンス自体へのトラフィックおよびインスタンス自体からのトラフィックフローを制御します。 |
| ステートフル性 | ステートフルです。インバウンドリクエストが明示的に許可されている場合、対応する戻りトラフィック(アウトバウンド応答)は、アウトバウンドルールに関係なく、自動的に許可されます。 | 設定が簡素化されます。開始トラフィックの方向のみを定義する必要があります。 |
| ルールタイプ | 許可のみです。明示的な拒否ルールは不可能です。明示的な ALLOW ルールに一致しないトラフィックは、暗黙的に拒否されます。 |
許可されているものを定義することに焦点を当てます。 |
| 評価方法 | 決定が下される前にすべてのルールが評価されます。ルールには番号が付けられておらず、すべての ALLOW ルールが不一致になるまで暗黙的な DENY は処理されません。 |
順序は関係ありません。すべてのルールは平等に扱われます。 |
セキュリティグループの設定例
EC2インスタンスへのSSHアクセス(ポート22)を許可するには、インバウンドルールのみが必要です。SSH応答用のアウトバウンドルールは、SGのステートフルな性質によって自動的に処理されます。
| タイプ | プロトコル | ポート範囲 | 送信元 | 説明 |
|---|---|---|---|---|
| インバウンド | TCP | 22 | 0.0.0.0/0(または特定の管理者IP) | SSHアクセスを許可 |
| アウトバウンド | すべて | すべて | 0.0.0.0/0 | (デフォルト:すべてのトラフィックを許可しますが、必要に応じて制限できます) |
# ステートフルなフローの概念図
ユーザー(送信元IP) --> [インバウンドSGルール:ALLOW 22] --> EC2インスタンス
EC2インスタンス(応答) --> [ステートが暗黙的に追跡される] --> ユーザー(応答を受信)
ベストプラクティスのヒント: セキュリティグループのルールは、常に最小特権の原則を使用して定義してください。可能な限り、0.0.0.0/0を許可するのではなく、送信元IP範囲を制限してください。
ネットワークACL(NACL)の詳細
ネットワークACLは、サブネット境界でステートレスなフィルターとして機能する第2層の防御を提供します。これらは、ネットワークセグメンテーションや広範な拒否ポリシーに強力です。
ネットワークACLの主な特徴
| 特徴 | 説明 | 使用上の意味 |
|---|---|---|
| 適用範囲 | VPCサブネット全体に適用されます。1つのサブネットは一度に1つのNACLのみに関連付けることができます。 | サブネットに出入りするすべてのトラフィックを制御し、その中のすべてのインスタンスに影響を与えます。 |
| ステートフル性 | ステートレスです。インバウンドリクエストと、対応するアウトバウンド応答の両方を明示的に許可する必要があります。 | 戻りトラフィック(エフェメラルポート)に対する注意深い設定が必要です。 |
| ルールタイプ | 許可と拒否。トラフィックを許可またはブロックするルールを明示的に定義できます。 | 既知の悪意のあるIPをブロックしたり、特定のプロトコルをネットワーク全体で拒否したりするのに優れています。 |
| 評価方法 | ルールには番号(1から32766)が付けられており、最も小さい番号から順番に評価されます。最初に一致したルールが直ちに適用されます。 | ルールの順序が重要です。暗黙的な拒否ルール(最後に処理されるルール)は、明示的に許可されていないすべてを拒否します。 |
ステートレスなトラフィックの処理(エフェメラルポート)
NACLはステートレスであるため、サーバーに接続するクライアントが使用するエフェメラルポートを考慮する必要があります。クライアントが接続を開始するとき、宛先ポート(例:HTTPの場合は80)と、高番号の送信元ポート(エフェメラルポート範囲、通常1024-65535)を使用します。
ウェブトラフィック(HTTP)をサブネットに許可するには、2つのルールが必要です。
- インバウンドルール: 宛先ポート(例:80)でのトラフィックを許可します。
- アウトバウンドルール: エフェメラル送信元ポートを使用して、クライアントへの戻りトラフィックを許可します。
| ルール番号 | タイプ | プロトコル | ポート範囲 | 送信元/宛先 | ルールアクション |
|---|---|---|---|---|---|
| 100 | インバウンド | TCP | 80 | 0.0.0.0/0 | ALLOW(ウェブトラフィックのイン) |
| 110 | アウトバウンド | TCP | 1024-65535 | 0.0.0.0/0 | ALLOW(ウェブ応答のアウト – エフェメラルポート) |
| * | 暗黙的な拒否 | すべて | すべて | すべて | DENY(最後に処理される) |
警告: NACLでエフェメラルポートに対応するアウトバウンドルールを見落とすと、トラフィックはインスタンスに到達しますが(インバウンドルールのため)、応答はサブネット境界でドロップされ、接続のタイムアウトにつながります。
比較の概要:SG対NACL
次の表は、これら2種類のファイアウォールの決定的な違いをまとめたものです。
| 特徴 | セキュリティグループ (SG) | ネットワークACL (NACL) |
|---|---|---|
| 適用範囲 | インスタンス/ENIレベル | サブネットレベル |
| ステート | ステートフル | ステートレス |
| ルールタイプ | 許可のみ | 許可と拒否 |
| ルール評価 | すべてのルールが評価され、特定の順序はない。 | ルール番号に基づいて順番に評価される(最小から)。最初の一致が優先される。 |
| デフォルトの動作 | すべてのインバウンドを拒否し、すべてのアウトバウンドを許可する(制限されていない限り)。 | デフォルトのNACLはすべてのインバウンド/アウトバウンドを許可する。カスタムNACLはすべてのインバウンド/アウトバウンドを拒否する。 |
| トラフィックへの影響 | 関連付けられたリソースへの、またはリソースからのトラフィックの場合にのみルールを適用する。 | サブネット境界を通過するトラフィックをフィルタリングし、サブネット内のすべてのリソースに影響を与える。 |
適切なファイアウォールの選択:シナリオとベストプラクティス
VPCセキュリティの成功は、SGとNACLを多層アプローチ(Defense in Depth)で併用することにかかっています。
セキュリティグループを優先する場合
セキュリティグループは、そのステートフルな性質と、他のSGを参照する機能により、ネットワークアクセスをフィルタリングするための主要なツールであるべきです。これにより、アプリケーション設定が簡素化されます。
- きめ細かなアプリケーション制御: SGを使用して、特定のアプリケーションに必要なポートとプロトコルを正確に定義します(例:WebサーバーSGからデータベースSGへのポート3306でのトラフィックのみを許可するなど)。
- 内部通信: 同じサブネット内またはサブネット間でのインスタンス間のトラフィックのセキュリティを管理します(例:ロードバランサーがそのターゲットグループと通信できることを保証するなど)。
- 管理の容易さ: SGはステートフルであるため、NACLでエフェメラルポートを管理するよりも必要なルールが少なく、エラーが発生しにくいです。
ネットワークACLを実装する場合
NACLは、広範なネットワーク境界とセグメンテーションポリシーを設定するために最適に使用されます。
- 広範な拒否ポリシー: 明示的な
DENYルール(ルール番号100)を使用して、トラフィックがインスタンスに到達する前に、特定の悪意のあるIPアドレスまたはIP範囲をサブネット全体でブロックします。 - サブネットセグメンテーション: アーキテクチャの層の間で厳格な境界を強制します(例:SGがどのように構成されていても、データベースサブネットNACLがインターネットからのすべてのインバウンドトラフィックを明示的に拒否するようにするなど)。
- コンプライアンス要件: 特定のコンプライアンス標準では、サブネットレベルのフィルタリングが義務付けられている場合があり、NACLが不可欠になります。
- ステートレスプロトコルのフィルタリング: SGが単独で効果的に管理できないステートレスプロトコルをフィルタリングする必要がある場合、NACLが必要です(ただし、標準のTCP/UDPトラフィックではまれです)。
多層防御のアプローチ
一般的で適切に設計されたVPCでは、トラフィックフローはNACLとセキュリティグループの両方を通過する必要があります。いずれかのセキュリティ制御がトラフィックを拒否した場合、パケットは破棄されます。
- インバウンドフロー: トラフィックがサブネットに入る -> NACLがルールをチェック -> トラフィックがインスタンスのENIに到達 -> セキュリティグループがルールをチェック -> トラフィックがアプリケーションに到達。
- アウトバウンドフロー: アプリケーションが応答を生成 -> セキュリティグループ(ステートフルチェックに合格) -> トラフィックがインスタンスのENIを離れる -> NACLがルールをチェック -> トラフィックがサブネットを離れる。
NACLを粗いセグメンテーションと拒否ルールに使用し、SGを正確でステートフルなアプリケーションレベルのアクセス許可に使用することで、設定のシンプルさを維持しながらセキュリティ効果を最大化できます。
結論
セキュリティグループとネットワークACLは交換可能なものではなく、AWS VPCの異なる層を保護するために設計された補完的なツールです。セキュリティグループは、ステートフル性によるシンプルさを優先し、インスタンスレベルで運用上、アプリケーションに焦点を当てたセキュリティを提供します。ネットワークACLは、明示的な拒否機能を提供し、ネットワーク境界を保護する、サブネットレベルでの堅牢で必須の障壁を提供します。適用範囲とステートフル性の違いを習得することで、機能的であるだけでなく、不正なネットワークアクセスに対して回復力のあるVPCアーキテクチャを設計できます。