複数VPCで1つのVPC Endpointを共有する:アーキテクチャと構築の完全ガイド

仕組み | 集中型アーキテクチャ | 構築手順 | DNSとルーティング | セキュリティと費用 | 長所・短所と選定

🚀 結論:共有すべきEndpointとは

複数VPCでAWSサービスのEndpointを共有する場合、企業環境で有力な構成はCentral Endpoint VPC + Interface VPC Endpoint + Transit Gateway + Route 53 Profilesです。VPCが少なければ、Transit GatewayをVPC Peeringに置き換えられます。

  • 🎯 Interface Endpoint:集中配置に向いています。SSM、KMS、ECR、STS、Secrets Manager、CloudWatch、SNS、SQSなどを専用Endpoint VPCに置き、他のVPCからプライベートに利用できます。
  • 🪣 Gateway Endpoint:S3とDynamoDBのGateway EndpointはVPCをまたいで利用できません。追加のEndpoint利用料がないため、各アプリケーションVPCに個別作成します。
  • 🌐 ネットワーク接続:2~3個のVPCならPeeringで十分な場合が多く、VPCが増えるほどTransit Gatewayの方が管理しやすくなります。
  • 🧭 DNS:新規環境ではRoute 53 Profilesを使い、集中型Interface EndpointのPrivate DNSを各VPCへ展開します。
  • 🌏 リージョン境界:本番環境では原則としてリージョンごとにEndpoint Hubを設け、リージョン間の遅延、転送料、障害の連鎖を避けます。

🧩 「Endpointを共有する」の本当の意味

Endpointリソースそのものを別VPCへ共有するわけではありません。Interface EndpointはShared Endpoint VPC内に残り、選択したサブネットにプライベートIP付きのENIを作成します。他のVPCはTransit GatewayまたはVPC Peering経由で、そのENIへルーティングします。

  • VPC-A、VPC-B、VPC-Cをそれぞれ10.1.0.0/1610.2.0.0/1610.3.0.0/16、Endpoint VPCを10.100.0.0/16とします。
  • 20個のVPCに15種類のInterface Endpointを2つのAZで配置すると、20 × 15 × 2 = 600個のEndpoint ENIが必要です。
  • 集中化すれば、同じサービスをEndpoint VPCの2つのAZにだけ配置でき、固定リソース、ポリシー、管理対象を大幅に減らせます。
  • Interface EndpointにはAZごとの時間料金とデータ処理料金がかかるため、VPC数が増えるほど重複配置の固定費が目立ちます。

🏗️ 推奨する集中型アーキテクチャ

🗺️ 基本トポロジー

                         AWS SERVICES
                               ▲
                               │
                         PrivateLink
                               │
             ┌──────────────────────────┐
             │ NETWORK ACCOUNT          │
             │ Central Endpoint VPC     │
             │                          │
             │ AZ-A             AZ-C    │
             │ VPCE ENI         VPCE ENI│
             │                          │
             │ SSM / KMS / STS / ECR    │
             │ Secrets / CloudWatch     │
             │ SNS / SQS / EC2 API      │
             │ Route 53 Profile         │
             └────────────┬─────────────┘
                          │
                    Transit Gateway
               ┌──────────┼───────────┐
               │          │           │
             PROD        DEV         TEST
               │          │           │
            VPC-A       VPC-B       VPC-C
               │          │           │
        S3 Gateway   S3 Gateway   S3 Gateway
        DDB Gateway  DDB Gateway  DDB Gateway

🧰 中核となる4つのサービス

  • AWS PrivateLink / Interface VPC Endpoint:アプリケーションVPCからリージョナルAWSサービスへのプライベート接続を提供します。
  • AWS Transit Gateway:Endpoint VPCと複数の業務VPCを接続し、TGW Route Tableで到達範囲を制御します。
  • Route 53 Profiles:Interface EndpointのPrivate DNSを一元管理し、複数VPCに関連付けます。
  • AWS RAM:Transit GatewayとRoute 53 Profileを複数AWSアカウント間で共有します。

🏢 オンプレミス環境も接続する場合

オンプレミスからVPNまたはDirect ConnectでAWSへ接続する場合は、Route 53 Resolver Inbound Endpointを追加し、社内DNSからAWSサービス名をResolverへ転送します。VPCの「CIDR + 2」にあるResolverアドレスへ直接問い合わせる構成は避けます。

⚙️ 手順1:Endpoint VPCとネットワーク接続を作る

