ネットワークセキュリティ徹底解説!セキュリティグループとNACLの活用術
こんにちは!現役クラウドエンジニアのAkrです。
「【AWSプロフェッショナルへの道】現役クラウドエンジニアが贈る実践ガイド」の第21回をお届けします。前回はIAMを深掘りし、AWSアカウントのセキュリティとガバナンスの基盤を固めましたね。IAMが「誰が何をする権限を持つか」という認証・認可を管理するのに対し、今回は「ネットワークトラフィックをどこまで許可するか」というネットワークセキュリティの根幹をなすサービスに焦点を当てます。
今回徹底的に解説するのは、AWSのネットワークセキュリティの要であるセキュリティグループとネットワークACL (Access Control List) です。
「AWSでのファイアウォールってどう設定するの?」「セキュリティグループとNACLの違いがよく分からない...」「どっちを優先すればいいの?」といった疑問を持つかもしれません。この2つのサービスはAWS上でネットワークセキュリティを確保するために不可欠ですが、その役割と機能には明確な違いがあります。本記事では、それぞれの特徴とベストプラクティス、そして両者を組み合わせて多層防御を構築する方法を学び、セキュアなネットワーク環境を設計・運用するスキルを身につけます。
1. ネットワークセキュリティの第一歩:セキュリティグループ
セキュリティグループは、EC2インスタンスやRDSデータベースなどのリソース単位でトラフィックを制御する仮想ファイアウォールです。
1.1. セキュリティグループの主要な特徴
-
ステートフル(Stateful):
- これがセキュリティグループの最も重要な特徴です。
- インバウンド(Inbound) のトラフィックを許可すると、対応する アウトバウンド(Outbound) のレスポンスは自動的に許可されます。例えば、Webサーバーの80番ポートへのインバウンドアクセスを許可した場合、そのリクエストに対するWebサーバーからのレスポンスは、アウトバウンドルールを明示的に設定しなくても自動的に許可されてクライアントに返されます。
-
許可ルールのみ(Allow-only):
- セキュリティグループには「拒否(Deny)」のルールは存在しません。
- 明示的に許可したトラフィックのみが通過できます。すべてのトラフィックは、デフォルトで拒否されます。
-
リソースレベルでの制御:
- EC2インスタンスごとにアタッチされます。1つのインスタンスに複数のセキュリティグループをアタッチすることも、複数のインスタンスに同じセキュリティグループをアタッチすることも可能です。
-
ルールの設定:
- プロトコル(TCP, UDPなど)、ポート範囲、ソース(IPアドレス、IPアドレス範囲、または他のセキュリティグループ)を指定してルールを設定します。
1.2. 実践!Webサーバー用セキュリティグループの設定
Webサーバー(EC2インスタンス)にアクセスできるセキュリティグループを作成してみましょう。
-
インバウンドルール:
-
HTTP (80/tcp): ソースを
0.0.0.0/0, ::/0(どこからでも) に設定。 -
HTTPS (443/tcp): ソースを
0.0.0.0/0, ::/0(どこからでも) に設定。 -
SSH (22/tcp): ソースを 自分の開発環境のグローバルIPアドレス (例:
192.0.2.1/32) に設定。- ベストプラクティス: SSHは不特定多数からのアクセスを許可せず、必要最小限のIPアドレスのみに絞ることが極めて重要です。
-
HTTP (80/tcp): ソースを
-
アウトバウンドルール:
- デフォルトでは「すべてのトラフィックを許可」(
0.0.0.0/0, ::/0) となっています。 - セキュリティグループはステートフルであるため、通常はデフォルトのままで問題ありません。
- ただし、もし外部へのアクセスを厳密に制限したい場合は、このルールを削除し、必要な通信(例: データベースへのアクセス)のみを明示的に許可します。
- デフォルトでは「すべてのトラフィックを許可」(
2. 多層防御のもう一つの要:ネットワークACL (NACL)
ネットワークACL (NACL) は、VPC内のサブネット単位でトラフィックを制御する仮想ファイアウォールです。
2.1. NACLの主要な特徴
-
ステートレス(Stateless):
- これがNACLの最も重要な特徴です。
- インバウンド のトラフィックを許可するだけでなく、対応する アウトバウンド のトラフィックも明示的に許可する必要があります。
- 例えば、クライアントからの80番ポートへのインバウンドアクセスを許可するルールと、Webサーバーからの1024番以上のエフェメラルポート(ランダムな一時ポート)へのアウトバウンドアクセスを許可するルール、両方が必要です。
-
許可と拒否のルール(Allow/Deny):
- NACLは、セキュリティグループと異なり、「許可(Allow)」と「拒否(Deny)」の両方のルールを設定できます。
- これにより、特定のIPアドレスからの通信を明示的にブロックすることができます。
-
ルール番号:
- ルールには1から32766までの番号を付けます。
- トラフィックが到着すると、番号の昇順 でルールが評価されます。
- 最初に一致したルールが適用され、それ以降のルールは評価されません。
-
サブネットレベルでの制御:
- VPC内の各サブネットに関連付けられます。1つのNACLを複数のサブネットに関連付けることができますが、1つのサブネットには1つのNACLしか関連付けられません。
-
暗黙の拒否(Implicit Deny):
- すべてのNACLには、番号32767に設定された暗黙の拒否ルールが存在します。
- これは、どのルールにも一致しなかったすべてのトラフィックを強制的に拒否するルールです。
2.2. 実践!Webサーバー用NACLの設定
Webサーバー(パブリックサブネット)のNACLを設定してみましょう。
-
インバウンドルール:
-
ルール番号100: タイプ
HTTP (80)、ソース0.0.0.0/0、許可。 -
ルール番号110: タイプ
HTTPS (443)、ソース0.0.0.0/0、許可。 -
ルール番号120: タイプ
SSH (22)、ソース自分のIPアドレス/32、許可。 -
ルール番号130: タイプ
すべてのTCP、ソース0.0.0.0/0、ポート範囲1024-65535、許可。- ステートレスであるNACLでは、レスポンスを返すためのエフェメラルポートも許可する必要があります。
-
ルール番号100: タイプ
-
アウトバウンドルール:
-
ルール番号100: タイプ
HTTP (80)、送信先0.0.0.0/0、許可。 -
ルール番号110: タイプ
HTTPS (443)、送信先0.0.0.0/0、許可。 -
ルール番号120: タイプ
すべてのTCP、送信先0.0.0.0/0、ポート範囲1024-65535、許可。- NACLはステートレスなので、サーバーからのレスポンスも明示的に許可する必要があります。
-
ルール番号100: タイプ
3. セキュリティグループとNACLの比較・使い分け
この2つのサービスは、同じ「ファイアウォール」という役割を持ちますが、以下のような明確な違いがあります。
| 特徴 | セキュリティグループ | ネットワークACL (NACL) |
|---|---|---|
| 評価対象 | インスタンス単位 | サブネット単位 |
| ステート | ステートフル | ステートレス |
| ルールの種類 | 許可ルールのみ | 許可と拒否ルール |
| ルールの評価順序 | すべてのルールが評価される | ルール番号の昇順で最初に一致したものが適用される |
| デフォルト設定 | すべてのインバウンドを拒否、すべてのアウトバウンドを許可 | すべてのインバウンド・アウトバウンドを許可(デフォルトNACLの場合) |
3.1. ベストプラクティス
-
セキュリティグループ:
- リソースレベルでの細やかな制御に使用します。
- 特に、リソース同士の通信(例: Webサーバーからデータベースへのアクセス)を制御するのに適しています。
- 原則として、セキュリティグループを第一の防御壁として活用します。
-
NACL:
- サブネットレベルでの広範な制御に使用します。
- Webアプリケーションをホストするサブネットなど、特定のサブネットへのトラフィックを大まかにフィルタリングする第2の防御壁として機能させます。
- 特定の悪意あるIPアドレスからの通信をサブネットの入り口で一括してブロックする場合などに有効です。
4. トラブルシューティング:接続できない時のチェックポイント
ネットワーク接続の問題が発生した場合、以下のステップで原因を特定しましょう。
-
セキュリティグループの確認:
- 最も一般的な原因はセキュリティグループです。
- トラフィックの発信元とポートが、インバウンドルールで許可されているか確認します。
- もしアウトバウンドルールをデフォルトから変更している場合は、レスポンスが許可されているか確認します。
-
NACLの確認:
- NACLがサブネットにアタッチされているか確認します。
- NACLはステートレスなので、インバウンドとアウトバウンドの両方のルールをチェックします。
- 特に、インバウンドルールに加えて、レスポンスを返すためのアウトバウンドルール(
1024-65535ポートへの許可など)が適切に設定されているか確認します。
まとめ
今回は、AWSのネットワークセキュリティの基礎となるセキュリティグループとネットワークACL (NACL) について、その機能、違い、そして活用術を学びました。
- セキュリティグループはインスタンス単位のステートフルなファイアウォールであり、許可ルールのみを扱います。
- NACLはサブネット単位のステートレスなファイアウォールであり、許可と拒否の両方のルールを扱います。
- この2つを適切に組み合わせることで、多層防御を構築し、セキュアなAWSネットワーク環境を設計できることを学びました。
これらのサービスを正しく理解し、最小権限の原則に基づいて設定することは、外部からの不正アクセスや内部の不用意な通信からシステムを守る上で不可欠です。
この記事が皆さんのAWS学習の一助となれば幸いです。
もしこの記事が役に立ったと感じたら、ぜひ「いいね」👍をお願いします!励みになります!