【AWS】VPC間でインターナル通信をする方法まとめ

【AWS】VPC間でインターナル通信をする方法まとめ

AWSを利用していると、異なるVPCの間でインターネットを通らずに通信したい需要が出てきます。インターネット を利用しないメリットとしては

  • AWS内の通信だけにすることにより、通信の遅延ない
  • 外部に通信が出ていかないため、セキュリティ上安全

などのメリットがあります。インターナルでVPC間の通信ができるようになる方法として

  1. VPCピアリンク
  2. PrivateLink(インターフェイス型)
  3. PrivateLink(ゲートウェイ型)

の3つのパターンがあります。(図1)今回の記事ではこの3つのパターンの違いについて記載します。

図1:VPC間通信のイメージ
図1:VPC間通信のイメージ

1.VPCピアリング

1.1.概要

VPCピアリングは、VPCとVPCを直接つなげてしまう方法です。VPCごと接続可能にするため、ピアリングしたVPC内のすべてのリソース同士がアクセス可能になります。

VPC単位で接続後、ルーティング/NACL(ネットワークACL)/セキュリティグループなどによる設定で 接続可能な範囲を限定することができます。ネットワーク的につなげるため、CIDRが重複するVPC間のピアリングの実施はできません。

  • 接続可能な範囲
    • 異なるVPCの接続
    • 異なるアカウント/リージョンのVPCを接続
    • 複数のVPCとピアリング
  • 制約事項
    • ピアリング先のインターネットGWやNATを経由した外部への通信
    • ピアリング先のVPCピア接続を経由した通信
    • ピアリング先のVPCエンドポイントを経由した通信
    • ピアリング先のVPNやDirectConnectなどを経由した外部への通信
    • リージョン間IPv6 経由の通信
図2:VPCピアリングで通信できないパターン
図2:VPCピアリングで通信できないパターン

1.2.作成方法

1.2.1.ピアリングの作成

まずは、VPC同士をピアリングする設定を行います。VPCメニューから「ピアリング接続」→「ピアリング接続の作成」を選択します。(図1.1)

図1.1:「ピアリング接続」→「ピアリング接続の作成」
図1.1:「ピアリング接続」→「ピアリング接続の作成」

接続元と接続先のVPCを選択します。(図1.2)この時、CIDRの範囲がかぶっている場合ピアリングが作成できないために注意が必要です。

図1.2:接続元と接続先のVPCの選択
図1.2:接続元と接続先のVPCの選択

下図の通り作成が成功すればOKです。(図1.3)

図1.3:接続元と接続先のVPCの選択
図1.3:接続元と接続先のVPCの選択

作成に成功しましたが、実際に通信ができるようになるには接続先のVPCの管理者のリクエストの承認が必要になります。(図1.4)

今回は接続元接続先のVPC共に僕のアカウントで行っているので、自分でリクエストを承認します。

図1.4:リクエストの承認
図1.4:リクエストの承認

1.2.2.ルーティングの作成

ピアリングを作成した後はそれぞれのVPCのルーティングにお互いのCIDRを記載する必要があります。

  • 接続元VPCのルート:接続先のCIDR(今回の場合は13.0.0.0/16)をVPCリンク向けに追加
  • 接続先VPCのルート:接続元のCIDR(今回の場合は172.31.0.0/16)をVPCリンク向けに追加
図1.5:ルーティング の追加
図1.5:ルーティング の追加

1.3.通信確認

お互いに通信ができるか確認します。

1.3.1.接続元→接続先の通信確認