1️⃣ 専用Endpoint VPCを作成

  • Network AccountまたはShared Services AccountにEndpoint-VPCを作成します。ここでは10.100.0.0/16を使用します。
  • 本番では最低2つのAZを使い、AZ-aに10.100.10.0/24、AZ-cに10.100.20.0/24など、各AZにEndpoint Subnetを用意します。
  • Interface Endpointは選択したEndpoint SubnetごとにENIを作成します。2AZ構成にすることでAZ障害の影響を抑えられます。
  • 共有Endpointを任意のApplication VPCへ置くと、ネットワーク所有権や権限境界、障害対応が特定のワークロードに依存するため避けます。

2️⃣ Transit GatewayまたはVPC Peeringを構成

  • 中央Transit Gatewayを作成し、Endpoint VPC、VPC-A、VPC-B、VPC-CのAttachmentを接続します。
  • マルチアカウント環境ではAWS RAMでTGWを共有し、各業務アカウントがAttachmentを作成または承認します。
  • 業務VPCが2~3個だけなら、それぞれをEndpoint VPCへ直接Peeringし、TGWのレイヤーと費用を省けます。
  • Peeringには推移的ルーティングがありません。規模が大きくなると接続数とルート管理が膨らむため、TGWのHub-and-Spoke構成へ移行します。

🛣️ 手順2:双方向ルーティングを設定

3️⃣ 業務VPCのRoute Table

Endpointへ接続する各業務サブネットで、Endpoint VPCのCIDRをTGWへ向けます。VPC-Aの例:

Destination       Target
10.1.0.0/16       local
10.100.0.0/16     tgw-xxxx

VPC-BとVPC-Cも10.100.0.0/16を同じTGWへ送ります。Peeringの場合は、対応するPeering ConnectionをTargetにします。

4️⃣ Endpoint VPCの戻りルート

Endpoint Subnetに関連付けたRoute Tableには、各業務VPCへの戻り経路が必要です。

10.100.0.0/16      local
10.1.0.0/16        tgw-xxxx
10.2.0.0/16        tgw-xxxx
10.3.0.0/16        tgw-xxxx

往路と復路の両方が必要です。往路だけ設定されていると、TCP SYNにSYN/ACKが返らず、最終的に接続タイムアウトになります。

5️⃣ TGW Route Table

  • 業務VPC側のルートで10.100.0.0/16をEndpoint VPC Attachmentへ送ります。
  • Endpoint VPC側では、10.1.0.0/1610.2.0.0/1610.3.0.0/16を各VPC Attachmentへ向けます。
  • Route PropagationまたはStatic Routeで構成できます。厳密なセグメント分離が必要なら、複数のTGW Route Tableで伝播関係を明示します。

🔌 手順3:Interface Endpointを作成

6️⃣ Endpoint VPCにサービスEndpointを追加

  • VPC → Endpoints → Create endpointを開き、東京リージョンのSystems Managerならcom.amazonaws.ap-northeast-1.ssmを選びます。
  • VPCはEndpoint-VPC、Subnetはendpoint-subnet-aendpoint-subnet-cを選択します。
  • Route 53 Profilesを使う構成では、Private DNSをEnabledのままにします。SDKやCLIは標準サービス名を使いながらPrivateLinkのプライベートIPへ接続できます。
  • 実際に必要なサービスだけを作成します。Interface EndpointごとにAZ時間料金とデータ処理料金が増えます。

📦 集中配置されることが多いEndpoint

  • Systems Manager:SSM、SSM Messages、EC2 Messages。
  • 基盤サービス:EC2 API、KMS、Secrets Manager、STS、Lambda、EventBridge。
  • 監視とメッセージング:CloudWatch、CloudWatch Logs、SNS、SQS。
  • コンテナと配信:ECR API、ECR DKR、ECS、CodeArtifact。
  • アプリケーション接続:API Gatewayのexecute-apiなどPrivateLink対応サービス。

🔐 手順4:Security GroupとEndpoint Policy

7️⃣ Endpoint Security Group

  • Endpoint ENI専用のSecurity Groupとしてsg-vpce-centralなどを作成します。
  • InboundはHTTPS TCP 443を、必要な業務VPCのCIDR(10.1.0.0/1610.2.0.0/1610.3.0.0/16など)からのみ許可します。
  • 本番環境で0.0.0.0/0を許可しないでください。組織、環境、機密度、専用Endpointなどに応じて送信元を絞ります。
  • Security Groupはステートフルですが、インスタンスの送信ルール、NACL、中間アプライアンスでもTCP 443と戻り通信を許可する必要があります。

