マルチアカウントかつハイブリッドクラウドでの、VPCエンドポイントの集約構成まとめ

2024.01.11

はじめに

オンプレミス環境とクラウド環境のハイブリッド構成、かつマルチアカウント構成で、VPCエンドポイントを1つのVPCに集約する作業を行いましたので、その概要をまとめました。

実際の構築では、構築手順が記載された記事を参考にしましたので、本記事では構成内容の説明に留め、実際の構築手順については参考にした記事を紹介します。

VPCエンドポイントの集約

集約構成は以下の通りです。各アカウントのVPCは、東京リージョンの想定です。

今回は例として、S3向けのインターフェース型VPCエンドポイントの集約にしました。以下の記事に記載されているSQSなどの他のサービスのVPCエンドポイントでも集約が可能です。(ゲートウェイ型は集約不可)

共通アカウントでRoute 53 Resolver インバウントエンドポイントとVPCエンドポイントを作成し、VPCエンドポイントを集約しています。

オンプレミス側からVPCエンドポイント経由でS3にアクセスするには、Route 53 Resolver インバウントエンドポイントを利用し、プライベートホストゾーンで名前解決(s3.ap-northeast-1.amazonaws.com)します。詳細は後述します。

今回のVPCエンドポイントの集約の構成では、VPC同士をVPCピアリングで接続していますが、Transit Gatewayでの接続でも問題ありません。

名前解決と通信経路は、以下の通りです。青色がメンバーアカウントでの経路で、赤色がオンプレミスからの経路です。

次の章で、VPCエンドポイントの集約の構築手順と経路の詳細を解説します。

メンバーアカウントの経路

メンバーアカウントのサーバーから共通アカウントのVPCエンドポイント経由で、メンバーアカウントのS3にアクセスする際の通信経路とその名前解決は、以下の通りです。

構築手順

まず、経路の前に構築内容について説明いたします。

VPCエンドポイントの集約を実現するために必要な構築手順は以下の通りです。

  1. 共通アカウントでVPCエンドポイントの作成
    • 作成時、プライベートDNSは無効
    • VPCエンドポイントのリージョナルDNS名(vpce-xxx-xxx.s3.ap-northeast-1.vpce.amazonaws.com)をコピーしておく
    • VPCエンドポイントのリージョナルDNS名は、パブリックに名前解決可能で、プライベートIPが返されます。
  2. 共通アカウントでプライベートホストゾーンを作成し、以下の設定でレコードを作成します
    • レコード名:s3.ap-northeast-1.amazonaws.com
    • ルーティング先:VPCエンドポイントのリージョナルDNS名
  3. 共通アカウントのプライベートホストゾーンをメンバーアカウントのVPCに関連付けます

1.~3.の構築手順は、こちらの記事が参考になります。

SESのVPCエンドポイントの場合

Systems ManagerのVPCエンドポイントの場合

経路

名前解決と通信経路を再掲します。

名前解決の経路として、共通アカウントのプライベートホストゾーンをメンバーアカウントのVPCに関連付けています。これにより、メンバーアカウントのサーバーはVPCに関連付けられたレコードで名前解決が可能です。

通信経路は、VPCピアリング経由で共通アカウントのVPCエンドポイントを経て、メンバーアカウントのS3にアクセスします。

また、別のメンバーアカウントから共通アカウントのVPCエンドポイントを利用したい場合は、同様に共通アカウントのプライベートホストゾーンをメンバーアカウントのVPCに関連付けることで実現できます。

この方法で、共通アカウントのVPCエンドポイントに集約できます。

オンプレミスの経路

オンプレミスのサーバーから共通アカウントのVPCエンドポイント経由での通信経路とその名前解決は、以下の通りです。

構築手順

まず、経路の前に構築内容について説明します。

VPCエンドポイントの集約を実現するために必要な構築手順は以下の通りです。

  1. 共通アカウントでVPCエンドポイントの作成(プライベートDNSは無効)
    • 作成時、プライベートDNSは無効
  2. 共通アカウントでプライベートホストゾーンを作成し、下記の設定でレコードを作成
    • レコード名:s3.ap-northeast-1.amazonaws.com
    • ルーティング先:VPCエンドポイントのリージョナルDNS名
  3. Route 53 Resolver インバウントエンドポイントを作成する
  4. オンプレミスのフォワーダー設定に、ドメイン名s3.ap-northeast-1.amazonaws.comを追加し、転送先としてRoute 53 Resolver インバウントエンドポイントのIPアドレスを登録します。

1.~2.の構築手順は、再掲になりますが、こちらの記事が参考になります。(SESのVPCエンドポイントの集約)

3.~4.の構築手順は、こちらの記事が参考になります。

経路

名前解決と通信経路を再掲します。

名前解決の経路は、オンプレミスサーバーからフォワーダーとRoute 53 Resolver インバウンドエンドポイントを経由し、共通アカウントのプライベートホストゾーンで名前解決されます。

通信経路は、VPN経由で共通アカウントのVPCエンドポイントを経て、メンバーアカウントのS3にアクセスします。

この方法で、オンプレミスの経路は、共通アカウントのVPCエンドポイントで集約できます。

オンプレミス側でインターネット経由の名前解決が可能な場合

オンプレミス側でインターネット経由での名前解決ができる場合、VPCエンドポイントのリージョナルDNS名を指定することで、Route 53 Resolver インバウントエンドポイントは利用せずに、VPN経由でS3にアクセスすることが可能です。

インターネット経由の名前解決ができるかどうかは、VPN経由で通信可能なVPC上にVPCエンドポイントを作成し、オンプレミスのサーバーで、VPCエンドポイントのリージョナルDNS名をnslookupdigすることで確認できます。

また、オンプレミスのサーバーが、共通アカウントのVPCエンドポイント経由でS3にアクセスする場合、AWS SDKやAWS CLIでVPCエンドポイントのリージョナルDNS名を明示的に指定する必要があります。

AWS CLIの場合、S3では以下のように、--endpoint-urlのオプションを利用します。

$ aws s3 ls s3://my-bucket/ --region ap-northeast-1 --endpoint-url https://xx.vpce-xx.s3.ap-northeast-1.vpce.amazonaws.com

AWS SDKの(Python)場合、S3では以下のように、endpoint_urlで指定します。

s3_client = session.client(
service_name='s3',
region_name='ap-northeast-1',
endpoint_url='https://xx.vpce-xx.s3.ap-northeast-1.vpce.amazonaws.com'
)

S3の詳細は以下のドキュメントをご参照下さい。

最後に

複数アカウント間やAWSとオンプレミスで実行されるワークロード間でVPCエンドポイントの集約構成について解説しました。

集約することでコスト削減や運用負担の軽減に繋がるため、参考にしていただければ幸いです。

参考