Amazon VPC
Amazon VPC(Virtual Private Cloud)は、AWS の中に作る自分専用の仮想ネットワークです。SAA では「どのサブネットに何を置き、通信をどこで許可・拒否するか」という設計が問われます。
ひとことで言うと: AWS の中に区切った、自分専用の「敷地」とその「門・塀」です。
たとえるなら、VPC は塀で囲まれた社屋、パブリックサブネットは来客も入れる受付フロア、プライベートサブネットは社員しか入れない執務フロアです。
このページで押さえる論点
- ネットワークの分け方(パブリック/プライベートサブネット)と IP アドレス設計(CIDR の範囲 /16〜/28、サブネットごとに予約される 5 つの IP)
- ルーティング(ルートテーブル、local ルート、最も細かく一致する経路の優先)
- インターネットとの出入口(IGW、NAT ゲートウェイの AZ ごとの配置とコスト、IPv6 用の Egress-Only IGW)
- NAT インスタンスと NAT ゲートウェイの違い
- 通信の許可・拒否(セキュリティグループとネットワーク ACL、ポート・エフェメラルポート)
- 踏み台サーバーの代わりに使う Session Manager
- VPC フローログ(通信の記録)
- AWS サービスエンドポイントと外部ネットワークとの接続(VPN・Direct Connect の入口)
IP アドレス設計とサブネット
VPC はリージョン(AWS の地域単位)ごとに作り、使う IP アドレスの範囲を CIDR ブロック(例: 10.0.0.0/16。「/16」は先頭 16 ビットが固定という意味で、数字が大きいほど範囲は狭くなる)で決めます。VPC の中を、AZ(アベイラビリティゾーン: リージョン内の独立したデータセンター群)ごとのサブネットに区切って、EC2 やデータベースを配置します。
| 項目 | 内容 |
|---|---|
| VPC の IPv4 CIDR | /16(65,536 個)〜 /28(16 個)。作成後に追加の CIDR ブロック(セカンダリ CIDR)を関連付けて広げることもできる |
| サブネットの IPv4 CIDR | /16 〜 /28。VPC の CIDR の中から切り出す |
| 推奨されるアドレス範囲 | プライベート IP の範囲(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。RFC 1918)から選ぶ |
| サブネットごとに予約される IP | 先頭の 4 つと最後の 1 つ、合計 5 つは EC2 などに割り当てられない |
予約される 5 つの IP は、10.0.0.0/24 のサブネットなら次のとおりです。10.0.0.0(ネットワークアドレス)、10.0.0.1(VPC ルーター用)、10.0.0.2(DNS サーバー用)、10.0.0.3(将来の利用のため予約)、10.0.0.255(ブロードキャストアドレス。VPC はブロードキャストに対応していないため予約)。したがって /24(256 個)で使えるのは 251 個、最小の /28(16 個)では 11 個です。「サブネットに必要な台数が入るか」を問う問題では、この 5 つを引いて計算します。
サブネットは、インターネットに公開するものを置くパブリックサブネットと、公開しないものを置くプライベートサブネットに分けます。Web サーバーやロードバランサーはパブリック、アプリケーションサーバーやデータベースはプライベートに置くのが基本です(ネットワークのセグメンテーション: 役割ごとに区画を分けて、攻撃を受けうる範囲を狭くする考え方)。可用性のために、同じ役割のサブネットを複数の AZ に 1 つずつ作ります。
VPC ピアリングなどで別の VPC やオンプレミス(自社データセンター)とつなぐ予定があるなら、CIDR が重ならないように最初から設計しておきます。CIDR が重なる VPC 同士はピアリングできません。
ルートテーブルとルーティング
ルートテーブルは「宛先(送り先のアドレス範囲)」と「ターゲット(次に渡す相手)」の対応表です。各サブネットは、一度に 1 つのルートテーブルに関連付けられます。明示的に関連付けていないサブネットは、VPC 作成時にできるメインルートテーブルを使います。
| 宛先 | ターゲット | 意味 |
|---|---|---|
| 10.0.0.0/16(VPC の CIDR) | local | VPC 内の通信は VPC 内で届ける。自動で作られる |
| 0.0.0.0/0(すべての宛先) | IGW | このルートがあるサブネットがパブリックサブネット |
| 0.0.0.0/0 | NAT ゲートウェイ | プライベートサブネットから外へ出るときの経路 |
| S3 のプレフィックスリスト | ゲートウェイエンドポイント | S3 宛てだけを VPC エンドポイントへ送る |
複数のルートが当てはまるときは、最も細かく一致するルート(最長プレフィックス一致: /0 より /16、/16 より /24 のように範囲が狭いもの)が使われます。そのため「0.0.0.0/0 → NAT ゲートウェイ」があっても、S3 のアドレス範囲に一致するエンドポイントへのルートが優先されます。
つまり、サブネットが「パブリック」か「プライベート」かは、置いた場所ではなく、関連付けたルートテーブルに IGW へのルートがあるかどうかで決まります。
インターネットとの出入口: IGW・NAT ゲートウェイ・Egress-Only IGW
インターネットゲートウェイ(IGW)は VPC とインターネットをつなぐ玄関口です。VPC に一度にアタッチできる IGW は 1 つだけです。IGW は冗長化されて水平にスケールするため、可用性や帯域の心配はいりません。IGW 自体には料金がかからず、データ転送料金だけがかかります。EC2 が IGW 経由でインターネットと通信するには、ルートテーブルのルートに加えて、パブリック IP アドレスか Elastic IP アドレス(固定のパブリック IP)が必要です。
NAT ゲートウェイは、プライベートサブネットの EC2 が外へ出る通信だけを通す仕組みです。送信元のアドレスを NAT ゲートウェイの Elastic IP に付け替えて送ります(NAT: アドレス変換)。外から始まる通信は受け付けません。パブリックサブネットに置き、プライベートサブネットのルートテーブルから「0.0.0.0/0 → NAT ゲートウェイ」で参照します。
通信経路: IGW と NAT ゲートウェイ
※簡略化しています: 行きの通信だけを動かし、応答の戻りは説明文で示しています。NAT ゲートウェイが持つ Elastic IP(固定のパブリック IP)や、AZ ごとの配置は省略しています。
図では省いた、NAT ゲートウェイの配置と料金のポイントです。
- AZ ごとに置く: NAT ゲートウェイは作成した AZ の中でだけ冗長化されています。1 つを全 AZ で共有すると、その AZ が落ちたときに他の AZ のサブネットも外へ出られなくなります。AZ に依存しない構成にするには、AZ ごとに NAT ゲートウェイを作り、各 AZ のルートテーブルから同じ AZ のものを参照します。
- 料金: 使用可能な時間 1 時間ごとと、処理したデータ 1 GB ごとに課金されます。AZ をまたいで大量のトラフィックを送受信する場合は、リソースと同じ AZ の NAT ゲートウェイを使う(AZ ごとに作る)ことが推奨されています。
- AWS サービス宛ての通信: S3 や DynamoDB など VPC エンドポイントに対応したサービス宛ての通信が多いなら、エンドポイントを作ると NAT ゲートウェイのデータ処理料金を減らせます(VPC の接続で解説)。
- 帯域: 5 Gbps から始まり、100 Gbps まで自動で拡張されます。
IPv6 では事情が違います。IPv6 アドレスはすべてグローバルに一意で、既定でパブリックなアドレスです。「外へは出られるが、外から通信を始められない」ようにするには、NAT ではなく Egress-Only インターネットゲートウェイを使います。IPv6 専用・ステートフル(出た通信の応答は戻れる)で、ゲートウェイ自体に料金はかかりません。IPv4 の外向き専用通信には、これまでどおり NAT ゲートウェイを使います。
NAT ゲートウェイと NAT インスタンスの違い
NAT の役割は、NAT 用に設定した EC2 インスタンス(NAT インスタンス)でも担えます。試験では「運用負荷」「可用性」「コスト」の観点で比べる問題が出ます。
| 項目 | NAT ゲートウェイ | NAT インスタンス |
|---|---|---|
| 管理 | AWS のマネージドサービス。パッチ適用などは不要 | 自分で管理(OS のパッチ適用など) |
| 可用性 | AZ の中で冗長化済み。AZ ごとに作れば AZ 障害にも対応 | インスタンス間のフェイルオーバーをスクリプトなどで自前で用意 |
| 帯域 | 100 Gbps まで自動で拡張 | インスタンスタイプの帯域に依存 |
| 料金の考え方 | 台数・使用時間・処理したデータ量 | 台数・使用時間・インスタンスタイプとサイズ |
| セキュリティグループ | 関連付けできない(サブネットの NACL と、背後の EC2 の SG で制御) | 関連付けできる |
| ポート転送・踏み台 | できない | 設定すればできる |
NAT インスタンスは、自分宛てでない通信を中継するため、EC2 の「送信元/送信先チェック」(自分が送信元か宛先の通信だけを扱う既定の動作)を無効にする必要があります。また、NAT インスタンス用の AMI(NAT AMI)はサポートが終了しており、AWS は NAT ゲートウェイへの移行を推奨しています。試験で「運用負荷を最小に」「高可用性」と書かれていれば NAT ゲートウェイを選びます。
セキュリティグループとネットワーク ACL
VPC には通信を絞る仕組みが 2 段階あります。サブネットの出入口でチェックするネットワーク ACLと、EC2 などのネットワークインターフェースごとにチェックするセキュリティグループです。
| 項目 | セキュリティグループ | ネットワーク ACL |
|---|---|---|
| 適用範囲 | インスタンス(ネットワークインターフェース) | サブネット(1 つのサブネットに関連付けられる NACL は一度に 1 つ) |
| ステート | ステートフル(行きを許可すれば戻りは自動で許可) | ステートレス(戻りも別にルールが必要) |
| ルール | 許可のみ | 許可と拒否 |
| 評価方法 | すべてのルールを見て、どれかに当てはまれば許可 | 番号(1〜32766)の小さい順に見て、最初に当てはまったルールで決定 |
| 既定の動き | インバウンドはすべて拒否 | 既定の NACL はすべて許可。自分で作った NACL は、ルールを追加するまですべて拒否 |
| 送信元の指定 | IP アドレス範囲のほか、別のセキュリティグループも指定できる | IP アドレス範囲 |
ステートレスの NACL で注意したいのが「戻りの通信」です。Web サーバーへの行きは 443 番ポート宛てですが、戻りはクライアント側が一時的に使うポート(エフェメラルポート)宛てになります。範囲は OS などで異なり(多くの Linux は 32768〜61000、Windows Server 2008 以降は 49152〜65535、ELB・NAT ゲートウェイ・Lambda は 1024〜65535)、さまざまなクライアントを受け付けるなら 1024〜65535 を許可します。NACL のアウトバウンドでこの範囲を許可しないと、行きは届いても応答が返りません。
SG と NACL のルールを切り替えてみよう
インターネットのクライアントから、パブリックサブネットの EC2(HTTPS: 443 番)へアクセスします。ルールを変えると、行きと戻りの結果が変わります。
※簡略化しています: 送信元 IP アドレスとプロトコルは省き、ポート番号だけで判定します。クライアントの戻りポートは 50000 番に固定しています。NACL は自分で作成したもの(ルールがなければすべて拒否)を想定し、ルートテーブルは考慮しません。
図では省いた送信元の指定について補足します。SG のルールでは送信元に別のセキュリティグループを指定できます。たとえば DB の SG で「App サーバーの SG からの 3306 番だけ許可」とすれば、App サーバーが Auto Scaling で増減して IP アドレスが変わっても、ルールを直す必要がありません。一方、「特定の IP アドレスからの通信を遮断したい」ときは、拒否ルールを書ける NACL を使い、拒否ルールを許可ルールより小さい番号にします。
踏み台サーバーの代わりに Session Manager
プライベートサブネットの EC2 にログインするには、従来はパブリックサブネットに踏み台サーバー(外から SSH で入り、そこから内側へ入り直すための EC2)を置いていました。しかし、踏み台には SSH ポートの公開、SSH キーの管理、踏み台自体のパッチ適用という手間とリスクがあります。
AWS Systems Manager の Session Manager を使うと、次のようにしてインスタンスを操作できます。
- インバウンドのポートを開けず、踏み台サーバーも SSH キーも不要
- 誰が接続できるかを IAM ポリシーで一元管理
- 操作ログを S3 や CloudWatch Logs に保存でき、API の呼び出しは CloudTrail に記録される
- Systems Manager 用の VPC エンドポイント(PrivateLink)を作れば、パブリック IP を持たずインターネットに出られないインスタンスにも接続できる
「SSH ポートを開けずに」「踏み台を管理せずに」「操作を監査したい」という要件なら Session Manager を選びます。
VPC フローログ
VPC フローログは、ネットワークインターフェースを出入りする IP 通信の情報(送信元・宛先・ポート、許可されたか拒否されたか など)を記録する機能です。「通信が届かない原因を調べたい」「どこからアクセスがあったか記録したい」という場面で使います。
| 項目 | 内容 |
|---|---|
| 作成する単位 | VPC・サブネット・ネットワークインターフェース(VPC やサブネットで作ると、その中のすべてのネットワークインターフェースが対象) |
| 記録する通信 | 許可された通信(ACCEPT)・拒否された通信(REJECT)・両方(ALL)から選ぶ |
| 送信先 | CloudWatch Logs、S3、Amazon Data Firehose |
| 性能への影響 | 通信の経路の外で集めるため、スループットや遅延に影響しない |
| 記録されない通信の例 | Amazon の DNS サーバーへの通信、インスタンスメタデータ(169.254.169.254)への通信、DHCP の通信 |
SG や NACL で拒否された通信は REJECT として記録されるため、「どちらで弾かれているか」の切り分けに使えます。API の操作履歴を記録する CloudTrail とは記録する対象が違う点に注意します。
AWS サービスや外部ネットワークとの接続
VPC の外とつなぐ方法は、相手によって選びます。詳しくは VPC の接続 で解説します。
- S3 や DynamoDB などの AWS サービス: VPC エンドポイントを使うと、インターネットや NAT ゲートウェイを通らずにアクセスできる
- 別の VPC: 1 対 1 なら VPC ピアリング(推移的なルーティング不可)、多数なら Transit Gateway
- オンプレミス: インターネット上の暗号化トンネルの Site-to-Site VPN(すぐ使える・安い)か、専用線の Direct Connect(帯域と遅延が安定・開通に時間がかかる)
問題文のキーワード → 選ぶべき答え
| 問題文の言い回し | 答えと理由 |
|---|---|
| 「プライベートサブネットの EC2 がパッチを取得」「外からの接続は許可しない」 | パブリックサブネットに NAT ゲートウェイ。外向きの通信だけを通す |
| 「1 つの AZ で障害が起きてもインターネットへ出られるように」 | AZ ごとに NAT ゲートウェイ。NAT ゲートウェイは AZ の中でだけ冗長 |
| 「NAT の運用負荷を最小に」「高可用性」 | NAT ゲートウェイ。NAT インスタンスはパッチ適用やフェイルオーバーを自前で用意する |
| 「IPv6 で外向きの通信だけを許可」 | Egress-Only インターネットゲートウェイ。IPv6 では NAT を使わない |
| 「特定の IP アドレスからのアクセスをブロック」 | NACL の拒否ルール(許可より小さい番号)。SG には拒否ルールがない |
| 「IP が変わる App サーバーからだけ DB への接続を許可」 | DB の SG で送信元に App の SG を指定。IP の管理が不要 |
| 「NACL を作成したら応答が返らない」 | NACL のアウトバウンドでエフェメラルポート(1024〜65535)を許可。NACL はステートレス |
| 「SSH ポートを開けずに」「踏み台サーバーなしで」「操作を監査」 | Systems Manager Session Manager。IAM で制御し、ログを S3・CloudWatch Logs に保存 |
| 「拒否された通信を記録して調査」「IP 通信の記録を保存」 | VPC フローログ(REJECT または ALL)を CloudWatch Logs や S3 へ |
| 「サブネットに 25 台分の IP が必要。できるだけ小さく」 | /27(32 − 5 = 27 個)。各サブネットで 5 つの IP が予約される |
| 「プライベートサブネットから S3 へ。NAT の料金を減らしたい」 | S3 のゲートウェイエンドポイント。追加料金なしで NAT を通らない |
引っかけポイント
- 「セキュリティグループに拒否ルールを追加してブロックする」→ ✕。SG は許可ルールのみ。拒否は NACL で書く
- 「NAT ゲートウェイをプライベートサブネットに作成する」→ ✕。NAT ゲートウェイはパブリックサブネットに置き、プライベートサブネットのルートテーブルから参照する
- 「NAT ゲートウェイを 1 つ作れば AZ 障害にも耐えられる」→ ✕。冗長なのはその AZ の中だけ。AZ ごとに作る
- 「NAT ゲートウェイにセキュリティグループを付けて通信を絞る」→ ✕。NAT ゲートウェイには SG を関連付けできない。サブネットの NACL か、背後の EC2 の SG で制御する
- 「/24 のサブネットには 256 台の EC2 を置ける」→ ✕。5 つの IP が予約されるので使えるのは 251 個
- 「NACL で 443 番のインバウンドを許可すれば応答も返る」→ ✕(自分で作った NACL の場合)。ステートレスなのでアウトバウンドでエフェメラルポートの許可も必要
- 「IPv6 の外向き専用通信に NAT ゲートウェイを使う」→ ✕。IPv6 の外向き専用には Egress-Only IGW。NAT ゲートウェイは IPv4 用
- 「通信の許可・拒否の記録を CloudTrail で調べる」→ ✕。CloudTrail は API 操作の記録。IP 通信の記録は VPC フローログ
まとめ: SAA 試験で押さえるポイント
- パブリックサブネット = ルートテーブルに「0.0.0.0/0 → IGW」がある。EC2 がインターネットと通信するにはパブリック IP(または Elastic IP)も必要
- VPC・サブネットの CIDR は /16〜/28。各サブネットで 5 つの IP が予約される。ピアリングの予定があれば CIDR を重ねない
- プライベートサブネットから外へ出るだけなら NAT ゲートウェイ(パブリックサブネットに置く)。外から始まる通信は受け付けない。IPv6 なら Egress-Only IGW
- NAT ゲートウェイは 1 つの AZ の中で冗長化されている。AZ 障害に備えるなら AZ ごとに NAT ゲートウェイを置き、各 AZ のルートテーブルから同じ AZ の NAT GW を指す
- NAT インスタンスは自前管理(パッチ・フェイルオーバー・送信元/送信先チェックの無効化)。運用負荷と可用性では NAT ゲートウェイが有利
- セキュリティグループ(SG)はステートフル・許可ルールのみ・インスタンス単位。ネットワーク ACL(NACL)はステートレス・許可と拒否・番号順評価・サブネット単位
- 「特定の IP アドレスをブロックしたい」→ 拒否ルールを書ける NACL。SG には拒否ルールがない
- SG のルールでは、送信元に別の SG を指定できる(例: DB の SG は「Web の SG からの 3306 番だけ許可」)
- 踏み台サーバーの代わりは Session Manager。通信の記録は VPC フローログ
- S3 や DynamoDB へインターネットを通らずにアクセスするには VPC エンドポイント(ゲートウェイ型)を使う
確認問題
参考リンク
AWS 公式ドキュメント(外部サイトが開きます)。
- Amazon VPC とは
- VPC の CIDR ブロック(/16〜/28)
- サブネットの CIDR ブロック(予約される IP アドレス)
- ルートテーブル
- ルートの優先度(最長プレフィックス一致)
- インターネットゲートウェイ
- Amazon VPC のクォータ(VPC にアタッチできる IGW は 1 つ)
- NAT ゲートウェイ
- NAT ゲートウェイの基本(帯域 5〜100 Gbps、AZ ごとの配置)
- NAT ゲートウェイの料金
- NAT ゲートウェイと NAT インスタンスの比較
- NAT インスタンス
- NAT インスタンスの操作(送信元/送信先チェックの無効化)
- Egress-Only インターネットゲートウェイ
- セキュリティグループ
- ネットワーク ACL(ルール番号 1〜32766)
- カスタムネットワーク ACL(エフェメラルポート)
- AWS Systems Manager Session Manager
- VPC フローログ
- フローログの基本
- フローログの制限(記録されない通信)