Amazon VPC内の独自サービスをPrivateLinkでプライベート接続する

こんにちは、NewsPicksエンジニアの美濃部です。

この記事ではAWSのPrivateLinkについての概要について説明していきます。PrivateLinkの知識が全くない方が理解をして頂く為の最初の入り口としてお役に立てればと思います。

PrivateLinkとは

公式ドキュメントによるとPrivateLinkとは「VPCとサービスの間にプライベート接続を提供するテクノロジー」であると明記されています。つまりPrivateLinkはテクノロジーなので具体的な何かではなくVPC内のサービスをプライベート接続する仕組みや方法論という事になります。AWSのマネジメントコンソール内でもメニュー等にPrivateLinkというキーワードは出てきません。マネジメントコンソールの検索機能を使って「PrivateLink」で検索するとVPCの機能として以下の2つがヒットしますがこれがPrivateLinkの実体になります。

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

PrivateLinkにはサービスを提供する側であるプロバイダと利用する側のコンシューマの存在があり、VPCエンドポイントサービスがプロバイダ側の話、VPCエンドポイントがそれを利用するコンシューマ側の話になります。

VPCエンドポイントサービスについて

VPC内にあるサービスをPrivateLinkで提供するにはサービスを公開する設定を行う必要があります。「VPCエンドポイントサービスの作成」がこのサービス公開設定にあたります。

以下の2つの方法があります。

  • インターフェースエンドポイント
    • プロバイダはNLB(Network Load Balancer)を用意しておき、コンシューマはNLBを介してプロバイダのサービスにアクセスします。AWSが提供しているサービスの中でPrivateLinkに対応しているサービスは既にこのインターフェースエンドポイントが用意されています。
  • Gateway Load Balancerエンドポイント
    • プロバイダはGLB(Gateway Load Balancer)を用意しておき、コンシューマはGLBを介してプロバイダのサービスにアクセスします。

VPCエンドポイントについて

VPCエンドポイントはVPCエンドポイントサービスで公開されたサービスを利用する側の設定になります。

以下の3つがあります。

  • ゲートウェイエンドポイント
    • AWSが提供するS3及びDynamoDBへのアクセスをプライベート接続したい場合に利用します。
  • インターフェースエンドポイント
    • インターフェースエンドポイントサービスを利用する場合に利用します。AWSが提供しているサービスの中でPrivateLinkに対応しているサービスを利用する場合もこのタイプになります。
  • Gateway Load Balancerエンドポイント
    • Gateway Load Balancerエンドポイントサービスを利用する場合に利用します。

PrivateLinkのまとめ

ここまで説明してきた事を一旦纏めると以下になります。

VPCエンドポイントのタイプ 対象サービス VPCエンドポイントサービスの作成
ゲートウェイエンドポイント S3,DynamoDB 不要
インターフェースエンドポイント NLBを介した独自サービス、PrivateLinkがサポートされているAWSサービス 要(PrivateLinkがサポートされているAWSサービスについては既に用意されているので不要)
Gateway Load Balancerエンドポイント GLBを介した独自サービス

VPC内のサービスをPrivateLinkでプライベート接続する手順

概要がわかったところで本題の「VPC内の独自サービスをPrivateLinkでプライベート接続する」場合の手順を説明します。 VPC内の独自サービスをPrivateLinkで接続する場合は「インターフェースエンドポイント」を利用します。

サービスAがサービスBを利用するというシチュエーションで説明すると以下の手順になります。

  1. サービスB用のNLBを作成する(Network Load Balancer を作成する
  2. サービスBのVPCエンドポイントサービスをインターフェースエンドポイントで公開する(インターフェイスエンドポイントの VPC エンドポイントサービス設定を作成する
  3. サービスAのVPCにサービスBのVPCエンドポイントサービスをインターフェースエンドポイントで作成する(インターフェイスエンドポイントの作成
  4. 2のVPCエンドポイントサービス作成時に「エンドポイントの承諾が必要」にチェックを入れた場合は、3で作成したVPCエンドポイントを承諾する

図で表すと以下のようになります。

PrivateLink - インターフェースタイプ
PrivateLink - インターフェースタイプ

なお、AWSがマネジメントコンソールを使用したハンズオンを用意しているのでこちらを参考にすると実際の手順の流れがわかりやすいかもしれません。 SaaSを自分のVPC内で使う方法(PrivateLink)

PrivateLinkはシンプルな手順で実現できるという事がわかりました。ただ、新規に構築するのではなく現在ALBを利用してインターネットからの接続を許可しているサービスをPrivateLinkに対応したサービスに変更する場合は既存サービスに影響がないようにALBからNLBに移行する必要があります。ELBそれぞれの比較はElastic Load Balancing の特徴で確認をしつつ、実際にはヘルスチェックなど若干設定が違う部分があるので移行する際には注意が必要です。

VPCピアリングとの比較

プライベート接続をする手段としてPrivateLink以外にVPCピアリングがよくある手法かと思います。こちらはCIDRの重複に注意する必要があったりルートテーブルの管理も必要であったりとネットワーク構成が複雑になりがちです。PrivateLinkはサービスとして公開してそれを利用するだけの仕組みなのでシンプルになります。プライベート接続対象のVPCの数が少ない状況ではVPCピアリングの複雑さは感じにくいですが、多くなるにつれて複雑さを増してきます。

コスト面についてVPCピアリングとPrivateLinkのどちらが良いかはケースバイケースなので一概には言えなそうです。よってその時のネットワーク構成や今後の拡張を考慮して見積る必要があります。

ただ、PrivateLink対象のVPCがリージョンを跨ぐ場合(クロスリージョン)はVPCピアリングは必ず必要になります。

最後に

インターネットに公開する必要のないサービスは基本的にはプライベート接続できるように構成すべきでり、そうする事で得られるメリットはたくさんあります。

  • コスト面
    • インターネットゲートウェイやNATゲートウェイが不要になればコスト削減になります。
  • セキュリティ面
    • 直接インターネットからのアクセスがされない事により、ブルートフォース攻撃やDDoS攻撃、その他の脅威に対するリスクが軽減されます。
  • パフォーマンス面
    • インターネットを通過せずにAWSのネットワーク内のみの通信となるので当然ネットワーク性能は向上します。

PrivateLinkについて概要レベルで説明してきましたが、この記事がPrivateLinkを使うきっかけになれば幸いです。

© Uzabase, Inc. All rights reserved.