はじめに
本稿は、AWSが提供しているAWSサービスのAmazon VPCについて触れていきます。まずは、VPCの主要な機能・サービスについて概要を記載し、その中で今回はネットワークの構成要素である
VPC・サブネット・インターネットゲートウェイ・ルートテーブルについて記載します。
VPCの主要な機能・サービス
VPCの主要な機能・サービスとして以下のものが良く挙げられます。
- VPC(Virtual Private Cloud):AWSアカウント内に専用のネットワークを作成できるプライベート仮想ネットワーク空間です。AWSアカウント内に専用のネットワークを作成でき、このネットワーク内にEC2やRDSなどを配置できます。
- サブネット:VPCで設定したIPアドレスを分割して作成するネットワーク空間です。
- インターネットゲートウェイ(IGW):VPCとインターネットとの間の通信を可能にするVPCコンポーネントです。
- 仮想プライベートゲートウェイ(VGW):オンプレミス等からVPN接続をするためのみに利用可能なVPCコンポーネントです。
- ルートテーブル:VPC内(サブネット内)の通信を振り分けるルーティング情報の一覧です。
- NATゲートウェイ(NAT GW)またはNATインスタンス:NATと呼ばれるIPアドレス変換技術を使い、プライベート仮想ネットワーク空間からインターネット(パブリックな)空間で使えるIPアドレスへ変換して繋げてくれる役割を持つAWSサービスのことです。
- セキュリティグループ(SG):VPC上に構築されるEC2などのインスタンスに対して設置する仮想ファイアウォールです。詳細については、次回以降に触れます。
- ネットワークACL(アクセス制御リスト):上述のサブネットに対して設置する仮想ファイアウォールです。詳細については、次回以降に触れます。
- Elastic IP(EIP):固定されたインターネット(パブリックな)空間で使えるIPアドレスのことです。
- VPCエンドポイント:VPCと他のAWSサービス間の通信を可能にするVPCコンポーネントです。VPCエンドポイントを作成することで、VPC内のインスタンスとVPC外のAWSサービスをプライベートな接続で通信できるようになります。インターネットに接続せずに他のAWSサービスと接続させたいときに使用できます。
インターフェイス型VPCエンドポイントと、ゲートウェイ型VPCエンドポイントの2種類がありますが、詳細は次回以降に触れます。 - VPCピアリング:同じリージョン内、またはリージョンにある2つのVPCを直接接続するAWSのサービスです。
https://docs.aws.amazon.com/ja_jp/vpc/latest/peering/what-is-vpc-peering.html
公式:VPCピア機能とは
- リージョン:東京リージョンや大阪リージョンと言った地域などで、後述のアベイラビリティーゾーンをまとめたもののことです。
- Availability Zone(アベイラビリティーゾーン):リージョンに紐づく1つ以上のデータセンター施設のことです。
VPC(Virtual Private Cloud)
VPCの主要な機能・サービスでも触れましたが、 Amazon VPC(Amazon Web Services Virtual Private Cloud)とは、ユーザー専用のプライベート仮想ネットワーク空間を提供するサービスのことです。VPCはリージョンごとにしか作成できません。アベイラビリティーゾーンはまたぐことが可能です。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html
公式:リージョンとゾーン
以前のクラウドコンピューティングサービスとオンプレミスにて説明しておりますがVPCは、VPC内で動作するAWSリソースを利用する場合、一番最初に必要になるサービスです。利用イメージとしては自分でこれから作ろうとするAWSリソースを配置できる囲いを自分のAWSアカウントの中のリージョンのネットワーク内に作ってあげるイメージです。このVPCという範囲が自分が自由に変更する事のできるネットワークの最大単位になります。
VPCを使う目的として、AWSリソース(EC2インスタンス、RDSデータベースなど)をプライベートかつインターネットから隔離された環境内で実行することがあります。インターネットから隔離されていることで、自由にVPCの中をカスタマイズできます。
またVPN接続や、AWSの提供するAWS Direct Connectを使って、オンプレミス環境との安全な接続を比較的簡単に実現することもできます。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpn-connections.html
公式:AWS Virtual Private Networkを使用してVPCをリモートネットワークに接続する
VPCのIPアドレス範囲は自分が自由に変更する事のできるネットワークの最大単位ということもあり大きくすることが多いです。これは後述のサブネットをVPCの中につくるためです。また、VPCではCIDR表記の/16~/28の指定範囲で1リージョンあたり
最大5VPCまで作成できます。(クォータの引上げが可能)
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-ip-addressing.html
公式:VPCとサブネットのIPアドレス指定
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/amazon-vpc-limits.html
公式:Amazon VPCクォータ
AWSではこれから説明する項目とデフォルトVPCが用意されています。公式ドキュメントを参照頂いて、自分の利用目的とあっている場合はそちらの利用も視野に入れる事をおススメします。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/default-vpc.html
公式:デフォルトVPC
サブネット
サブネットは、前述のVPCで利用できるIPアドレスの範囲の事です。より細かく書くとVPCの囲いの範囲でネットワークを作り、その中に分割して作る小さなネットワークの事になります。利用用途によってネットワークを別ける目的で作られます。
サブネットのよくあるパターンとして、パブリックサブネットとプライベートサブネットがあります。こちらの公式ドキュメント内のパブリックサブネットおよびプライベートサブネットの項目に詳細な説明が記載されていますので、そちらをご参照ください。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html#vpc-igw-internet-access
公式:インターネットゲートウェイを使用してインターネットに接続する
パブリックサブネットとプライベートサブネットの一般的な使い分けは以下になります。
- パブリックサブネット:APサーバまたはWebサーバなどのインターネットアクセスが必要になるEC2の配置
- プライベートサブネット:EC2インスタンスにDBサーバをインストールしたものやRDSの配置
インターネットアクセスが必要になるものをパブリックサブネットに配置し、特殊な要件がない限り直接インターネットへ出る必要がないデータベースをプライベートサブネットへ配置します。セキュリティを守る意味でもこの構成が一般的に多いです。
もし、特殊な要件にてプライベートサブネットから直接インターネット側に通信する必要がある場合は、NATゲートウェイを使うことで要件を満たせる可能性があります。公式に詳細なユースケースと設定の仕方がありましたので、そちらをご参照ください。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/nat-gateway-scenarios.html
公式:NATゲートウェイのユースケース
また、後述のルートテーブルをサブネットごとに割り当て可能なので、ネットワーク要件に応じたサブネットを構成できます。そして、次回以降に記述するネットワークACL割り当てることで、サブネットごとに通信フィルタリングすることも可能です。
インターネットゲートウェイ(IGW)
VPCとインターネットとの間の通信を可能にするVPCのコンポーネントです。VPCへアタッチすることでVPCとインターネットとの通信を可能にします。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html
公式:インターネットゲートウェイ
ルートテーブル
ルートテーブルとは、VPC内(サブネット内)の通信を振り分けるルーティング情報の一覧です。良く使われるルートテーブルの主な概念は次のとおりです。
- オンプレミス等にてルーティングを変更する場合にも指定する送信先とターゲットの指定:ここで指す送信先とは、トラフィックを送信するIPアドレスの範囲(送信先CIDR)のことです。
たとえば、CIDR 172.16.0.0/12がある外部企業ネットワークなどです。ここで指すターゲットとは、送信先トラフィックの送信に使用するゲートウェイ、ネットワークインターフェイス、または接続(前述のIGWなど)です。 - VPCならではのルートテーブルの関連付け:ルートテーブルとサブネット、インターネットゲートウェイ、または仮想プライベートゲートウェイの間の関連付けをする必要があります。
- メインルートテーブル:VPC作成時に自動的に作成されるルートテーブル。後述のカスタムルートテーブルを設定しないとこのルートテーブルのルールを常に参照します。適用範囲は、そのVPC全体です。
- カスタムルートテーブル:通信の宛先をコントロールする為に自分で変更を加えたルートテーブルです。適用範囲は、サブネットです。
メインルートテーブルは、カスタムルートテーブルと入れ替える事も可能です。
一部引用元:
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Route_Tables.html
公式:ルートテーブルを設定する
例として以下のケースを記述します。
ケース1:インターネット側のルーティングや
VPC内のローカルルーティングを別けたい場合
環境は以下とします。
VPC内にパブリックサブネット、プライベートサブネットが各1ある
状態。IGWを使用している。
そこへ、以下のカスタムルートテーブルを作成します。
カスタムルートテーブル1
- 送信先:VPCにアタッチされたサブネット
- ターゲット:local
カスタムルートテーブル2
- 送信先:VPCにアタッチされたサブネット
ターゲット:local
送信先:0.0.0.0/0
- ターゲット:igw
カスタムルートテーブル1をVPCへアタッチ。このカスタムルートテーブル2をパブリックサブネットへアタッチします。こうすることで、VPC全体のプライベート通信はVPCのプライベート空間のみで解決され、パブリックサブネットの通信のみ、IGWへ抜ける様に設定されます。
ケース1とは別に特殊なケースとしてVGWを使ったVPN通信のルーティングがあります。VGWはVPCにアタッチした時点で、VGWと接続された通信先(たとえばオンプレミス環境)へのルーティング情報を自動的にルーティングテーブルに反映してくれます。VGWを作る時点でVPCの中に作ったサブネットの範囲とVGWと接続された通信先のプライベートサブネットの情報が重複させないことが考慮点としてあります。ここで重複してしまうと、同一なプライベートサブネットがVGWと接続された通信先のネットワークの中とAWSのVPC範囲の中にあるとVGWに判定されて、VGWと接続された通信先とそもそも通信ができない状態になります。
また、VGWを使ったVPN通信をする場合の優先度は以下の通りです。
⓵ロンゲストマッチ(たとえばサブネットで通信先を指定するよりIPアドレスで指定したものを優先する)
➁同じルートであればAWS Direct ConnectとVGWを使ったVPN接続ではAWS Direct Connectを優先する
➂スタティックルートとBGPではスタティックルートを優先する
※AWS Direct Connect:AWSが提供する専用線サービスです。略称として、DXと呼ばれることが多いです。
https://aws.amazon.com/jp/directconnect/
公式:AWS Direct Connect
2023年12月現在で英語のみになりますが、以下に優先度の記載がありますので、そちらもご参照ください。
https://docs.aws.amazon.com/vpn/latest/s2svpn/VPNRoutingTypes.html#vpn-route-priority
公式:Site-to-Site VPN routing options
終わりに
今回はネットワークの構成要素であるVPC・サブネット・インターネットゲートウェイ・ルートテーブルについて記載しました。次回も引き続きAWSサービスのVPCについて記載する予定です。