Amazon VPC

Amazon VPC(Virtual Private Cloud)は、AWS の中に作る自分専用の仮想ネットワークです。SAA では「どのサブネットに何を置き、通信をどこで許可・拒否するか」という設計が問われます。

ひとことで言うと: AWS の中に区切った、自分専用の「敷地」とその「門・塀」です。

たとえるなら、VPC は塀で囲まれた社屋、パブリックサブネットは来客も入れる受付フロア、プライベートサブネットは社員しか入れない執務フロアです。

このページで押さえる論点

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)localVPC 内の通信は VPC 内で届ける。自動で作られる
0.0.0.0/0(すべての宛先)IGWこのルートがあるサブネットがパブリックサブネット
0.0.0.0/0NAT ゲートウェイプライベートサブネットから外へ出るときの経路
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 ゲートウェイ

インターネット VPC パブリック サブネット プライベート サブネット IGW EC2(Web) NAT GW EC2(App) ✕ 外から開始は不可

※簡略化しています: 行きの通信だけを動かし、応答の戻りは説明文で示しています。NAT ゲートウェイが持つ Elastic IP(固定のパブリック IP)や、AZ ごとの配置は省略しています。

図では省いた、NAT ゲートウェイの配置と料金のポイントです。

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 番)へアクセスします。ルールを変えると、行きと戻りの結果が変わります。

クライ アント NACL サブネット SG EC2 単位 EC2 443番 行き 戻り
セキュリティグループ(ステートフル)
ネットワーク ACL(ステートレス)

どのルールにも当てはまらなければ、最後の「*」ルールで拒否されます。

※簡略化しています: 送信元 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 ポートを開けずに」「踏み台を管理せずに」「操作を監査したい」という要件なら 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 の接続 で解説します。

問題文のキーワード → 選ぶべき答え

問題文の言い回し答えと理由
「プライベートサブネットの 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 を通らない

引っかけポイント

まとめ: SAA 試験で押さえるポイント

確認問題

参考リンク

AWS 公式ドキュメント(外部サイトが開きます)。