🛡️ ネットワークACL vs セキュリティグループ

マンションのセキュリティで理解する!AWSの2つの防御壁

🏢 マンションのセキュリティで例えると超わかりやすい!

AWSには「二重のセキュリティ」があります

マンションを想像してください。入口には オートロック があり、
各部屋には 個別の鍵 がありますよね?

ネットワークACL = マンション入口のオートロック(フロア全体を守る)
セキュリティグループ = 各部屋のドアロック(部屋ごとに守る)

この2つを組み合わせることで、強固なセキュリティを実現します✨

🏠 マンションのセキュリティシステムで理解しよう!

🏢 VPC = マンション全体
📁 サブネット = フロア
🔒
💻
EC2
インスタンス
🔒
🗄️
RDS
データベース
🔒
Lambda
関数

🔒 = セキュリティグループ(各部屋のドアロック)

🚪
ネットワークACL = フロア入口のオートロック

サブネット全体への出入りをチェック

🔒 セキュリティグループ = 部屋のドアロック

各部屋(インスタンス)についている鍵です

• 部屋ごとに「誰を入れるか」を決められる
• 一度入った人は、出るときチェックなし(ステートフル)
• 「この人は入れる」という許可リストのみ
• 複数の部屋で同じ鍵を共有可能

💡 例: Web開発者の鈴木さんは101号室に入れる

🚪 ネットワークACL = フロア入口のオートロック

フロア(サブネット)全体を守るゲートです

• フロア全体への出入りをチェック
• 入るときも出るときも毎回チェック(ステートレス)
• 「入れる」「入れない」の両方を設定可能
• ルールは番号順に評価される

💡 例: 営業時間外は全員フロアに入れない

🔒
セキュリティグループ
インスタンスレベルのファイアウォール
📍 適用レベル
インスタンス(ENI)レベル
EC2、RDS、Lambda など各リソースに直接アタッチ
🔄 ステートフル
戻りトラフィックは自動的に許可
インバウンドを許可すれば、その応答は自動で通る
ルールタイプ
許可ルールのみ
明示的な「拒否」は設定できない。許可されていないものは自動的に拒否
📋 ルール評価
すべてのルールを評価
全ルールを確認して、1つでも許可があれば通信OK
⚙️ デフォルト動作
インバウンド:全拒否
アウトバウンド:全許可
新規作成時のデフォルト設定
🚪
ネットワークACL
サブネットレベルのファイアウォール
📍 適用レベル
サブネットレベル
サブネット内のすべてのリソースに一括適用
🔄 ステートレス
戻りトラフィックも明示的に許可が必要
インバウンドとアウトバウンド両方のルール設定が必要
✅❌ ルールタイプ
許可と拒否の両方
特定のIPを明示的にブロックすることが可能
📋 ルール評価
番号順に評価(小さい順)
最初にマッチしたルールが適用され、残りは無視
⚙️ デフォルト動作
デフォルトNACL:全許可
カスタムNACL:全拒否
VPC作成時のデフォルトNACLは全通信許可

🔄 ステートフル vs ステートレス - 最重要ポイント!

🔒 セキュリティグループ(ステートフル)

インバウンドで許可 → 戻りは自動OK

🌐
インターネット
→ 許可 →
💻
EC2
🌐
インターネット
← 自動許可 ←
💻
EC2
💡 ポイント:
一度許可した通信の「お返事」は自動的にOK!
アウトバウンドルールを別途設定する必要なし

🚪 ネットワークACL(ステートレス)

インバウンドもアウトバウンドも個別に設定

🌐
インターネット
→ 許可設定必要 →
📁
サブネット
🌐
インターネット
← 許可設定必要 ←
📁
サブネット
⚠️ 注意:
戻りの通信も別途許可が必要!
エフェメラルポート(1024-65535)の許可を忘れずに

📋 ルール評価の違い

🔒 セキュリティグループの評価

すべてのルールを確認して判断

1
HTTP (80) を許可
✓ 許可
2
HTTPS (443) を許可
✓ 許可
3
SSH (22) を許可
✓ 許可
📌 評価方法:
全ルールを確認し、 1つでもマッチすれば許可
どれにもマッチしなければ拒否(暗黙の拒否)

🚪 ネットワークACLの評価

番号順に評価、最初のマッチで決定

