Amazon VPCとは ― サブネットとルートテーブルで作る仮想ネットワークの仕組み
VPCは、
VPCとは、AWSの中に作る自分専用の仮想ネットワーク
AWSでEC2インスタンスを動かす場所が、VPC(Virtual Private Cloud)です。AWSのクラウドの中に自分で定義する、論理的に分離された仮想ネットワークです。自分が管理するデータセンターで運用するネットワークに近い環境を用意できます。インターネットから接続できるかどうかも、このネットワークの設計で決まります。
AWSのアカウントには、各リージョンに最初からデフォルトVPCが1つあります。デフォルトVPCは、EC2インスタンスをすぐに起動してインターネットにつなげるように、あらかじめ設定されています。自分で設計したいときは、サブネット・IPアドレス・ゲートウェイを指定して、新しいVPCを作ることもできます。
サブネットは、1つのAZの中に収まるIPアドレスの範囲
VPCを作ったら、その中にサブネットを作ります。サブネットとは、VPCの中にあるIPアドレスの範囲です。AWS公式ドキュメントによると、サブネットは必ず1つのアベイラビリティゾーン(AZ)の中に収まります。複数のAZにまたがることはできません。
CIDRブロックは、IPアドレスの範囲を表す値です。サブネットのCIDRブロックは、サブネット計算の記事で説明したCIDR表記のまま決めます。VPC全体には、たとえば10.0.0.0/16のような大きいCIDRを割り当てます。AZごとのサブネットには、そこからさらに分割した10.0.1.0/24のような小さいCIDRを割り当てます。
図のように、1つのVPCの中には、AZごとに複数のサブネットを作れます。サブネットが「パブリック」か「プライベート」かは、次の節で説明するルートテーブルで決まります。ファイルに書いた定義から、同じ構成のVPCとサブネットを別のリージョンにも作る方法は、IaCの記事にまとめています。AWSでVPCとサブネットをテンプレートから作る例は、CloudFormationの記事で紹介しています。
ルートテーブルが、サブネットから出る通信の行き先を決める
ルートテーブルとは、サブネットやゲートウェイから出る通信の行き先を決める設定です。
サブネットを作ると、必ずどれか1つのルートテーブルに関連付けられます。指定しなければ、VPCのメインルートテーブルに自動で関連付けられます。関連付けも、ルートテーブルの内容も変更できます。
AWS公式ドキュメントによると、サブネットの種類はルーティングの設定方法によって決まります。インターネットゲートウェイへの直接のルートがあればパブリックサブネット、無ければプライベートサブネットです。サブネットに付けた名前では、パブリックかプライベートかは決まりません。ほかのVPCとVPCピアリングやTransit Gatewayでつなぐときも、相手のVPCの範囲への経路をルートテーブルに書きます。
インターネットゲートウェイとNATゲートウェイの違い
インターネットゲートウェイ(IGW)は、VPCとインターネットの間の通信を可能にするコンポーネントです。冗長化されていて、高い可用性を備えています。パブリックサブネットのリソースがインターネットと通信するには、パブリックIPv4アドレスかIPv6アドレスが必要です。このアドレスがあれば、IGWを通して通信できます。インターネット側からも、そのアドレスを宛先にして接続を開始できます。
インスタンス自身が知っているのは、VPCの中のプライベートIPv4アドレスだけです。IPv4では、IGWがプライベートIPv4アドレスとパブリックIPv4アドレスを1対1で書き換えます。
NATゲートウェイ(NAT GW)を使うと、プライベートサブネットのインスタンスがVPCの外のサービスに接続できます。外部のサービスの側から、プライベートサブネットのインスタンスへの接続を開始することはできません。
インスタンスが送った通信の送信元アドレスは、NAT GWのアドレスに書き換わります。戻ってきた応答は、NAT GWが元のインスタンスのアドレスに書き換えて届けます。NATの記事で説明した家庭用ルータと同じように、内側から始めた通信だけが通ります。
1つのAZに作るNAT GWは、パブリックサブネットの中に置きます。NAT GWからインターネットへの通信は、そのパブリックサブネットのIGWを通って出ていきます。AZをまたいで自動で広がるリージョナルNAT GWもあります。こちらはパブリックサブネットを必要としません。
デフォルトVPCには、IGWとIPv4用の0.0.0.0/0ルートが最初から用意されています。デフォルト以外のVPCには、どちらも用意されていません。自分でIGWを作り、ルートテーブルにルートを追加する必要があります。
動かして確かめる:パブリックとプライベートで届き方はどう変わるか
次の図で、パブリックサブネットとプライベートサブネットを切り替えられます。ルートテーブルの0.0.0.0/0の行き先と、通信の届き方の違いを比較できます。
どちらのサブネットでも、インスタンスから始めた通信は外部に届き、その応答も戻ってきます。ただし、パブリックサブネットのインスタンスがIPv4で通信するには、パブリックIPv4アドレスが必要です。
違うのは、外部から接続を開始できるかどうかです。パブリックサブネットのインスタンスには、セキュリティグループなどで許可すれば、外部から直接接続できます。プライベートサブネットのインスタンスには、外部から直接接続できません。
セキュリティグループとネットワークACLの違い
VPCの中で通信を制限する仕組みには、セキュリティグループとネットワークACLの2つがあります。ファイアウォールが通信を制限する一般的な仕組みは、ファイアウォールの記事にまとめています。2つの違いは、次の表のとおりです。
| 特性 | セキュリティグループ | ネットワークACL |
|---|---|---|
| 効く範囲 | インスタンス単位 | サブネット単位 |
| 対象 | 関連付けたインスタンスすべて | 関連付けたサブネット内のすべてのインスタンス |
| ルールの種類 | 許可のみ | 許可と拒否の両方 |
| ルールの評価 | すべてのルールを確認してから許可を判断 | 番号の順に確認し、一致したルールで決定 |
| 戻りの通信 | 自動的に許可(ステートフル) | 明示的に許可が必要(ステートレス) |
サブネットを作ると、最初はVPCのデフォルトのネットワークACLに自動で関連付けられます。デフォルトのネットワークACLは、すべての通信を許可する設定になっています。AWS公式ドキュメントが勧めるのは、セキュリティグループを主な制御手段にする使い方です。ネットワークACLは、必要なときに追加の防御として使います。どちらもHTTPの要求の中身は検査しません。中身を検査する方法は、WAFとShieldの記事で説明しています。
VPN・Direct Connectの位置づけ
VPCは、社内のネットワークとつなぐこともできます。AWS公式ドキュメントは、この方法としてAWS Site-to-Site VPNとAWS Direct Connectを挙げています。
Site-to-Site VPNは、VPCと社内ネットワークをつなぎます。VPNの記事で説明したトンネリングと暗号化の技術を使います。Direct Connectは、社内のネットワークとAWSを専用の回線でつなぐ方法です。インターネットを経由しません。どちらも、VPCを社内ネットワークの延長として使うための選択肢です。2つの経路と暗号化の違いは、Direct Connectの記事で比べています。
参考にした資料
- AWS「What is Amazon VPC?」(VPC・サブネット・ルーティング・ゲートウェイの定義、デフォルトVPC)
- AWS「Subnets for your VPC」(AZの制約、サブネットの種類とルートテーブルの関係、ネットワークACLとの関連付け)
- AWS「Enable internet access for a VPC using an internet gateway」(IGWの定義、デフォルトVPCとの比較表)
- AWS「NAT gateways」(NAT GWの定義・設置場所・アドレスの書き換え)
- AWS「Regional NAT gateways for automatic multi-AZ expansion」(リージョナルNAT GW)
- AWS「Infrastructure security in Amazon VPC」(セキュリティグループとネットワークACLの比較表、VPN・Direct Connect)
- AWS「What is Direct Connect?」(Direct Connectの定義)
練習問題(全5問)
正解:AWSの
AWS公式ドキュメントは、
正解:
AWS公式ドキュメントは
正解:サブネットに
AWS公式ドキュメントは
正解:NATゲートウェイを
AWS公式ドキュメントは
正解:セキュリティグループは
AWS公式ドキュメントの
選んでから「採点する」を押すと、解説つきで答え合わせができます。