📖

Amazon VPC とは? (学習メモ)

8 min read

Amazon VPC の学習メモ。随時更新。

用語

  • VPC コンポーネント(ネットワーキングコンポーネント):

VPC コンポーネント(ネットワーキングコンポーネント

VPC で利用できるコンポーネント。

ネットワークを構築するために利用する。

Amazon VPC(Virtual Private Cloud)とは?

論理的に分離された(ユーザー毎に隔離された)AWS アカウント専用の仮想ネットワークのこと。

または、その仮想ネットワークを作成するサービスのこと。

AWS 上に専用のネットワークを構築することでき、作成した VPC 内では、Amazon EC2 インスタンスなどの AWS リソースを配置できる。

Amazon VPC を利用する上で理解しておいた方が良い概念

  • VPC
  • サブネット
  • ルートテーブル
  • IGW(Internet Gate Way)
  • NAT ゲートウェイ
  • ネットワーク ACL
  • VPC エンドポイント

VPC

前述の通り、VPC は AWS アカウント専用の仮想ネットワークのこと。

VPC を作成するときに、その VPC に対して以下のような IPv4 アドレスの範囲を CIDR ブロック形式で指定する必要がある。

10.0.0.0/16

VPC はリージョン単位で作成するが、同じリージョンの AZ の全てに及ぶ(AZ を全てまたぐ)。

以下は東京リージョンで VPC を作成した場合のイメージ図。

IP アドレス範囲をどのように指定すれば良いのか理解するために、IP アドレスに関して少し掘り下げていく。

IP アドレスとは?

TCP/IP では通信先を特定するために「IP アドレス」を用いている。

IP アドレスはネットワーク上で重複しない唯一無二の番号であり、いわゆる「住所」に相当するもの。

IP アドレスの構成

IP アドレスは 32 ビットで構成されるが、見やすくするために10進数に変換し、「.」で区切って表記する。

例えば、10101100 00010000 00000000 00001010を10進数に変換し、「.」で区切って表記すると172.16.0.10になる。

それぞれの「.」で区切られた数字は0~255なので、IP アドレスの範囲は0.0.0.0255.255.255.255までとなる。

そのため、IP アドレスは0.0.0.0255.255.255.255の範囲で定める必要がある。

とは言ってもこちらで好き勝手に IP アドレスを決められるわけではない。

パブリック IP アドレス(グローバル IP アドレス)とプライベート IP アドレス

インターネットに接続する際に用いる IP アドレスのことを「パブリック IP アドレス」という。

パブリック IP アドレスは重複してはいけないため、プロバイダーやサーバ事業者から貸し出されるものを利用することになる。

一方で、インターネットで利用されない IP アドレスもあり、それを「プライベート IP アドレス」という。

プライベートな IP アドレスの範囲は以下の通り。

IP アドレス範囲
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

オフィス内や家庭内など、限定的なエリアで利用する。

IP アドレス範囲と表記方法

今回の VPC のように、ネットワークを構築する際には、まずそのネットワーク内で利用する IP アドレスの範囲を定める。

IP アドレスの範囲は自由に区切ることはできず、「2 の n 乗で区切る」という決まりがある。

つまり、「4 個」、「8 個」、`16 個」、「32 個」、「64 個」〜「65536 個」といった単位で区切る。

一般によく利用されるのは「256 個」と「65536 個」である。

例えば、以下の IP アドレスの範囲は 256 個で区切った一例。

192.168.1.0192.168.1.255

以下の IP アドレスの範囲は 65536 個で区切った一例。

192.168.0.0192.168.255.255

IP アドレスは前半の部分を「ネットワーク部」、後半の部分を「ホスト部」と言う。

192.168.0.0192.168.255.255のように範囲を区切ったネットワークの場合、192.168192.168のように、IP アドレスの範囲が変わっても値が変わらない箇所がネットワーク部であり、0.0255.255のように IP アドレスの範囲が変わると値も変わる箇所がホスト部である。

そのため、ネットワーク部は同じネットワークに属する限りは同じ値。ホスト部がそのネットワークに存在するサーバーやクライアント、ネットワーク機器によって異なる値になる。

CIDR(Classles Inter Domain Routing) 表記

前述の通り192.168.1.0192.168.1.255192.168.0.0192.168.255.255などの表記が長い。

そのため、IP アドレスの範囲を表現する時は、「CIDR 表記」などの表記が用いられる。

CIDR 表記を用いると以下のような表記になる。

  • 192.168.1.0192.168.1.255192.168.1.0/24(ネットワーク部のビット長が 24 なので /24。このビット長をプレフィックスと言う)
  • 192.168.0.0192.168.255.255192.168.1.0/16(ネットワーク部のビット長が 16 なので /16)

前述の通り、アドレスの範囲を CIDR ブロック形式で指定する必要がある。

結局、VPC の IP アドレスの範囲はどのように指定すれば良いのか

プライベート IP アドレス範囲から指定することが推奨されているらしいので、以下の範囲から指定する。

IP アドレス範囲
10.0.0.0 ~ 10.255.255.255
172.16.0.0 ~ 172.31.255.255
192.168.0.0 ~ 192.168.255.255

また、CIDR は、/16 から/28 の範囲で指定する。最低でも/28 以上は必要らしい。

そのため、10.0.0.0/16のような IP アドレス範囲を指定する。

サブネット

サブネットは VPC を分割したネットワークのこと。

作成したサブネットに AWS リソースを配置する。

また、サブネットは複数作成することができ、それぞれネットワークを分けることができる。

そのため、利用用途を分けたりセキュリティ上の理由で複数のサブネットを作成する機会は多い。

サブネットの作成(分割)

サブネットは VPC を分割したネットワークなので、VPC の IP アドレスの範囲を指定したサブネットを作成する。

また、VPC と同様で、サブネットも CIDR ブロック形式で指定する。

10.0.0.0/16の VPC の場合、以下のようなサブネットを作成できる。

  • 10.0.1.0/2410.0.1.0 ~ 10.0.1.255
  • 10.0.2.0/2410.0.2.0 ~ 10.0.2.255

パブリックサブネット

IGW へのルートが含まれているルートテーブルに関連付けられているサブネット。

つまり、インターネットとの通信ができるサブネット。

パブリックサブネットには、WEB サーバーのようにインターネットと通信するためのサーバーを設置する。

プライベートサブネット

IGW へのルートが含まれているルートテーブルに関連付けられていないサブネット。

つまり、インターネットから隔離されたサブネット。

プライベートサブネットには、DB サーバーのように直接インターネットと通信する必要のないサーバーを設置する。

ルートテーブル

サブネットをインターネットや他のサブネットと通信させるためには、IGW へのルートが含まれているルートテーブルを作成し、サブネットをそれにアタッチ(関連付け)する必要がある。

ルートテーブルはネットワークトラフィックの経路を判断する際に使用される、ルートと呼ばれる一連のルールのこと。

より簡潔に言えば、「宛先 IP アドレスの値がいくつの時には、どのネットワークにパケット流すべきか」という設定のこと。

ルートテーブルの書式

VPC を作成した直後は、デフォルトのルートテーブルが作られる。

そして、サブネットを作成時はそのデフォルトのルートテーブルが適用される。

デフォルトのルートテーブルは以下の項目が設定されている。

送信先 ターゲット
10.0.0.0/16 local

送信先: 宛先アドレス、ディスティネーション(distination)
ターゲット: 渡すべきネットワーク先

これは VPC の10.0.0.0/16に含まれる IP アドレス宛のパケットであれば、ローカル(VPC 領域のルーター)にパケットを転送するという意味(ネットワークの世界では自分が所属しているネットワークのことを慣習的に「ローカル」や「ローカルネットワーク」と呼ぶ) 。

10.0.0.0/16に含まれる IP アドレス宛のパケットはローカル宛のパケットなので、VPC 領域のルーターに接続されている相手からの通信となる。

このルートテーブルにはこの設定しかないため、10.0.0.0/16範囲外の宛先のパケットは全て破棄される。

デフォルトゲートウェイをインターネットに向けて設定する

上記のルートテーブルの場合、10.0.0.0/16範囲外の宛先のパケットは全て破棄される状態である。

そのため、このルートテーブルにサブネットをアタッチしても、サブネットはインターネットに接続できない。

インターネットと通信できるようにするためには、10.0.0.0/16範囲外の宛先のパケットをインターネットゲートウェイに転送するようにルートテーブルを変更する。

具体的には0.0.0.0/0の範囲の宛先のパケットは、インターネットゲートウェイに転送する」という設定をルートテーブルに追加する。

0.0.0.0/0は全ての IP アドレス範囲を示している。

つまり、0.0.0.0/0に対するターゲットの設定」は「転送先が何も設定されていないときのデフォルトの転送先」を示す。

このデフォルトの転送先を「デフォルトゲートウェイ」と呼ぶ。

以下のように、デフォルトゲートウェイに IGW を指定し、このルートテーブルにサブネットをアタッチすることで、サブネットはインターネットに接続できる。

送信先 ターゲット
10.0.0.0/16 local
10.0.0.0/0 igw-id(作成した IGW の名前を指定)

上記のルートテーブルにアタッチされたサブネットはパブリックサブネットとなる。

IGW(Internet Gate Way)

IGW(Internet Gate Way) は VPC とインターネットを接続するためのゲートウェイ。

以下のような作業をすることで、VPC のパブリックサブネットがインターネットに接続される。

  1. IGW を作成。
  2. IGW を VPC にアタッチする。
  3. ルートテーブルを作成し、10.0.0.0/0(デフォルトゲートウェイ)の転送先に IGW を指定する。
  4. 作成したルートテーブルにサブネットをアタッチする。
  5. アタッチされたサブネット(パブリックサブネット)とインターネットが接続される。

NAT ゲートウェイ

マネージド型の NAT(Network Address Translation)サービスであり、プライベートサブネットにあるリソースからインターネットへ接続するために利用する。

NAT とは、内部だけで通用するアドレスを外部とも通信できるアドレスに変換する技術であり、NAT を導入することで「片方向だけの接続を許す」ことが実現できる。

つまり、DB サーバー(プライベートサブネットにあるリソース)からはインターネットに接続できるが、インターネットから DB サーバーには接続できないといった環境を実現できる。

ネットワーク ACL(Access Control List)

サブネットのインバウンドトラフィックとアウトバウンドトラフィックを制御するファイアウォールとして動作するオプションレイヤー。

ネットワーク ACL のルール

デフォルトで指定されるネットワーク ACL のルールは以下の通り。

ルール番号 タイプ プロトコル ポート範囲 送信元 許可/拒否
100 All IPv4 traffic すべて すべて 0.0.0.0/0 許可
* All IPv4 traffic すべて すべて 0.0.0.0/0 拒否

それぞれの項目の詳細は以下のとおり。

  • ルール番号
  • タイプ
  • プロトコル
  • ポート範囲
  • ソース(インバウンドルールのみ)
  • 送信先(アウトバウンドルールのみ)

ルール番号

最も低い番号のルールから評価される。

例えば、99 と 100 のルール番号がある場合、99 が先に評価される。

あるトラフィックが、99 のルールと 100 のルールに一致する場合、99 のルールでトラフィックが許可(もしくは拒否)される。

「*」を指定した場合、全てのルールに当てはまらない時に「*」を指定したルールが適応される。

タイプ

トラフィックのタイプ (SSH や HTTP など)。

プロトコル

標準のプロトコル番号を持つ任意のプロトコルを指定できる。

ポート範囲

トラフィックのリスニングポートまたはポート範囲。

タイプに HTTP を指定した場合、80 になる。

ソース(インバウンドルールのみ)

トラフィックの送信元 (CIDR 範囲)。

送信先(アウトバウンドルールのみ)

トラフィックの送信先 (CIDR 範囲)。

許可/拒否

指定されたトラフィックを許可するか拒否するかを指定する。

VPC エンドポイント

VPC から AWS でホストされたサービスへのプライベート接続ができる VPC コンポーネント。

インターネットゲートウェイ、NAT デバイス(NAT ゲートウェイなど)、ファイアウォールプロキシを利用せずに、VPC から AWS でホストされたサービスへのプライベート接続ができる。

VPC エンドポイントのタイプ

VPC エンドポイントには、以下のタイプのエンドポイントがある。

  • インターフェイスエンドポイント
  • ゲートウェイエンドポイント
  • Gateway Load Balancer エンドポイント

インターフェイスエンドポイント

ゲートウェイエンドポイント

VPC と S3 または DynamoDB を接続するためのゲートウェイ。

マネジメントコンソールなどで、以下の操作をすると

  1. ゲートウェイエンドポイントを作成する
  2. 作成したゲートウェイエンドポイントをルートテーブルに追加する

ルートテーブルに以下のようなルートが追加される。

送信先 ターゲット
pl-61a54988 vpce-0e52d17045841a76b
  • 送信先: ゲートウェイエンドポイントの ID
  • ターゲット: 作成したゲートウェイエンドポイント

このルートテーブルをプライベートサブネットにアタッチすると、プライベートサブネットの EC2 などから S3 などにアクセスができるようになる。

Gateway Load Balancer エンドポイント

Discussion

ログインするとコメントできます