コンテンツにスキップ

VPC@AWSリソース

はじめに

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


01. VPCとは:Virtual Private Cloud

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

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

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

VPCのパケット通信の仕組みについては、以下のリンクを参考にせよ。

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


VPC内のIPアドレス

▼ IPアドレスの種類

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

▼ DNS名の割り当て

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. VPCサブネット

VPCサブネットとは

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


サブネットの種類

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

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

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

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

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

ただし、サブネット内からサブネット外へのリクエストは許可しても問題なく、その場合はルートテーブルに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の範囲内だった場合の宛先


ルートテーブルの種類

▼ メインルートテーブル

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

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

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

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


05. VPCエンドポイント

VPCエンドポイントとは

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

Gateway型とInterface型がある。

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

VPCエンドポイント


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

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


エンドポイントタイプ

▼ Interface型

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

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

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

*リソース例*

S3、DynamoDB以外の全てのリソース

▼ Gateway型

ルートテーブルにおける定義に従う。

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

*リソース例*

S3、DynamoDBのみ


06. Internet Gateway

Internet Gatewayとは

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

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

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

internet-gateway_nat-gateway


DNAT処理

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

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

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


SNAT処理

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

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

internet-gateway_nat-gateway_snat


06-02. NAT Gateway

NAT Gatewayとは

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

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

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

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

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

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

internet-gateway_nat-gateway


SNAT処理

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

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

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

internet-gateway_nat-gateway_snat


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

NAT EC2インスタンスとは

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


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

VPCピアリング接続

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

VPCピアリング接続

▼ VPCピアリング接続とは

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

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

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

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

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

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

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


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

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

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

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

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

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

vpc-endpoint-service


Transit Gateway

▼ Transit Gatewayとは

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

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

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

transit-gateway

▼ AWS間

AWS間の通信の場合、パケットペイロードを自動的に暗号化する。


VPC Lattice

異なるVPCのネットワークをVPC Latticeサービスネットワークを介して接続する。

vpc-lattice


各サービスの比較

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


08. VPCフローログ

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を設定した場合、同じセキュリティグループが紐付けられている同士で通信できるようになる。