はじめに
この記事の目的
本記事は、AWSで使われるネットワークACL(Access Control List)の基本的な仕組みと使いどころを、やさしく丁寧に解説します。専門用語は必要最小限にして、具体例を交えながら説明しますので、初めて学ぶ方でも理解しやすい構成にしています。
想定読者
ネットワークの基礎がわかる方、クラウド環境でセキュリティを強化したいシステム担当者やエンジニア、これからVPCを設計する方を想定しています。
本記事で学べること
- ネットワークACLの役割と仕組み
- セキュリティグループとの違い
- 設計や運用の注意点とよくある設定例
読み方のヒント
各章は独立して読めますが、まずは第2章から順に読むと全体像がつかみやすいです。実際の設定例はあとで確認すると理解が深まります。
ネットワークACL(Access Control List)とは
概要
ネットワークACL(以下NACL)は、AWSのVPC内でサブネット単位に適用するトラフィック制御の仕組みです。外部と内部の通信を、IPレンジやプロトコル、ポート番号できめ細かく「許可(Allow)」または「拒否(Deny)」できます。ファイアウォールに似た役割を果たしますが、適用範囲がサブネット単位である点が特徴です。
どの単位で効くか
NACLはサブネットに紐づき、そのサブネット内の全インスタンスに同じルールが適用されます。個別のインスタンスごとの制御はできません。たとえば、公開サブネットは外部からのHTTPを許可し、管理用サブネットは外部からのアクセスを遮断するといった使い方をします。
ルールの仕組み
ルールは番号順に評価され、最初に一致したルールが適用されます。インバウンド(受信)とアウトバウンド(送信)で別々に設定します。明示的に拒否するルールを入れられる点がセキュリティ設計で役立ちます。
使いどころの例
- サブネット単位で全サーバーの外部通信を制限したい場合
- 一部サブネットをインターネットから隔離して内部処理専用にする場合
注意点
ステートレスなので、受信を許可しても戻りのパケットは明示的に許可する必要があります。設定順や重複ルールに注意して運用してください。
ネットワークACLの基本要素と動作原理
概要
ネットワークACLは、ネットワークの出入り口でトラフィックを絞るためのルール集合です。個々のルールは番号で並び、上から順に評価します。以下で主要な要素と動作をやさしく解説します。
主な構成要素
- ルール番号:小さい番号から評価します。たとえば100番で許可、200番で拒否とすると、100番に合致すれば200番は見ません。
- 送信元・宛先:IPアドレスやCIDRで指定します(例:10.0.1.0/24)。
- アクション:Allow(許可)かDeny(拒否)を明示します。
- プロトコル:TCP、UDP、ICMPなどを指定します。用途に合わせて絞れます。
- ポート範囲:特定のサービスを対象にするためにポート番号や範囲を指定します(例:HTTPは80、1024–65535など)。
動作の特徴
ルールは上から順に評価し、最初に一致したルールを適用します(first-match)。ステートレス(状態を保持しない)ため、インバウンドとアウトバウンドでそれぞれ明示的に許可や拒否を設定する必要があります。例として、外部からのHTTP要求を受けるならインバウンドでポート80を許可し、応答を返すためにアウトバウンドも許可します。
何もマッチしない場合はデフォルト動作になります(基本設定では全許可が多い点に注意してください)。必要なら最後に明示的な拒否ルールを置いて安全側に寄せるとよいです。
セキュリティグループとの違い
適用範囲
セキュリティグループ(SG)はインスタンス単位で適用します。個々の仮想サーバーごとに細かく設定できます。一方、ネットワークACL(NACL)はサブネット単位で適用し、同じサブネット内のすべてのインスタンスに影響します。
ステート管理の違い
SGはステートフルです。送信を許可すれば戻りの通信も自動で許可されます。NACLはステートレスで、送信と受信の両方に個別のルールが必要です。例えば、Webサーバーで受信80番を許可するだけでは不十分で、戻りの応答用ポートも明示的に許可する必要があります。
デフォルトとルールの違い
SGは基本的に何も許可しないホワイトリスト方式です。許可ルールのみ設定できます。NACLは初期状態で全許可(ブラックリスト寄り)で、許可・拒否の両方を設定できます。またNACLは番号順でルールを評価するため、優先順位を意識します。
使い分けの例
細かいアクセス制御やインスタンス単位の例外管理はSGが向きます。サブネット全体を外部の攻撃から守る“外壁”や、特定の通信を一括で遮断する場合はNACLが有効です。両方を組み合わせると堅牢な防御になります。
ネットワークACLの設計・運用ポイント
概要
ネットワークACL(NACL)はサブネット単位で適用するアクセス制御です。設計時は用途ごとにNACLを分けると管理しやすく、安全性も高まります。
サブネットごとの使い分け
パブリック用のサブネットには外部向けの最小限ルール(例:80/443許可)を設定し、プライベート用は外部からの着信を原則拒否します。例えば、WebサーバはパブリックNACLでHTTP/HTTPSだけ許可し、DBサーバはプライベートNACLで外部アクセスを遮断します。
ステートレスの扱い
NACLはステートレスです。着信を許可したら、必ず対応する送信ルールも明示して下さい。例えばインバウンドでTCP 80を許可するなら、レスポンス用のアウトバウンド(エフェメラルポート)も許可が必要です。
ルール番号と順序管理
ルールは番号順に評価されます。番号を整理して、許可は低番号、拒否は高番号にするなど一貫性を持たせます。番号に間隔を空けておくと後から追加しやすくなります。
セキュリティグループとの併用
NACLとセキュリティグループを組み合わせると二重防御になります。NACLは広域での粗い制御、セキュリティグループはインスタンス単位の詳細制御に使うのが有効です。
運用ポイントとチェックリスト
- 変更はまずステージングで検証する
- ルールはドキュメント化して履歴を残す
- ログやフローデータを定期確認する
- 定期的に不要ルールを削除する
これらを守ると、NACLを安全かつ管理しやすく運用できます。
よくある設定例とベストプラクティス
設定例(パブリックサブネット)
- 目的:外部からのHTTP/HTTPSのみ許可し、それ以外を遮断します。
- 例(ルール番号は昇順で評価されます)
- 100: ALLOW TCP 80 0.0.0.0/0(インバウンド)
- 110: ALLOW TCP 443 0.0.0.0/0(インバウンド)
- 120: ALLOW TCP 1024-65535 0.0.0.0/0(アウトバウンド、応答用のエフェメラルポート)
- *: DENY ALL(暗黙の拒否を利用するか、明示的に拒否を追加)
設定例(プライベートサブネット)
- 目的:アプリ⇄DBなど内部通信のみ許可し、外部は遮断します。
- 例
- 100: ALLOW TCP 3306 10.0.2.0/24(インバウンド、DBへアプリからの接続を許可)
- 110: ALLOW TCP 1024-65535 10.0.2.0/24(アウトバウンド、応答用)
- *: DENY ALL(外部アクセスは原則拒否)
なぜ双方向のルールが必要か
ネットワークACLはステートレスです。入出力それぞれに許可が必要です。片側だけ設定すると通信が成立しませんのでご注意ください。
ベストプラクティス
- 最小権限を守る:必要なIP/CIDRとポートのみ許可します。
- ルールを番号で整理:低番号に重要な許可を置き、重複を避けます。
- テスト→段階的適用:まずステージングで確認してから本番へ反映します。
- 監視とログ:VPCフローログなどでトラフィックを確認します。
- IaCで管理:変更履歴が残り再現性が高まります。
運用上の注意点
- 0.0.0.0/0を安易に広く使わないでください。必要最小限に限定します。
- 明示的なDENYは可読性を高めますが、暗黙の拒否もあります。
- サブネットごとにACLを分け、役割ごとに設計してください。
まとめと活用シーン
ネットワークACLはサブネット単位で動作するアクセス制御の仕組みです。セキュリティグループと組み合わせることで、柔軟で堅牢なネットワーク設計が可能になります。以下では要点と具体的な活用シーン、運用のコツを分かりやすく説明します。
要点まとめ
- サブネットに適用するため、広域のトラフィック制御に向きます。
- ステートレスのため、入出力両方にルールが必要です(戻りのトラフィックも許可する設定を忘れない)。
- ルールは番号順で評価され、明示的な許可・拒否を行います。
- セキュリティグループはインスタンス単位、ACLはサブネット単位の役割分担が有効です。
活用シーン(具体例)
1) WEB公開(DMZ)
– パブリックサブネットにHTTP/HTTPSのみ許可し、不要なポートをブロックします。外部の不要なアクセスを早期に遮断できます。
2) バックエンド分離
– データベースや内部APIはプライベートサブネットに置き、インターネットからの直接アクセスを拒否します。セキュリティグループでさらに細かく絞れます。
3) インシデント対応・一時ブロック
– 攻撃や不審なトラフィックを確認したら、該当サブネットに即時拒否ルールを適用して被害拡大を防げます。ログと組み合わせて原因追跡も行います。
運用のコツ
- ルールはシンプルに保ち、テスト環境で検証してから本番に反映します。
- ルール番号や目的をコメントで記録し、変更履歴を残します。
- ログ(フローログ等)で挙動を監視し、自動化ツールでテンプレート管理するとミスを減らせます。
以上のポイントを踏まえると、ネットワークACLはセキュリティグループと連携して有効に機能します。用途に応じて使い分けることで、堅牢かつ運用しやすいネットワーク設計が実現できます。