8️⃣ Endpoint Policy

  • Endpoint Policyは、その入口を通じて誰がどのサービス操作を実行できるかを制御します。フルアクセスは疎通確認には便利ですが、本番の恒久設定には不向きです。
  • KMS Endpointなら、許可するアカウント、IAM Role、KMS Keyを限定できます。他のサービスでも対応する条件キーとリソース制約を利用します。
  • 最終的な認可はEndpoint Policy、IAM Policy、SCP、Resource Policy、Bucket Policy、Key Policyなどの組み合わせで決まります。
  • 共有VPCが増えるほど最小権限Policyは複雑になり、Policy文書のサイズ上限にも注意が必要です。必要に応じて環境や信頼境界ごとにEndpointを分割します。

🌐 手順5:Route 53 ProfilesでDNSを一元化

IPレベルで疎通しても、アプリケーションがEndpointを使うとは限りません。通常はssm.ap-northeast-1.amazonaws.comのような標準名を呼び出すため、その名前をAWSサービスのパブリックIPではなくEndpoint ENIのプライベートIPへ解決させます。

  • Route 53 → Profiles → Create Profileから、central-vpce-profileなどのProfileを作成します。
  • Route 53 ProfileにはPrivate Hosted Zone、Resolver Rule、DNS Firewall、Interface VPC Endpoint、Resolver Query Loggingをまとめて関連付けられます。
  • ProfileのVPC endpoints画面でSSM、KMS、STS、ECR、Secrets Managerなどの中央Endpointを関連付けます。コンソールで一度に選択できる既存Endpointは10個までで、それ以上は複数回またはAPIで処理します。
  • 続いてVPC-A、VPC-B、VPC-CをProfileへ関連付けます。1つのVPCが同時に関連付けられるProfileは1つだけなので、既存DNSリソースを先に整理します。
  • 設定後、業務VPCの標準サービス名は10.100.10.2510.100.20.41といった中央VPCEのプライベートIPを返します。

🏢 マルチアカウントLanding ZoneでのDNS共有

🧭 アカウントの役割分担

AWS Organizations

Network Account
├ Endpoint VPC
├ Transit Gateway
└ Route 53 Profile

Production Account
├ VPC-A
└ VPC-B

Development Account
├ VPC-C
└ VPC-D

Security Account
└ VPC-E
  • Network AccountからAWS RAMを使い、同一リージョンのProduction、Development、SecurityなどのアカウントへRoute 53 Profileを共有します。
  • 各アカウントは自分のVPCを共有Profileへ関連付け、サービスとVPCごとにPrivate Hosted Zoneを作ることなく中央EndpointのDNSを再利用します。
  • AWS Organizations、Control Tower、Landing Zoneに適した役割分担で、ネットワークチームがVPCE、DNS、TGW、ログを、アプリチームがコンピュートと業務リソースを管理します。

🔄 リクエストの全経路

① DNS解決

VPC-Aの10.1.10.50にあるEC2がSecrets Manager APIを呼ぶと、SDKはsecretsmanager.ap-northeast-1.amazonaws.comを検索します。Route 53 Resolverと関連付けたProfileが中央VPCEのプライベートIPを返します。

EC2 → Route 53 Resolver → Route 53 Profile
    → VPCE Private DNS → 10.100.10.25 / 10.100.20.25

② ネットワーク経路

10.1.10.50
    │ HTTPS 443
    ▼
VPC-A Route Table
    ▼
Transit Gateway
    ▼
Endpoint VPC
    ▼
VPCE ENI 10.100.10.25
    ▼
AWS PrivateLink
    ▼
Secrets Manager

AWSサービスまでの経路はプライベートに保たれ、NAT GatewayやInternet Gatewayを必要としません。ただしネットワーク制御とID認可の両方を通過する必要があります。

🪣 Gateway Endpointを集中化できない理由

Interface EndpointとGateway Endpointは別の仕組みです。Gateway Endpointは主にS3とDynamoDB向けで、AWS PrivateLinkを使わず、その接続範囲をVPC外へ拡張できません。

  • VPN、VPC Peering、Transit Gateway、Direct Connectの反対側にあるリソースは、Endpoint VPC内のS3またはDynamoDB Gateway Endpointを利用できません。
  • VPC-A、VPC-B、VPC-CにS3とDynamoDB Gateway Endpointを個別作成し、各VPCのRoute Tableに関連付けます。
  • Gateway Endpointには追加のEndpoint利用料がないため、集中化による固定費削減効果もありません。
  • そのため企業環境では、Interface Endpointは集中型、Gateway Endpointは分散型が一般的です。