#接続元サーバ情報の確認(IPアドレス 172.31.18.52)
[ec2-user@ip-172-31-18-52 ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 172.31.18.52  netmask 255.255.240.0  broadcast 172.31.31.255
        inet6 fe80::416:4bff:fef0:bd42  prefixlen 64  scopeid 0x20<link>
---以下略---

#接続先に通信確認
[ec2-user@ip-172-31-18-52 ~]$ ping 13.0.1.161
PING 13.0.1.161 (13.0.1.161) 56(84) bytes of data.
64 bytes from 13.0.1.161: icmp_seq=1 ttl=255 time=0.418 ms
---以下略---

1.3.2.接続先→接続元の通信確認

#接続先サーバ情報の確認(IPアドレス 13.0.1.161)
[ec2-user@ip-13-0-1-161 ~]$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 13.0.1.161  netmask 255.255.255.0  broadcast 13.0.1.255
        inet6 fe80::49c:4fff:feb1:3f84  prefixlen 64  scopeid 0x20<link>
---以下略---

#接続元に通信
[ec2-user@ip-13-0-1-161 ~]$ ping 172.31.18.52
PING 172.31.18.52 (172.31.18.52) 56(84) bytes of data.
64 bytes from 172.31.18.52: icmp_seq=1 ttl=255 time=0.528 ms
---以下略---

2.PrivateLink(IFエンドポイント)

PrivateLinkはVPCエンドポイント を作成してVPCの外にある様々なサービスと接続できるようになる方法です。

AWSのサービス、もしくはNLBを利用したオリジナルのサービスと接続することができます。2.1.でAWSサービスとの接続について、2.2.でオリジナルのサービスとの接続について記載します。

2.1.AWSサービスとの接続方法

2.1.1.エンドポイントの作成

VPCのメニューから、エンドポイントの作成を選択します。(図2.1)

図2.1:エンドポイントの作成
図2.1:エンドポイントの作成

2.1.2.AWSサービスの選択

作成した後は、エンドポイントを利用して、接続するサービスを選択します。(図2.2)(※接続のタイプはInterfaceになっているものです。)2020年11月現在では、70以上のサービスを選択できます。

図2.2:接続先のAWSサービスの選択
図2.2:接続先のAWSサービスの選択

2.1.3.サブネットの選択

接続元のサブネットを選択します。(図2.3)

図2.3:接続先のAWSサービスの選択
図2.3:接続先のAWSサービスの選択

2.1.4.セキュリティグループ、ポリシーの選択

接続元→接続先の通信は、セキュリティグループやポリシーをカスタマイズすることで、制御できます。ポリシーはサービスによっては作成することができないようです。

選択が終わったら作成ボタンを押すと作成できます。

2.2.PrivateLink(IFエンドポイントエンドポイントサービス)

先ほどの2.1.ではAWSサービスを接続先に指定しましたが、AWSサービスではなくオリジナルで作成したサービスなどを指定することもできます。

ただし、その場合は接続先にNLBが必要になり、NLBをPrivateLinkで接続先に指定します。

2.2.1.エンドポイントサービスの作成

既存のNLBを指定してエンドポイントサービスを作成します。(図2.4)

図2.4:エンドポイントサービスの作成
図2.4:エンドポイントサービスの作成

エンドポイントサービスにしたいNLBを選択します。(図2.5)

図2.5:NLBの選択
図2.5:NLBの選択

正常に作成できればOKです。(図2.6)

図2.6:エンドポイントサービスの作成完了
図2.6:エンドポイントサービスの作成完了

2.2.2.エンドポイントサービスの接続

エンドポイントサービスを作成した後、PrivateLinkを作成する手順は2.1.とほとんど同じです。

PrivateLinkを作成する際に、サービス名を指定する必要があるため、エンドポイントサービスのダッシュボードで作成したサービス名をコピペしておきます。(図2.7)

図2.7:エンドポイントサービスの作成完了
図2.7:エンドポイントサービスの作成完了

エンドポイントの作成画面で、サービスカテゴリを「サービスを名前で検索」に選択し、コピペしたサービス名を入力します。(図2.8)

図2.8:エンドポイントサービスの選択
図2.8:エンドポイントサービスの選択

後は、2.1.の手順と同様です。

3.PrivateLink(GWエンドポイント)

3.1.概要

PrivateLinkのゲートウェイ(GW)型はVPCエンドポイントのGatewayタイプを利用する方法です。2020年11月現在、接続先のサービスとしてS3とDynamoDBのみが対応しています。

また、サブネットではなくVPCのルートテーブルを利用して接続するため、VPC内のすべてのリソースが接続先にアクセス可能となります。

3.2.作成方法

作成方法は、2.1.のインターフェイスエンドポイントの場合とほぼ同じです。

3.1.1.GWエンドポイントの選択

エンドポイントの作成画面で、サービスカテゴリで「AWSサービス」を選択し、「gateway」と検索すると探しやすいです(図3.1)。S3もしくは、DynamoDBを選択できます。

図3.1:サービスの選択
図3.1:サービスの選択

3.1.2.ルートテーブルの選択

GWタイプでは、サブネットではなくてVPCごとに接続となります。そのため、該当のVPCとルートテーブルを選択します(図3.2)。

図3.2:VPCとルートテーブルの選択
図3.2:VPCとルートテーブルの選択

4.接続方法の比較まとめ

ここまで紹介した、VPC間で通信をする方法に関して、下記で比較をまとめておきます。

VPCピア接続 PrivateLink
(インターフェイス)
PrivateLink
(ゲートウェイ)
利用
シーン
・異なるVPCの間の複数のリソース同士でやりとりをしたい場合 ・特定のAWSサービスに接続したい場合
・NLBを利用したコンテンツを他のVPCから利用する場合
・VPC内の複数のリソースでS3もしくはDynamoDBを利用する場合
接続元 VPC内のコンテンツ VPC内の特定のSubnet VPC内のコンテンツ
接続先 VPC内のコンテンツ AWSプリンシパルサービス
エンドポイントサービス
S3もしくは
DynamoDB
通信制御方法 ルートテーブル
ネットワークACL
セキュリティグループ
セキュリティグループ
ポリシー
ルートテーブル
ネットワークACL
セキュリティグループ
ポリシー
トラフィック IPv4/IPv6
(IPv6は同一リージョンでのみ可)
IPv4 IPv4
制限 CIDRが重複する VPC 間でピアリング不可 CIDRが重複していても接続可能 なし
他アカウント
他リージョン 不可 不可

サーバ・クラウドカテゴリの最新記事