PrivateLink についてドキュメントを読んだので、自分用にメモをまとめました。
概要
AWS PrivateLinkは、VPC 間、オンプレミス環境からの接続、または AWS サービスへのプライベート接続を提供します。これにより、パブリックインターネットを介さずに、安全にサービスにアクセスすることが可能です。
用語の定義
-
Service Providers
サービスの所有者であり、サービスを提供する主体です。AWS 自身、AWS パートナー、その他の AWS アカウントなどが該当します。 -
Service Consumers
サービスの利用者であり、エンドポイントサービスにアクセスする人やシステムのことです。
VPC エンドポイントとエンドポイントサービスの違い
AWS の VPC には、以下の 2 種類のサービスがあります:
-
エンドポイントサービス (Endpoint Services)
Service Providers が、サービスコンシューマに向けて提供するものです。 -
VPC エンドポイント (VPC Endpoints)
サービスコンシューマが、Service Providers の提供するサービスに接続するために使用します。VPC エンドポイントには、以下の 3 つの種類があります。
Endpoint Services
-
ロードバランサーの指定
Service Providers は、エンドポイントサービスを作成する際に特定のロードバランサーを指定する必要があります。 -
リクエストのルーティング
ロードバランサーは、サービスコンシューマから受け取ったリクエストを、目的のサービスへルーティングします。 -
アクセス許可の設定
デフォルトでは、エンドポイントサービスはサービスコンシューマに対して利用可能ではありません。特定の AWS プリンシパルに接続を許可する権限を追加する必要があります。 -
サービス名の管理
各エンドポイントサービスは、一意のサービス名で識別されます。サービスコンシューマは VPC エンドポイントを作成する際に、このサービス名を指定する必要があります。Service Providers は、サービス名をサービスコンシューマと共有する必要があります。
VPC Endpoints
VPC エンドポイントは、サービスコンシューマがエンドポイントサービスに接続するために作成します。
VPC エンドポイントの種類
-
Interface Endpoints (インターフェースエンドポイント)
エンドポイントサービスに向けて TCP トラフィックを流すためのものです。DNS を使用して、エンドポイントサービスの宛先を解決します。 -
Gateway Load Balancer Endpoints (ゲートウェイロードバランサーエンドポイント)
プライベート IP アドレスを使用し、レイヤー 3 またはレイヤー 4 で動作します。受信したトラフィックを複数のアベイラビリティーゾーン内のターゲットに送信し、負荷分散します。 -
Gateway Endpoints (ゲートウェイエンドポイント)
Amazon S3 や DynamoDB へのトラフィックを流すために使用します。ゲートウェイエンドポイントは AWS PrivateLink を使用せず、ルートテーブルを介してトラフィックを送ります。
エンドポイントネットワークインターフェース
エンドポイントネットワークインターフェースは、リクエスターが管理するネットワークインターフェースです。エンドポイントサービスへのトラフィックのエントリポイントとして機能し、以下の特徴があります:
-
IPv4/IPv6 サポート
IPv4 アドレスと IPv6 アドレスの両方をサポートしています。ただし、IPv6 アドレスを持つ場合、denyAllIgwTraffic
設定が自動的に有効になり、インターネットからのアクセスはできません。ただし、AWS 内部ネットワーク内からのアクセスは可能です。 -
IP アドレスの固定
一度設定されると、エンドポイントネットワークインターフェースの IP アドレスはエンドポイントのライフタイム中、変更されることはありません。
AWS PrivateLink 接続
AWS PrivateLinkは、VPC エンドポイント(サービスコンシューマ側)とエンドポイントサービス(Service Providers 側)をプライベートに接続する仕組みです。VPC エンドポイントからエンドポイントサービスへのトラフィックはすべて AWS の内部ネットワークを通じて通信され、パブリックインターネットは経由しません。
-
パブリックホストゾーン
パブリックホストゾーン内のレコードは、インターネット上でのトラフィックを制御します。 -
プライベートホストゾーン
プライベートホストゾーン内のレコードは、特定の VPC 内のみでトラフィックをルーティングします。
スプリットホライズン DNS
スプリットホライズン DNSとは、同じドメイン名を使って、パブリックウェブサイトとプライベートな VPC 内のエンドポイントサービスの両方に異なる解決結果を返す方法です。具体的には:
-
VPC 内の DNS リクエスト
VPC エンドポイントのプライベート IP アドレスに解決されます。 -
外部からのリクエスト
パブリックエンドポイントに解決されます。
この仕組みにより、同じドメイン名でパブリックとプライベートのサービスを共存させることが可能です。
VPC エンドポイントとエンドポイントサービスの組み合わせ
VPC エンドポイントとエンドポイントサービスを組み合わせて使用することで、以下のようなメリットがあります:
-
プライベート接続の確立
別の VPC や別の AWS アカウントから、インターネットを介さずにプライベートにサービスを利用できます。 -
マルチアカウント構成や異なる VPC 間での接続
特に、マルチアカウント環境や異なる VPC 間での安全な接続が必要な場合に有効です。
具体的な利用例
ある VPC にホストされた社内 API に対して、他の VPC からアクセスする場合の設定手順:
- サービス提供 VPCにエンドポイントサービスを作成し、他の VPC に対してそのサービスを公開します。
- アクセス側 VPCでインターフェースエンドポイントを作成し、エンドポイントサービスに接続します。