📦 ECR:見落としやすい依存関係

  • ECS、EKS、EC2がECRからイメージをPullする場合、通常はecr.apiだけでなくecr.dkrも必要です。
  • コンテナイメージのLayerはS3に保存されるため、2つのECR Interface EndpointがあってもPullに失敗することがあります。
  • 一般的にはECR APIとECR DKRを中央配置し、各Application VPCにS3 Gateway Endpointを作成します。
  • Pull障害ではDNS、2つのECR Endpoint、S3 Gateway Endpoint、ルート、Security Group、タスクまたはインスタンスのIAM権限を確認します。

🕰️ 従来方式:Private Hosted Zone

現在も利用できる構成

  • 集中型Interface EndpointのPrivate DNSを無効にします。
  • ssm.ap-northeast-1.amazonaws.comなど、AWSサービス名に一致するRoute 53 Private Hosted Zoneを手動作成します。
  • VPCEを指すA Alias Recordを作成し、PHZをEndpoint VPCとすべての業務VPCへ関連付けます。

新規環境で優先されなくなった理由

  • 30個のEndpointと100個のVPCがあると、手動のPHZ Associationは巨大な管理マトリクスになります。
  • Route 53 Profilesなら中央VPCEを一度関連付け、同じ設定を多数のVPCへ適用できるため、Hosted Zone、Record、Associationの重複を減らせます。
  • 既存環境や特殊なDNS要件では従来方式も有効ですが、新規構築ではRoute 53 Profilesを先に検討します。

🌏 マルチリージョンの考え方

  • 技術的にはInter-Region TGW Peeringやリージョン間VPC Peeringを使い、シンガポールVPCから東京のEndpoint VPCへ接続できます。
  • ただしリージョン間データ転送料と遅延が増え、AWSサービスEndpointの多くもリージョナルです。
  • 本番では東京とシンガポールにそれぞれEndpoint HubとRoute 53 Profileを作る構成の方が堅牢です。
  • リージョン分離により障害範囲を縮小し、DNS、ルーティング、サービス依存、コンプライアンス境界も明確になります。

💴 費用モデル:集中型が必ず安いとは限らない

集中型で発生する費用

  • Transit Gateway Attachmentの時間料金。
  • Transit Gatewayのデータ処理料金。
  • 各AZに配置したInterface Endpointの時間料金。
  • PrivateLinkのデータ処理料金、およびAZ間・リージョン間のデータ転送料。

費用を抑えやすい条件

VPC数と必要なEndpoint数が多く、VPCごとの通信量が比較的小さい環境ほど、集中化の効果が出やすくなります。50 VPC、20サービス、2 AZなら、分散型は2,000個のEndpoint ENI、集中型は約40個で済みますが、TGW費用も必ず加えて比較します。

大容量通信は個別に試算

1つのVPCから毎日数TBのS3通信が発生する場合、TGW経由でS3 Interface Endpointへ送る構成は割高になりがちです。ローカルのS3 Gateway Endpointが適しています。AWS料金はリージョンと時期で変わるため、最新のリージョン別料金を基に、すべて日本円へ換算して予算を比較します。

✅ 集中型Endpointの主なメリット

  • 📉 リソース削減:多数のVPCで同じEndpoint ENIを重複配置せずに済みます。
  • 🧰 一元運用:Endpoint Policy、Security Group、タグ、Private DNS、ログをNetwork Accountで管理できます。
  • 🔐 共通セキュリティ基準:中央チームがVPCE、DNS、TGW、アクセス制御を管理し、アプリチームはEC2、ECS、EKS、Lambda、RDSへ集中できます。
  • 🌐 NAT依存の削減:PrivateLink対応AWSサービスへの通信でNAT GatewayとパブリックAPI経路が不要になります。
  • 🏢 マルチアカウントに適合:AWS Organizations、Control Tower、RAM、Landing Zoneの責任分担と相性が良い構成です。

