コンテンツにスキップ

AWS VPC@AWSリソース

はじめに

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


01. AWS VPCとは:Virtual Private Cloud

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

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

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

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

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


AWS VPC内のIPアドレス

▼ IPアドレスの種類

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

▼ DNS名の割り当て

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

AWS 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の範囲内だった場合の宛先


ルートテーブルの種類

▼ メインルートテーブル

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

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

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

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


05. AWS VPCエンドポイント

AWS VPCエンドポイントとは

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

Gateway型とInterface型がある。

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

AWS VPCエンドポイント


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

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


エンドポイントタイプ

▼ Interface型

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

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

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

*リソース例*

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

▼ Gateway型

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

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

*リソース例*

S3、DynamoDBのみ


06. Internet Gateway

Internet Gatewayとは

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

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

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

internet-gateway_nat-gateway


DNAT処理

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

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

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


SNAT処理

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

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

internet-gateway_nat-gateway_snat


06-02. AWS NAT Gateway

AWS NAT Gatewayとは

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

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

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

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

つまり、AWS 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 EC2インスタンス

NAT EC2インスタンスとは

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


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

AWS VPCピアリング接続

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

AWS VPCピアリング接続

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

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

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

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

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

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

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

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


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

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

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

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

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

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

vpc-endpoint-service


Transit Gateway

▼ Transit Gatewayとは

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

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

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

transit-gateway

▼ AWS間

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


AWS VPC Lattice

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

vpc-lattice


各サービスの比較

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


08. AWS VPCフローログ

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