【AWSユーザーガイド非公式解説】[VPC]1.Amazon VPC の仕組み
この記事はAWSユーザーガイドの以下リンクの解説記事です。
Amazon Virtual Private Cloud (Amazon VPC) を使用すると、論理的に隔離されている定義済みの仮想ネットワーク内で AWS リソースを起動できます。
いきなり難解な文章でVPCの説明が始まります。
文末に「AWSリソースを起動」とあります。AWSリソースというと幅広いですが、ここではVPC内に配置する以下のようなリソースのことです。
- EC2
- RDS
- ECS Fargate
それらのリソースを「論理的に隔離されている定義済みの仮想ネットワーク内」で起動できるようにするのがVPCです。論理的に隔離されている定義済みの仮想ネットワークとはなにか?
VPCを作成するときの画面をみるとVPCを作成する時に最低限必要なのは「名前」と「IPv4 CIDRブロック」のみだということがわかります。
次の図はデフォルトVPC関連のリソースを視覚的に表現したリソースマップです。
VPCに6つのサブネットがあり、それらのサブネットは一つのルートテーブルに紐付けられ、ルートテーブルとネットワーク接続(この場合インターネットゲートウェイが紐付けられているのがわかります。
サブネット、ルートテーブル、ネットワーク接続(ゲートウェイ等)は、仮想ネットワークを構成する基本要素です。
VPC とサブネット
IPv4 CIDRアドレス範囲を指定しただけのVPCは他のネットワークから切り離された仮想ネットワークであり、そのままではVPCの外部と通信ができません。
- サブネット
- ルートテーブル
- ゲートウェイ
- セキュリティグループ
等を組み合わせることにより外部との通信を行います。
冒頭の引用文で「VPC内でリソースを起動」とありますが、EC2等のサービスをVPCで直接起動することはできません。必ずサブネットを作成し、サブネット内でEC2等のサービスを起動する形になります。
VPCという一つの仮想ネットワーク内に複数のサブネット(内部仮想ネットワーク)を作成し、各々のサブネットに対してセキュリティ設定を実施することによって、ゾーニングのような使い方ができます。一般的な例でいうと、インターネットと通信を行うWEBサーバと、内部通信のみのDBサーバを別のサブネットに配置し、WEBサーバを配置したサブネットのみインターネット通信を許可し、DBサーバに対するインターネット通信を制限するような使い方です。
サブネットにはVPCに設定したIPv4 CIDRアドレス範囲内でIPv4 CIDRアドレス範囲を割り当てます。VPCに割り当てたIPv4 CIDRアドレス範囲が「10.0.0.0/16」である場合、サブネットには「/17〜/28」のIPv4 CIDRアドレス範囲を割り当てます。VPCと同じ「10.0.0.0/16」をサブネットに割り当てることも可能ですが、その場合他のサブネットを作成できなくなるため、通常は使用しません。
サブネットに、VPCの外部への経路設定を行うルートテーブル、VPCの外部への接続点となるゲートウェイ、ポートのセキュリティ制御を行うセキュリティグループを紐付け、ルーティング設定を行うことにより、外部との通信が可能になります。
デフォルトの VPC とデフォルト以外の VPC
アカウントにはあらかじめ各リージョンにデフォルトの VPC、デフォルトのサブネット等が作成されています。それらは(どちらかというと初心者向けに)環境作成の手間を減らすために作成されており、必要に応じて削除・修正して使用します。
ルートテーブル
ルートテーブルは、VPC からのネットワークトラフィックの経路を決めるために使用される一連のルール (ルートと呼ばれます) で構成されます。サブネットを特定のルートテーブルに明示的に関連付けることができます。それ以外の場合、サブネットはメインルートテーブルに暗黙的に関連付けられます。
ルートテーブルは、VPCと外部とのネットワークトラフィックを制御するための機能です。
ルートテーブルには IP アドレスの範囲 (宛先) と、トラフィックを送信するターゲット(ゲートウェイ、ネットワークインターフェイス等)を設定します。
サブネットには必ず一つのルートテーブルが紐付けられます。
VPCにはあらかじめ、ルートテーブルが用意されており、メインルートテーブルとして設定されています。
メインルートテーブルは削除できませんが、別のルートテーブルを作成し、メインルートテーブルとすることが可能です。
サブネットにはメインルートテーブルが紐付けられて作成されます。サブネットに紐づくルートテーブルは後から変更可能です。
デフォルトVPCのメインルートテーブルでは、VPC内部(172.31.0.0/16)の通信はlocalとして
それ以外の通信はインターネット宛としてインターネットゲーウェイにルートが設定されています。
インターネットへのアクセス
VPC 内に起動するインスタンスが VPC 外のリソースにどのようにアクセスするかをコントロールします。
先ほどのリソースマップではデフォルトVPC内のサブネットにはインターネットゲートウェイが紐付けられていました。
AWSではインターネットゲートウェイを紐付けたサブネットをパブリックサブネットとして扱います。
デフォルトVPCでは、パブリックIPv4アドレスを自動で割り当てる設定になっており、インスタンスを起動するとインターネットゲートウェイを介して、インターネットと通信できます。
(実際に通信を行うには、通信を行うポートに対するセキュリティグループの設定が必要です。)
インターネットゲートウェイが紐付けられていても、インスタンスにパブリック IPv4アドレスが割り当てられていなければインターネットとの通信はできません。
インスタンスに対するインバウンドの通信を拒否し、アウトバウンド通信のみを行いたい場合は、NATデバイス(NATゲートウェイまたはNATインスタンス)を使用します。NATデバイスを使用することによって、NATデバイスにパブリックIPv4アドレスを割り当てNATデバイスでIPアドレス変換を行うことにより、インスタンスはプライベートIPv4アドレスのまま、インターネットへのアウトバウンド通信が行えます。
IPv6を使用する場合も同様にインターネットゲートウェイ経由でインターネットとの通信を行います。
但し、インスタンスに対するインバウンドの通信を拒否し、アウトバウンド通信のみを行いたい場合は、NATデバイスは使用しません。
IPv6にはプライベートIPアドレスという概念がなく、割り当てたIPv6アドレスでそのままインターネット通信を行えるため、IPアドレス変換の必要がありません。
その場合は、インターネットゲートウェイは使用せず、Egress-only インターネットゲートウェイを使用します。
企業ネットワークまたはホームネットワークにアクセスする
自社等のオンプレミスのデータセンターと接続する場合は、IPsec AWS Site-to-Site VPN 接続を利用して暗号化通信が可能です。
オンプレミス機器のIPアドレス等を設定したカスタマーゲートウェイを作成し、カスタマーゲートウェイとVPCを接続します。
VPCと1対1で接続する場合は、仮想プライベートゲートウェイを作成しVPCに紐付けます。
複数のVPCと接続する場合は、Transit Gatewayを使用します。
VPC とネットワークの接続
VPCとVPCを接続する方法は2種類あります。
VPCピアリングを使用すると1対1のVPC間の通信ができます。
3つ以上のVPCを接続する場合はTransit Gatewayを使用します。Transit GatewayではVPC間だけでなく、オンプレミスのデータセンターとの接続を行う仮想ルータとして機能します。
Discussion