AWS VPC@AWSリソース¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. AWS VPCとは:Virtual Private Cloud¶
クラウドプライベートネットワークとして働く。
プライベートIPアドレスが割り当てられた、AWS VPCと呼ばれるプライベートネットワーク (L3
) を仮想的に作成できる。
異なるAZに渡ってEC2を立ち上げることによって、クラウドサーバーをデュアル化できる。
EKSの場合、AWS VPC (L3
) 上にAWS VPC CNIを配置することにより、クラスターネットワークを作成できる。
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を設定する必要がある。
03. Network ACL:Network Access Control List¶
Network ACLとは¶
サブネットのクラウドパケットフィルタリング型ファイアウォール (L2
~L4
を防御) として働く。
ルートテーブルとサブネットの間に配置され、ルートテーブルよりも先に評価される。
双方向のインバウンドルールとアウトバウンドルールを決める。
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 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アドレスで送信する。
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アドレスや宛先ポート番号は変換しない。
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アドレスになる。
SNAT処理¶
AWS NAT GatewayのSNAT処理では、プライベートサブネットからリクエストを受信し、これの送信元IPアドレスをプライベートIPアドレスに変換する。
また、Internet Gatewayを使用して、このプライベートIPアドレスをパブリックIPアドレスに変換する。
一方で、宛先IPアドレスや宛先ポート番号は変換しない。
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に複数の IPv4 CIDRブロック ブロックがあり、1つでも 同じCIDRブロック ブロックがある場合は、AWS VPC ピアリング接続はできない。
アカウント | AWS VPCのあるリージョン | AWS VPC内のCIDRブロック | 接続の可否 |
---|---|---|---|
同じ/異なる | 同じ/異なる | 全て異なる | ⭕️ |
同じものが1つでもある | ✕ |
たとえ、IPv6が異なっていても、同様である。
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エンドポイントサービスに相当する。
Transit Gateway¶
▼ Transit Gatewayとは¶
『多対多』の関係で、『異なるAWS VPC間』や『AWS VPCとDirect Connect間』の双方向通信を可能にする。
クラウドルーターとして働く。
Direct Connectがオンプレミスとの通信機能を持つため、Transit GatewayとDirect Connectを組み合わせれば、AWS VPCとオンプレミスを接続することもできる。
▼ AWS間¶
AWS間の通信の場合、アプリケーションデータを自動的に暗号化する。
AWS VPC Lattice¶
異なるAWS VPCのネットワークをAWS 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. セキュリティグループ¶
セキュリティグループとは¶
アプリケーションのクラウドパケットフィルタリング型ファイアウォール (L2
~L4
を防御) として働く。
リクエスト (プライベートネットワーク向き通信) では、プロトコルや受信元IPアドレスを設定できる。
また、リクエスト (パブリックネットワーク向き通信) では、プロトコルや宛先プロトコルを設定できる。
09-02. セットアップ¶
コンソール画面の場合¶
リクエストを許可するルールとアウトバウンドルールを設定できる。
特定のセキュリティグループに紐付けられているAWSリソースを見つけたい場合は、ENIでセキュリティグループのIDを検索する。
インスタンスIDや説明文から、いずれのAWSリソースが紐づいているか否かを確認する。
送信元IPアドレスの指定¶
▼ セキュリティグループIDの紐付け¶
許可する送信元IPアドレスにセキュリティグループIDを設定した場合、そのセキュリティグループが紐付けられているENIと、このENIに紐付けられたリソースからのトラフィックを許可できる。
リソースのIPアドレスが動的に変化する場合、有効な方法である。
▼ 自己参照¶
許可する送信元IPアドレスに、自分自身のセキュリティグループIDを設定した場合、同じセキュリティグループが紐付けられている同士で通信できるようになる。