AWSで異なるVPC間(アカウントが違う場合も含む)を連携させたいという場面がしばしばあるかと思います。
比較的よく知られているものとしてVPC PeeringでVPC間を直接つなげる方法がありますが、
VPC Peeringを用いる場合は連携するVPC間でIPアドレスがかぶらないようにしたり、
複数のVPC間を連携させる場合はそれぞれを相互に接続する必要があるなどいくつか制限が存在します。
今回はVPC Peeringを用いないVPC間の連携方法であるAWS PrivateLink (以下、「PrivateLink」)について 簡単にですが解説と注意点についてご紹介いたします。
PrivateLinkの特徴と条件
PrivateLinkとはAWSで提供されている単体のサービス名ではなく、 VPCエンドポイントとVPCエンドポイントサービスを組み合わせた プライベートな通信によるシステム間連携を表します。
接続元ではVPCエンドポイントを作成、接続先ではVPCエンドポイントサービスを作成し それらをAWSの閉域網の中で直接接続する仕組みとなります。
PrivateLinkを実現するためには以下の条件が必要となります。
- 接続元にVPCエンドポイントが存在する
- 接続先にVPCエンドポイントサービスが存在する
- 接続先のVPCエンドポイントサービスの先にNetwork Load Balancer (以下、「NLB」)が存在する
PrivateLinkの構築手順
構築の大まかな手順は以下の通りとなります。
1.接続先側でVPCエンドポイントサービスを作成する
- ロードバランサーのタイプでネットワークを選択し、呼び出したいNLBを指定する
- エンドポイントの承諾が必要にチェックを入れる
2.作成したVPCエンドポイントサービスのサービス名を控える
3.作成したVPCエンドポイントサービスのプリンシパル許可設定のタブを開き接続元のアカウントを以下のように指定する*
arn:aws:iam::(アカウントID):root
4.接続元側でVPCエンドポイントを作成する
- タイプで「NLB と GWLBを使用するエンドポイントサービス」を選択し、サービス設定では手順2.で控えたVPCエンドポイントサービス名を指定する。
- クロスアカウントの場合は、「サービスの検証」ボタンを押下して正当性を確認する。
※この際に手順3.のプリンシパルの設定を正しく行う必要がある。 - 対象のサブネットやセキュリティグループも設定する。
5.接続先側のエンドポイントサービスを開き、エンドポイント接続タブの状態を確認。
- 承諾待ちであった場合、対象のエンドポイント接続を選択し、アクションから「エンドポイント接続リクエストの承諾」を実行。
※手順2.でエンドポイントの承諾が必要にチェックを入れた場合に承諾の手順が発生する。
PrivateLinkの注意点
比較的簡単な設定で異なるアカウント間を接続できるようになりますが、以下の注意点が存在します。
- 接続元側で動作するVPCエンドポイントのAZに対し、接続先側でも有効なNLBのバックエンドが同じAZ上に存在する必要がある
- 接続先側では、リクエストのIPアドレスはNLBのIPに変換される
特に一つ目の動作するAZに関しては注意が必要です。接続元側のEC2ではなくVPCエンドポイントのAZと、VPCエンドポイントサービスの先にいるシステムの同一のAZが対となって呼び出されるので、同じAZの組み合わせが存在しない場合はエラーになってしまいます。
今回はPrivateLinkを用いたシステム間連携を紹介いたしました。
NLBが必要であることがハードルではありますが、 すでにNLBが存在しているシステムの場合はVPC Peeringよりも簡単かつ 制限なく連携が取れると思います。
複数のVPCが相互に連携する場合はPrivateLinkだけで実現することはまた難しい場合もあり 状況によってはAWS Transit Gatewayの方が有効な場合もあります。 VPC Peeringが必要なのか、PrivateLinkが利用できるのかを踏まえて システム間の連携方法を検討してみてください。

