コンテンツにスキップ

Amazon VPC@AWS リソース

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. Amazon VPC とは:Virtual Private Cloud

クラウドプライベートネットワークとして働く。

プライベート IP アドレスが割り当てられた、Amazon VPC と呼ばれるプライベートネットワーク (L3) を仮想的に作成できる。

異なる AZ に渡って EC2 を立ちあげることによって、クラウドサーバーをデュアル化できる。

EKS の場合、Amazon VPC (L3) 上に Amazon VPC CNI を配置することにより、クラスターネットワークを作成できる。

Amazon VPC が提供できるネットワークの範囲


Amazon VPC 内の IP アドレス

▼ IP アドレスの種類

IP アドレスの種類 手動/自動 グローバル/プライベート 特徴 説明
パブリック IP アドレス 自動 グローバル 動的 IP アドレス 動的な IP アドレスのため、インスタンスを再作成すると変化する。
プライベート IP アドレス 手動/自動 プライベート 動的 IP アドレス 動的な IP アドレスのため、インスタンスを再作成すると変化する。
Elastic IP 手動 グローバル 静的 IP アドレス 静的な IP アドレスのため、インスタンスを再作成しても保持される。

▼ DNS 名の割り当て

Amazon VPC 内で作成されたインスタンスにはパブリック IP アドレスが自動的に割り当てられるが、IP アドレスにマッピングされた DNS 名を持たない。

enableDnsHostnames オプションと enableDnsSupport オプションと有効化すると、インスタンスに DNS 名が割り当てられるようになる。

▼ 紐付け

紐付け名 補足
EC2 との紐付け 非推奨の方法である。
- https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#vpc-eip-overview
ENI との紐付け 推奨の方法である。
- https://docs.aws.amazon.com/vpc/latest/userguide/vpc-eips.html#vpc-eip-overview


02. Amazon VPC サブネット

Amazon VPC サブネットとは

クラウドプライベートネットワークのセグメントとして働く。


サブネットの種類

▼ パブリックサブネットとは

LAN 内の非武装地帯に相当する。

▼ プライベートサブネットとは

LAN 内の内部ネットワークに相当する。

サブネット外からのインバンド通信を受け付けないようするために、ALB のルーティング先にサブネットを設定しないようにすれば、そのサブネットはプライベートサブネットとして動作する。

ただし、サブネット内からサブネット外へのリクエストは許可しても問題なく、その場合はルートテーブルに AWS NAT Gateway を設定する必要がある。

public-subnet_private-subnet


03. Network ACL:Network Access Control List

Network ACL とは

サブネットのクラウドパケットフィルタリング型ファイアウォール (L2L4 を防御) として働く。

ルートテーブルとサブネットの間に配置され、ルートテーブルよりも先に評価される。

双方向のインバウンドルールとアウトバウンドルールを決める。

network-acl


ACL ルール

ルールは上から順に適用される。

例えば、ルールが以下だったとする。

ルール 100 が最初に適用され、サブネットへの全送信元 IP アドレス (0.0.0.0/0) を許可していることになる。

インバウンドルール番号 タイプ プロトコル ポート範囲 送信元 許可/拒否
100 すべてのトラフィック すべて すべて 0.0.0.0/0 ALLOW
* すべてのトラフィック すべて すべて 0.0.0.0/0 DENY
アウトバウンドルール番号 タイプ プロトコル ポート範囲 宛先 許可/拒否
100 すべてのトラフィック すべて すべて 0.0.0.0/0 ALLOW
* すべてのトラフィック すべて すべて 0.0.0.0/0 DENY


04. ルートテーブル

ルートテーブルとは

クラウドルーターのマッピングテーブルとして働く。

サブネットに紐付けることにより、サブネット内からサブネット外に出るリクエストのルーティングを制御する。

注意点として、Network ACL よりも後に評価される。

