カテゴリ: AWS VPC 更新日: 2026/03/24

【AWS】VPCのセキュリティグループとネットワークACLの違いを徹底比較!初心者向けにやさしく解説

206
【AWS】VPCのセキュリティグループとネットワークACLの違いを徹底比較

先生と生徒の会話形式で理解しよう

生徒

「先生、AWSのVPCで『セキュリティグループ』と『ネットワークACL』ってよく出てきますけど、どう違うんですか?」

先生

「どちらも通信を制御するための機能ですが、適用される単位やルールの性質が違います。セキュリティグループはインスタンス単位、ネットワークACLはサブネット単位で適用されるんですよ。」

生徒

「なるほど…。じゃあ両方使う意味ってあるんですか?」

先生

「もちろんです。多層的なセキュリティ対策として、それぞれの特性を活かすことで安全なVPC設計ができます。それじゃ、詳しく説明していきますね。」

1. セキュリティグループとは?VPCにおける役割と特徴

1. セキュリティグループとは?VPCにおける役割と特徴
1. セキュリティグループとは?VPCにおける役割と特徴

AWSのセキュリティグループ(Security Group)は、VPC(Virtual Private Cloud)環境において、EC2インスタンスなどの「リソース単位」で通信を守る仮想ファイアウォールです。

イメージとしては、マンションの各部屋(インスタンス)の玄関に設置された「オートロック」や「インターホン」のようなものです。誰を通して、誰を通さないかを部屋ごとに細かく設定できます。

主な特徴は以下の4点です。これらはSEOやAWS認定試験でも非常によく問われる重要なポイントです:

  • インスタンス単位(ENI単位)で適用: サブネット全体ではなく、個々のサーバーごとに異なるルールを割り当てられます。
  • ステートフル(Stateful): 送信元からの受信(インバウンド)を許可すると、その「戻り」の通信(アウトバウンド)は設定なしで自動的に許可されます。
  • 許可ルールのみ設定可能: 「この通信を拒否する」という設定はできず、「これとこれは通して良い」というホワイトリスト形式で管理します。
  • インバウンドとアウトバウンドを分離: 「外から中への通信」と「中から外への通信」をそれぞれ定義できます。

たとえば、Webサイトを公開するサーバー(Webサーバー)であれば、以下のように「Web閲覧用のHTTP(80番ポート)」や「管理用のSSH(22番ポート)」を許可する設定が一般的です。


タイプ: SSH
プロトコル: TCP
ポート範囲: 22
送信元: 203.0.113.1/32(自分のPCのIPアドレスなど)
解説: 管理者だけが遠隔操作できるように制限します。

タイプ: HTTP
プロトコル: TCP
ポート範囲: 80
送信元: 0.0.0.0/0
解説: 世界中の誰からでもWebサイトにアクセスできるようにします。

プログラミング未経験の方にとって、「ポート番号」は最初は難しく感じるかもしれません。これは「データの通り道となるドアの番号」だと考えてください。セキュリティグループはこの「ドア」に対して、「誰が来て良いか」を厳密に指定する役割を担っています。

また、セキュリティグループは複数のインスタンスに同じものを適用したり、一つのインスタンスに複数のグループを重ねて設定したりすることも可能です。この柔軟性が、AWSにおける安全なネットワーク設計の核となっています。

2. ネットワークACL(NACL)とは?サブネット単位のアクセス制御

2. ネットワークACL(NACL)とは?サブネット単位のアクセス制御
2. ネットワークACL(NACL)とは?サブネット単位のアクセス制御

ネットワークACLは、VPC内のサブネットに対して適用されるアクセス制御リストで、セキュリティグループとは異なる制御が可能です。

主な特徴はこちらです:

  • サブネット単位で適用される
  • ステートレス:戻りの通信も明示的に許可が必要
  • 許可ルールと拒否ルールの両方を定義できる
  • ルールには番号があり、昇順で評価される

NACLでは以下のようなルールを定義できます:


