導入
VPC内の通信を誰に許可し誰を拒否するか。この境界線の設計にはセキュリティグループとネットワークACLという2つの仕組みがあり、似ているようで根本的に違うという点がSAA頻出のひっかけです。
説明
| 項目 | セキュリティグループ(SG) | ネットワークACL(NACL) |
|---|---|---|
| 適用単位 | インスタンス(ENI)単位 | サブネット単位 |
| 状態管理 | ステートフル(戻りの通信は自動許可) | ステートレス(戻りの通信も明示的に許可が必要) |
| ルール | 許可のみ設定できる | 許可・拒否の両方を設定できる |
| ルール評価 | すべてのルールを評価してAND的に判定 | 番号の若い順に評価し、最初に一致したルールを適用 |
セキュリティグループはインスタンスの前に立つ「ドア」で、許可した通信の戻りは自動的に通します(例:80番ポートへのインバウンドを許可すれば、その応答のアウトバウンドは自動許可)。NACLはサブネットの前に立つ「壁」で、インバウンド・アウトバウンドを個別に、しかも拒否ルールを含めて明示的に設定する必要があります。
flowchart LR
Internet(("インターネット")) --> NACL["NACL<br/>(サブネット境界・ステートレス)"]
NACL --> SG["セキュリティグループ<br/>(インスタンス境界・ステートフル)"]
SG --> EC2["EC2インスタンス"]
特定のIPアドレスからの通信だけを明示的に拒否したい場合、SGでは拒否ルールを書けないため、NACLを使う必要があります(例:不審なIPからのアクセスをブロックしたい)。
ネットワーク全体の可視化・監査には VPCフローログ を使います。ENIを通過する通信の送信元・送信先・ポート・許可/拒否結果を記録し、異常な通信の調査やコンプライアンス対応に利用します。
より高度な脅威対策には AWS Network Firewall を使います。VPCの境界にステートフルなファイアウォールを配置し、ドメインベースのフィルタリングや侵入防御(IPS)ルールなど、SGやNACLではできない詳細な検査を行えます。
具体例
Webサーバーの通信制御を、2つの要件で見比べます。SGとNACLの役割の違いがはっきりします。
- 要件:一般ユーザーにHTTPSを開放し、SSHは社内からだけ → セキュリティグループ。「443番は誰でも許可」「22番は社内IPのみ許可」を書く。SGはステートフルなので、行きを許可すれば戻りの通信は自動で通る(戻り用ルールは不要)。SGは「許可」しか書けないが、この用途はそれで足りる。
- 要件:不審なIP帯
198.51.100.0/24からの攻撃をまとめて締め出したい → ここでSGは無力。SGは拒否ルールを書けないからだ。→ NACLの出番。サブネット単位で「このIP帯を拒否」を明示的に書ける。ただしNACLはステートレスなので、インバウンドとアウトバウンドを別々に設定する必要がある。
SAAの典型的なひっかけが「特定IPを拒否したい」(SGでは不可→NACL)と「戻りの通信を毎回許可するのが面倒」(SGはステートフルなので不要)。加えて、通信の記録はVPCフローログ、ドメインフィルタや侵入防御など詳細な検査はNetwork Firewall、と役割を分けて覚えます。
読んでみよう
「特定のIPだけを拒否したい」=NACL(SGは拒否不可)、「戻りの通信を都度許可するのが面倒」=SGはステートフルだから不要、という2点がSAAの典型的なひっかけです。VPCフローログは「通信の記録」、Network Firewallは「詳細な検査・防御」という役割の違いも合わせて整理しておきましょう。