100
10.0.0.5 を拒否
✗ 拒否
200
10.0.0.0/24 を許可
✓ 許可
*
すべて拒否(デフォルト)
✗ 拒否
📌 評価方法:
番号の小さい順 に評価
最初にマッチしたルールで決定、残りは無視

📊 完全比較表

項目 🔒 セキュリティグループ 🚪 ネットワークACL
適用レベル インスタンス(ENI)レベル サブネットレベル
状態 ステートフル(戻り自動許可) ステートレス(両方設定必要)
ルールタイプ 許可のみ 許可と拒否の両方
ルール評価 全ルールを評価 番号順(小→大)
デフォルト(新規) イン:全拒否 / アウト:全許可 デフォルトNACL:全許可
カスタムNACL:全拒否
関連付け 複数インスタンスに同一SG可 1サブネットに1NACL
主な用途 個別リソースの細かい制御 サブネット全体の広範囲制御
IPブロック ❌ 不可(許可のみ) ✅ 可能(拒否ルールあり)

💼 どう使い分ける?実践ユースケース

🌐

Webサーバーの公開

一般ユーザーからのHTTP/HTTPSアクセスを許可したい
🔒 セキュリティグループで:
ポート80, 443をインバウンド許可
特定のEC2にのみ適用
🚫

特定IPのブロック

攻撃元IPアドレスからのアクセスを完全に遮断したい
🚪 ネットワークACLで:
拒否ルールで特定IPをブロック
番号を小さくして優先適用
🗄️

データベースの保護

RDSへのアクセスをWebサーバーからのみに限定したい
🔒 セキュリティグループで:
WebサーバーのSGをソースに指定
SG同士の参照で柔軟に制御
🏢

サブネット全体の制御

プライベートサブネット全体へのアクセスをVPC内に限定したい
🚪 ネットワークACLで:
インターネットからの直接アクセスを拒否
VPC内CIDRのみ許可
🔐

管理者SSHアクセス

SSHアクセスを特定のオフィスIPからのみ許可したい
🔒 セキュリティグループで:
ポート22を特定IPのみ許可
必要なインスタンスにのみ適用
🛡️

多層防御(Defense in Depth)

より強固なセキュリティを実現したい
🔒🚪 両方を組み合わせ:
NACLで広範囲のフィルタリング
SGで詳細なアクセス制御
💡 覚えておきたいポイント
1. 基本はセキュリティグループを使う:
ほとんどのケースでセキュリティグループだけで十分。ステートフルで管理が楽!

2. NACLはサブネット全体に影響:
設定ミスするとサブネット内の全リソースに影響。慎重に設定しよう。

3. NACLのエフェメラルポートを忘れずに:
戻りトラフィック用にポート1024-65535のアウトバウンドを許可しないと通信できない。

4. 特定IPブロックはNACLで:
セキュリティグループでは「拒否」ができないので、明示的なブロックはNACLで。

5. SG同士の参照を活用:
「WebサーバーのSGからDBへのアクセスを許可」のように、IP指定より柔軟で安全。

6. デフォルトNACLは全許可:
VPC作成時のデフォルトNACLはすべて許可。カスタムNACLは全拒否がデフォルト。

✨ ベストプラクティス

🎯

最小権限の原則

必要なポート・IPのみ許可
デフォルトは全拒否で、必要なものだけ開ける
定期的に不要なルールを見直す

📝

わかりやすい命名

SG: web-server-sg, db-sg など
用途がすぐわかる名前をつける
説明文も必ず記載する

🔍

ログの活用

VPCフローログを有効化
通信の許可/拒否を記録
トラブルシューティングに活用

🛡️

多層防御

NACLとSGの両方を活用
NACLで大きくフィルタ
SGで細かく制御する

🎓 まとめ

🏢 マンションのセキュリティ = AWSのセキュリティ

ネットワークACLとセキュリティグループは
二重の防御壁 として機能します

🔒
セキュリティグループ

各部屋のドアロック
ステートフル
許可のみ設定可能
基本はこれ!
🚪
ネットワークACL

フロア入口のオートロック
ステートレス
許可と拒否が設定可能
広範囲制御に

🎯 迷ったら:
まず セキュリティグループ で制御
特定IPブロックやサブネット全体制御が必要なら
ネットワークACL を追加!🎉

Created by SSuzuki1063

AWS SAP Learning Resources