VPCとは
VPCとは、Virtual Private Cloudの略で、AWS上でユーザーが自分専用の仮想ネットワーク環境を構築できるサービスである。
このVPCを使用すると何が嬉しいかというと、
- AWSリソースをVPCに配置することで利用することができるようになる
- 現在、VPCをそもそも必要としないAWSリソース以外は全てVPC上に配置される必要がある
- 自分専用の仮想ネットワーク環境を構築できるため、他のAWSアカウントやインターネットからアクセスされない、安全なネットワークを用意することができる
- また、追加でVPCの様々な機能を使用することで、他からのアクセスをこちら側で制御することができる
という点である。
VPCの作成
VPCは特定のRegion全体に作成される。つまり、複数のAvailability Zoneをまたいで作成され、VPCを特定のAZに絞ることはできない。
VPCの作成時には、IPv4 CIDR ブロックを決めることになる。(IPv6もあるが省略)
ここで設定するIPv4 CIDR ブロックはプライベートIPアドレスの範囲にある必要があり、以下の3つのクラスのいずれかに属する必要がある。
-
10.0.0.0/8
(10.0.0.0 〜 10.255.255.255) -
172.16.0.0/12
(172.16.0.0 〜 172.31.255.255) -
192.168.0.0/16
(192.168.0.0 〜 192.168.255.255)
より大きなCIDRブロック(/16など)は多くのIPアドレスを持つが、過剰なサイズは無駄になることがあるので注意する必要がある。
構成要素
サブネット
VPCの中をさらに分けたネットワークのことをサブネットを呼び、これはAZ単位に作成される。
サブネットにはIPアドレスの範囲が割り振られ、その範囲内でサブネット内のリソースにIPアドレスが割り当てられる。
サブネットには2種類存在する。
-
パブリックサブネット
- 外部との接続を想定したサブネット
-
プライベートサブネット
- リソースやデータを外部アクセスから保護するためのサブネット
インターネットゲートウェイ
VPCとインターネットが通信する際には、このインターネットゲートウェイを通じてやり取りされる。
NATゲートウェイ
NATゲートウェイはプライベートサブネット内でインターネットへの通信を行いたい場合にパブリックサブネットへ設置する、中継用のゲートウェイである。
NATゲートウェイは単方向通信であり、インターネットからプライベートサブネットへの通信は許可されていない。
プライベートサブネット内のリソースがNATゲートウェイを通ることで、パブリックサブネット内でプライベートIPアドレスが、NATゲートウェイに割り当てられたElastic IPへ変換され、インターネットゲートウェイを通じて、インターネットとの通信が行われる。
VPCピアリング接続
VPCピアリング接続は独立した2つのVPCを接続し、プライベートアドレスを使って相互に通信する。
ここで、接続する2つのVPCは同じリージョンにある必要がある。リージョンを跨いで通信する場合は、インターリージョンVPCを使用する。
VPCエンドポイント
VPCエンドポイントは、AWSのマネージドサービスとアクセスする際に使用する。
VPCエンドポイントを使用することで、VPC外にあるAWSのマネージドサービスとインターネットを介さずにアクセスができるようになります。
VPCのアクセス制御
ルートテーブル
VPC内の通信では、指定されたCIDR表記のアドレスで通信をルーティングするルールセットを定義する必要があり、これをルートテーブルと呼ぶ。
ルートテーブルではサブネット全体のトラフィックの経路および送信先を定義する。
例えば、サブネット内にあるEC2インスタンスにより外部APIが呼ばれたとした時、このサブネットのルートテーブルにサブネットからインターネットゲートウェイのルートが登録されていない場合はリクエストが失敗する、のである。
インターネットゲートウェイへのルートが登録されていないサブネットがプライベートサブネットということになる。
セキュリティグループ
セキュリティグループは、アクセスを許可するソースやプロトコル、ポートのルール定義を作成し、EC2やRDSなどのAWSリソースに関連づけることで、ファイアウォールとして動作させることができる。
ルートテーブルはサブネット全体リソースに対してトラフィックが送信先に到達できるかを定義したもので、セキュリティグループは個別のリソースに対してそのリソースの通信を許可・制御する。
ネットワークACL
ネットワークACLはサブネットに関連づけられ、受信と送信の両方をサブネットレベルで制御することができる。
関連づけられたすべてのサブネットに適用されるため、セキュリティグループよりも広範囲な制御が可能である。
ただし、セキュリティグループとは異なり、通信の状態を記録せず(ステートレスに)動作するため、応答通信にも許可が必要になる。