Destination (宛先の IP の範囲) Target
*.*.*.*/* Destination の範囲内だった場合の宛先


ルートテーブルの種類

▼ メインルートテーブル

Amazon VPC の作成時に自動的に作成される。

どのルートテーブルにも紐付けられていないサブネットのルーティングを設定する。

▼ カスタムルートテーブル

特定のサブネットのルーティングを設定する。


05. Amazon VPC エンドポイント

Amazon VPC エンドポイントとは

Amazon VPC のプライベートサブネット内のリソースが、Amazon VPC 外 (例:Amazon VPC 外 AWS リソース、他の Amazon VPC、AWS マーケットプレイスの外部サービス) に対して、リクエストを実行できるようにする。

Gateway 型と Interface 型がある。

Amazon VPC エンドポイントを使用しない場合、プライベートサブネット内からのリクエストには、Internet Gateway と AWS NAT Gateway を使用する必要がある。

Amazon VPC エンドポイント


Amazon VPC エンドポイントと AWS NAT Gateway の料金比較

AWS NAT Gateway の代わりに Amazon VPC エンドポイントを使用すると、料金が少しだけ安くなる。また、Amazon VPC 外 AWS リソースとの通信がより安全になる。


エンドポイントタイプ

▼ Interface 型

サービス名は、『プライベートリンク』ともいう。

実体はプライベート IP アドレスを持つ ENI であり、ENI が AWS リソースからリクエストを受信する。

もし、このプライベート IP アドレスにプライベート DNS を紐付ける場合は、Amazon VPC の enableDnsHostnames オプションと enableDnsSupport オプションを有効化する必要がある。

*リソース例*

Amazon S3、DynamoDB 以外のすべてのリソース

▼ Gateway 型

ルートテーブルの定義に従う。

実体は Amazon VPC エンドポイントであり、Amazon VPC エンドポイントが AWS リソースからリクエストを受信する。

*リソース例*

Amazon S3、DynamoDB のみ


06. Internet Gateway

Internet Gateway とは

NAT 処理 (DNAT、SNAT) を実行し、パブリック IP アドレス (Amazon VPC 外の IP アドレス) とプライベート IP アドレス (Amazon VPC 内の IP アドレス) を相互変換する。

1 個のパブリック IP に対して、1 個のプライベート IP を紐付けられる。

つまり、Amazon VPC 内の複数のインスタンスからのリクエストを、複数のパブリック IP アドレスで送信する。

internet-gateway_nat-gateway


DNAT 処理

Internet Gateway の DNAT 処理では、Amazon VPC 外からリクエストを受信し、その送信元 IP アドレスをプライベート IP アドレスに変換する。

AWS NAT Gateway からのリクエストであれば、送信元 IP アドレスを AWS NAT Gateway の Elastic IP アドレスに変換する。

一方で、宛先 IP アドレスや宛先ポート番号は変換しない。


SNAT 処理

Internet Gateway の SNAT 処理では、Amazon VPC 内からリクエストを受信し、その送信元 IP アドレスをパブリック IP アドレスに変換する。

一方で、宛先 IP アドレスや宛先ポート番号は変換しない。

internet-gateway_nat-gateway_snat


06-02. AWS NAT Gateway

AWS NAT Gateway とは

SNAT 処理 (SNAT 処理のみで、DNAT 処理は持たない) を実行し、受信したリクエストの送信元 IP アドレスをプライベート IP アドレス (Amazon VPC 内の IP アドレス) に変換する。

また、Internet Gateway を使用して、このプライベート IP アドレスをパブリック IP アドレスに変換する。

1 個のパブリック IP に対して、複数のプライベート IP を紐付けられる。

このときのパブリック IP は、Elastic IP である。

つまり、Amazon VPC 内の複数のインスタンスからのリクエストを、1 個のパブリック IP アドレスで送信する。

そのため、送信元はこのパブリック IP アドレスになる。

internet-gateway_nat-gateway


SNAT 処理

AWS NAT Gateway の SNAT 処理では、プライベートサブネットからリクエストを受信し、その送信元 IP アドレスをプライベート IP アドレスに変換する。

また、Internet Gateway を使用して、このプライベート IP アドレスをパブリック IP アドレスに変換する。

一方で、宛先 IP アドレスや宛先ポート番号は変換しない。

internet-gateway_nat-gateway_snat


06-03. NAT Amazon EC2 インスタンス

NAT Amazon EC2 インスタンスとは

専用の AMI から作成した EC2 で、NAT 処理 (SNAT 処理のみで、DNAT 処理は持たない) を持つ。


07. Amazon VPC 間、Amazon VPC-オンプレミス間の通信

Amazon VPC ピアリング接続

異なる Amazon VPC のネットワークを接続する。

Amazon VPC ピアリング接続

▼ Amazon VPC ピアリング接続とは

『一対一』の関係で、『異なる Amazon VPC 間』の双方向通信を可能にする。

▼ Amazon VPC ピアリング接続の可否

Amazon VPC に複数の IPv4 CIDR ブロック ブロックがあり、1 つでも 同じ CIDR ブロック ブロックがある場合は、Amazon VPC ピアリング接続はできない。

アカウント Amazon VPC のあるリージョン Amazon VPC 内の CIDR ブロック 接続の可否
同じ/異なる 同じ/異なる すべて異なる ⭕️
同じものが 1 つでもある

Amazon VPC ピアリング接続不可の場合-1

たとえ、IPv6 が異なっていても、同様である。

Amazon VPC ピアリング接続不可の場合-2


Amazon VPC エンドポイントサービス

▼ Amazon VPC エンドポイントサービスとは

Amazon VPC エンドポイントとは異なる能力なので注意する。

Interface 型の Amazon VPC エンドポイント (プライベートリンク) を NLB に紐付けることにより、『一対多』の関係で、『異なる Amazon VPC 間』の双方向通信を可能にする。

エンドポイントのサービス名は、『com.amazonaws.vpce.ap-northeast-1.vpce-svc-*****』になる。

Amazon API Gateway の Amazon VPC リンクは、Amazon VPC エンドポイントサービスに相当する。

vpc-endpoint-service


Transit Gateway

▼ Transit Gateway とは

『多対多』の関係で、『異なる Amazon VPC 間』や『Amazon VPC と Direct Connect 間』の双方向通信を可能にする。

クラウドルーターとして働く。

Direct Connect がオンプレミスとの通信機能を持つため、Transit Gateway と Direct Connect を組み合わせれば、Amazon VPC とオンプレミスを接続できる。

transit-gateway

▼ AWS 間

AWS 間の通信の場合、アプリケーションデータを自動的に暗号化する。


Amazon VPC Lattice

Amazon EC2、Amazon ECS、Amazon EKS、AWS Lambda 間を接続する。

vpc-lattice


各サービスの比較

能力 Amazon VPC ピアリング接続 Amazon VPC エンドポイントサービス Transit gateway Amazon VPC Lattice
通信できる Amazon VPC 数 一対一 一対一
一対多
一対一
一対多
多対多
一対一
一対多
多対多
通信できる IP アドレスの種類 IPv4、IPv6 IPv4 IPv4、IPv6 IPv4、IPv6
通信できるリソース 制限なし NLB で L4 ルーティングできる AWS リソースのみ 制限なし ALB で L7 ルーティングできる AWS リソースのみ
(例:EC2、IP アドレス、AWS Lambda、Kubernetes の Pod など)
CIDR ブロックが Amazon VPC 間で被ることによる通信の可否 ×︎ ×︎
クロスアカウント
クロスリージョン ×︎
Amazon VPC 間
Amazon VPC-オンプレミス間 ×︎ ×︎ ×︎


08. Amazon VPC フローログ

Amazon VPC 内の ENI を通過するパケットをキャプチャできる。

version account-id       interface-id  srcaddr           dstaddr         srcport         dstport        protocol   packets    bytes     start            end               action log-status
2       <AWSアカウントID>  eni-<ENIのID>  <送信元IPアドレス>  <宛先IPアドレス> <送信元ポート番号> <宛先ポート番号> <プロトコル> <パケット数> <バイト数> <開始タイムスタンプ> <終了タイムスタンプ> ACCEPT OK
...


09. セキュリティグループ

セキュリティグループとは

アプリケーションのクラウドパケットフィルタリング型ファイアウォール (L2L4 を防御) として働く。

リクエスト (プライベートネットワーク向き通信) では、プロトコルや受信元 IP アドレスを設定できる。

また、リクエスト (パブリックネットワーク向き通信) では、プロトコルや宛先プロトコルを設定できる。


09-02. セットアップ

コンソール画面の場合

リクエストを許可するルールとアウトバウンドルールを設定できる。

特定のセキュリティグループに紐付けられている AWS リソースを見つけたい場合は、ENI でセキュリティグループの ID を検索する。

インスタンス ID や説明文から、いずれの AWS リソースが紐づいているか否かを確認する。


送信元 IP アドレスの指定

▼ セキュリティグループ ID の紐付け

許可する送信元 IP アドレスにセキュリティグループ ID を設定した場合、そのセキュリティグループが紐付けられている ENI と、この ENI に紐付けられたリソースからのトラフィックを許可できる。

リソースの IP アドレスが動的に変化する場合、有効な方法である。

▼ 自己参照

許可する送信元 IP アドレスに、自分自身のセキュリティグループ ID を設定した場合、同じセキュリティグループが紐付けられている同士で通信できるようになる。