ルール番号: 100
タイプ: HTTP
プロトコル: TCP
ポート範囲: 80
送信元: 0.0.0.0/0
許可/拒否: 許可

ルール番号: 110
タイプ: すべてのトラフィック
プロトコル: ALL
送信元: 0.0.0.0/0
許可/拒否: 拒否

3. セキュリティグループとNACLの違いを表で比較

3. セキュリティグループとNACLの違いを表で比較
3. セキュリティグループとNACLの違いを表で比較

セキュリティグループとネットワークACLの違いを以下の表にまとめました:


| 項目                     | セキュリティグループ         | ネットワークACL           |
|------------------------|-----------------------------|---------------------------|
| 適用範囲                | インスタンス                | サブネット                |
| ステートフル/ステートレス | ステートフル                | ステートレス              |
| ルールの種類             | 許可のみ                    | 許可・拒否両方             |
| 戻りの通信の自動許可     | あり                        | なし(明示的に設定必要)   |
| 評価順序                 | 全て適用                    | 番号の小さい順に評価       |

両者は目的が違うため、使い分けが重要です。セキュリティグループは主にアプリケーション層での制御、NACLはネットワーク層での制御といえます。

AWSの基本用語や仕組みを、図解でサクッと理解したい人には、 入門の定番書がこちらです。

AWSの基本が全部わかる教科書をAmazonで見る

※ Amazon広告リンク

4. セキュリティ強化のための使い分けと併用例

4. セキュリティ強化のための使い分けと併用例
4. セキュリティ強化のための使い分けと併用例

セキュリティグループとNACLは併用することで、より強固なセキュリティを実現できます。例えば以下のように使い分けましょう:

  • セキュリティグループ:EC2ごとの細かな通信制御
  • NACL:VPC全体やサブネット単位での広範な制御

具体例:

セキュリティグループではWebサーバーに対してTCP 80を許可しつつ、NACL側ではそれ以外のトラフィックを明示的に拒否するなど。


セキュリティグループ
└── 許可: TCP 80, TCP 22

NACL
├── 許可: TCP 80(ルール番号100)
├── 許可: TCP 22(ルール番号110)
└── 拒否: ALL(ルール番号120)

5. よくある設定ミスとトラブル回避ポイント

5. よくある設定ミスとトラブル回避ポイント
5. よくある設定ミスとトラブル回避ポイント

初心者が陥りやすいNACLとセキュリティグループの設定ミスには以下があります:

  • NACLのアウトバウンドルールを忘れる:戻りの通信が遮断されて接続できない
  • セキュリティグループだけ設定して安心してしまう:NACLで拒否されている可能性あり
  • 評価順を理解していない:番号順に処理されるため、後ろのルールが無視される

トラブル時はCloudWatch LogsやVPC Flow Logsを活用すると原因を特定しやすくなります。

6. AWS CLIでセキュリティグループとNACLを設定する

6. AWS CLIでセキュリティグループとNACLを設定する
6. AWS CLIでセキュリティグループとNACLを設定する

AWS CLIを使って設定することもできます。以下に代表的なコマンドを示します。


# セキュリティグループ作成
aws ec2 create-security-group \
  --group-name my-sg \
  --description "My security group" \
  --vpc-id vpc-xxxxxxxx

# インバウンドルール追加
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxx \
  --protocol tcp \
  --port 22 \
  --cidr 0.0.0.0/0

# NACLにルール追加
aws ec2 create-network-acl-entry \
  --network-acl-id acl-xxxxxxxx \
  --rule-number 100 \
  --protocol tcp \
  --port-range From=80,To=80 \
  --cidr-block 0.0.0.0/0 \
  --egress \
  --rule-action allow

CLIを使えば、インフラをコード化(IaC)することが可能になり、再現性や管理性が向上します。

まとめ

まとめ
まとめ