⚠️ 集中型Endpointの主なデメリット

  • 💥 障害範囲が広い:中央SSM Endpoint、DNS、Policyの障害が複数VPCへ同時に影響します。
  • 📜 Policyが複雑:多数のアカウント、Role、リソースを1つのEndpointで扱うと最小権限Policyが膨らみ、文書サイズ上限にも達しやすくなります。
  • 🧭 DNS経路が長い:Profile、TGW、中央VPCE、アカウント間関連付けなど、ローカル配置より構成要素が増えます。
  • 💸 TGW費用が追加:Application VPC → TGW → VPCEの通信量が多いと、データ処理料金が大きくなります。
  • 🔒 分離性が低下:Endpointの容量、Security Group、Policyを共有するため、監視、変更管理、セグメント分離がより重要です。

📊 集中型とVPCごとのEndpointを比較

比較項目 Central Endpoint VPCごとのEndpoint
Endpoint数と固定費数が少なく、VPCが増えるほど固定費を抑えやすいVPC数とサービス数に比例して増える
ネットワーク費用通常はTGW Attachmentと処理料金が発生ローカルVPCEへの通信にTGWは不要
DNSと運用DNS要素は多いが一元管理できる単一VPCでは簡単だが管理対象が分散する
分離性と障害範囲制御と容量を共有し、分離性が低く影響範囲が広い分離性が高く、通常は1つのVPCだけに影響
Endpoint Policy一元化できるが複数アカウントで複雑境界が明確で比較的シンプル
適した環境大規模・マルチアカウントLanding Zone小規模または分離性・通信量を重視する環境

🧭 VPC数に応じた選び方

1~3個のVPC

  • 各VPCへの個別配置が最も単純で、分離性にも優れます。
  • 数を減らしたい場合はPeering + Route 53 Profile + 小規模Central Endpoint VPCを使います。
  • 少数のEndpoint共有だけを目的にTransit Gatewayを導入する必要は通常ありません。

5~20個のVPC

  • Endpoint VPC + TGW + Route 53 Profilesを本格的に検討します。
  • 重複Endpointの固定費、TGW費用、実トラフィック量を同じ費用モデルで比較します。
  • 大容量通信や強い分離が必要なワークロードだけ個別Endpointを残すハイブリッド構成も有効です。

20~数百個のVPC

  • Network AccountにTGWまたはCloud WAN、Endpoint VPC、Route 53 Profiles、Resolver、Network Firewall、DNS Firewallを集約するのが一般的です。
  • IaC、標準タグ、ログ、監視、変更管理でEndpointとアカウント関連付けを管理します。
  • 全ワークロードが1つの中央スタックへ依存しないよう、リージョン、環境、信頼境界で分割します。

🏁 推奨する最終構成

  • 🔌 Interface Endpoint:専用Endpoint VPCへ集中配置。
  • 🪣 S3 / DynamoDB Gateway Endpoint:各業務VPCに個別作成。
  • 🛣️ ネットワーク:少数VPCはPeering、中~大規模はTransit Gateway。
  • 🌐 DNS:新規環境はRoute 53 Profiles、必要な既存環境のみ従来PHZを維持。
  • 🏢 マルチアカウント:Network Accountで一元管理し、AWS RAMでTGWとProfileを共有。
  • 🌏 マルチリージョン:リージョンをまたいで集約せず、リージョンごとにEndpoint Hubを構築。
  • 🔐 セキュリティ:Endpoint SG、Endpoint Policy、IAM、SCP、Resource Policyを組み合わせる。
  • 💴 費用:サービス数、VPC数、AZ数、通信量を使い、総保有コストを日本円で比較。

🛠️ 接続できないときの確認順序

  1. DNSdig ssm.ap-northeast-1.amazonaws.comを実行し、パブリックIPではなく10.100.x.xのようなVPCEのプライベートIPが返ることを確認。
  2. Spoke VPC Route Table:Endpoint VPCのCIDRがTGWまたはPeeringへ向いているか確認。
  3. TGW Route Table:業務VPCからEndpoint VPCまでの往路と復路を確認。
  4. Endpoint VPC Route Table:Endpoint Subnetから各業務VPCへ戻れるか確認。
  5. VPCE Security Group:業務VPCのCIDRからTCP 443を許可しているか確認。
  6. NACL:Inbound、Outbound、エフェメラルポート範囲を確認。
  7. Endpoint Policy:Principal、Action、Resourceが拒否されていないか確認。
  8. IAM / Resource Policy / SCP:最後にID権限、リソースポリシー、組織レベル制御を確認。

「名前解決 → ルーティング → ネットワーク制御 → 認可」の順に確認すると、コンソールを手当たり次第に調べるより早く原因を特定できます。