今回は、AWS VPCにおけるセキュリティグループとネットワークACL(NACL)の違いを初心者向けに丁寧に解説しました。どちらもAWSクラウドのネットワークセキュリティを構成する重要なコンポーネントであり、誤った理解のまま運用すると通信障害やセキュリティリスクに直結します。

セキュリティグループはインスタンス単位で適用され、ステートフルであるため「受信を許可すれば、返信の送信も自動で許可される」という性質があります。一方、NACLはサブネット単位で適用され、ステートレスであるため、戻り通信も明示的に許可する必要があります。この違いが、設定時のポイントになります。

また、セキュリティグループは「許可ルールのみ」を設定できるのに対して、ネットワークACLは「許可と拒否の両方」のルールが設定できるため、より厳密な制御が可能です。そのため、セキュリティグループは基本の守り、NACLは追加の防御ラインとして設計するのが一般的です。

実際のシステム設計では、これらを組み合わせて多層的なセキュリティ構成を作ることが求められます。以下のような併用例は実運用でも非常に効果的です:


# セキュリティグループ:WebアクセスとSSHのみ許可
タイプ: HTTP (80), SSH (22)
送信元: 0.0.0.0/0

# ネットワークACL:
ルール番号100:TCP 80 ALLOW
ルール番号110:TCP 22 ALLOW
ルール番号120:ALL DENY(すべて拒否)

さらに、AWS CLIを活用することで、セキュリティ設定をコードで管理し、バージョン管理や自動化に対応できます。特にInfrastructure as Code(IaC)を取り入れている企業やプロジェクトでは、CLIによる操作は欠かせません。

これらの設定や設計の知識は、AWS認定試験(例:SAA、SAP)にも頻出であり、実務においてもトラブルシュートや設計レビューの際に非常に役立ちます。VPCセキュリティの基礎をしっかり理解して、より安全なAWS環境を構築できるようになりましょう。

先生と生徒の振り返り会話

生徒

「セキュリティグループとネットワークACLって、似てるようで全然使い方が違うんですね!」

先生

「そうですね。セキュリティグループはインスタンス単位で使って、NACLはサブネット全体に適用する。それぞれの特徴を理解して適切に使うことが大切です。」

生徒

「ステートフルとステートレスの違いも印象に残りました。返信が自動で許可されるかどうかって重要ですね!」

先生

「まさにそこがポイントです。特にネットワークACLは戻り通信も忘れず設定しないと、想定通りに通信できません。」

生徒

「CLIでの設定例も勉強になりました。次はTerraformとかにも挑戦してみたいです!」

先生

「素晴らしいですね。IaCを取り入れれば、セキュリティ設定の自動化や再現性が高まります。ぜひ試してみてください。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

質問1:AWSのVPCにおける「セキュリティグループ」とは、初心者向けに簡単に言うとどのような機能ですか?

回答1:AWSのVPC(Virtual Private Cloud)におけるセキュリティグループとは、EC2インスタンスなどの仮想サーバーに対して適用される「仮想ファイアウォール」のことです。プログラミング初心者の方向けに例えると、特定の部屋(インスタンス)の入り口に立っている門番のような存在です。許可された通信だけを通し、インスタンス単位で細かいアクセス制御を行う役割を担っています。
AWS VPCの一覧へ
新着記事
Java
Java の古い日付クラス(Date, Calendar)と新しい日付 API の違い
JavaのDateとCalendarと新しい日付APIの違いとは?初心者向け完全ガイド
Java
Java のカレンダー機能(java.util.Calendar)の使い方
JavaのCalendarクラスの使い方をわかりやすく解説!日付や時刻の操作に便利な基本機能まとめ
Flutter
Dartのパッケージ管理(pubspec.yaml)の使い方
FlutterとDartのパッケージ管理完全ガイド!pubspec.yamlの使い方を初心者向けに徹底解説
Java
Java のミリ秒(Unix タイムスタンプ)を取得・変換する方法
JavaでUnixタイムスタンプ(ミリ秒)を取得・変換する方法を徹底解説!
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク