🔗 AWS PrivateLink & VPC エンドポイントサービス

インターネットを経由せず、AWSプライベートネットワーク内で安全にサービスへ接続する仕組みを徹底解説

🌐 Networking 🛡️ Security 🏢 マルチアカウント対応 📘 初心者向け図解ガイド

最初に押さえるべき 4 つのポイント

🔒
インターネットを通らないプライベート接続 PrivateLink を使うと、トラフィックは AWS の内部ネットワークのみを通り、パブリックインターネットに一切出ません。
🏗️
VPC ピアリング不要でスケーラブル 何百もの VPC をピアリングで繋ぐ必要がなく、エンドポイントを作るだけで接続できます。
🎯
NLB / GWLB が必須(サービス提供側) VPC エンドポイントサービスを作るには、Network Load Balancer か Gateway Load Balancer が必要です。
🔑
きめ細かいアクセス制御が可能 特定の AWS アカウントやプリンシパルだけにアクセスを許可する「ホワイトリスト方式」で管理できます。
🏢

たとえ話:「オフィスビルの専用地下通路」で理解しよう!

AWS PrivateLink は、ビル同士を「専用の地下通路」で直接つなぐ仕組みに似ています。公道(パブリックインターネット)を歩かなくても、安全・高速にサービスへアクセスできます。

❌ PrivateLink なし(従来の接続)

あなたの VPC 🏢 自社オフィスビル 🌐 パブリック インターネット ⚠️ 公道(危険地帯) 盗聴・攻撃のリスク サービス提供 VPC 🏬 取引先のビル IGW / NAT GW 🚪 出入口が必要 Public IP 必要 📫 住所が公開される セキュリティ複雑 🔓 FW / ACL 多数 攻撃表面が大 😰 脆弱性リスク増 ⚠️ 従来方式の課題

公道(インターネット)を通るため、IGW / NAT やパブリック IP が必要。セキュリティ設定が複雑で、攻撃表面が広がる。

✅ PrivateLink あり(プライベート接続)

利用者 VPC 🏢 自社オフィスビル ENI 🔗 PrivateLink 🔒 専用地下通路 サービス提供 VPC 🏬 取引先のビル NLB IGW / NAT 不要 🚫 出入口不要 プライベート IP 🏠 住所は非公開 シンプル管理 ✨ 設定が簡単 攻撃表面が極小 🛡️ 安全性が高い ✅ PrivateLink のメリット

地下通路(PrivateLink)で直結。インターネットに出ないため、IGW / NAT もパブリック IP も不要で安全。

サービス提供者(Provider)と利用者(Consumer)の 2 つの役割を、オフィスビルのたとえで理解しましょう。

🏗️ PrivateLink アーキテクチャ全体像
🏬 サービス提供者(Provider)VPC たとえ:取引先のオフィスビル ⚖️ NLB Network Load Balancer 📋 受付カウンター Target Group 🏢 各部門の担当者 EC2-A AZ-a EC2-B AZ-b EC2-C AZ-c 📡 Endpoint Service 🔗 ビルの接続窓口 🔗 PrivateLink AWS プライベート ネットワーク経由 🔒 専用地下通路 🏢 利用者(Consumer)VPC たとえ:自社のオフィスビル 🔌 VPC Endpoint (Interface) 🚪 地下通路の入口 🔌 ENI Private IP 付与 💻 App-1 Subnet-a 💻 App-2 Subnet-b 🌐 Private DNS: vpce-xxx.svc.amazonaws.com → ENI の Private IP に解決される 📌 たとえ対応表 🏢 利用者 VPC = 自社ビル 🏬 提供者 VPC = 取引先ビル 🔒 PrivateLink = 地下通路 🚪 Endpoint = 通路の入口 📋 NLB = 受付カウンター 🔌 ENI = 内線電話の端末 🔄 複数 AZ に自動分散(高可用性)
💡
ポイント: Consumer 側の VPC に作られる VPC Endpoint(Interface 型)には、ENI(Elastic Network Interface)が自動作成されます。 アプリケーションはこの ENI のプライベート IP を通じてサービスにアクセスするため、インターネットに出ることは一切ありません。

各特徴をオフィスビルの地下通路のたとえと一緒に理解しましょう。

🔒
プライベート接続
IGW / NAT / VPN なしでプライベート IP のみで接続。トラフィックは AWS 内部に閉じる。
🏢 地下通路=外に出ない
🛡️
高いセキュリティ
パブリックインターネットに公開されないため、攻撃表面が極めて小さい。SG でさらに制御可能。
🏢 入口にガードマン配置
🏗️
シンプルな管理
VPC ピアリングの乱立を回避。何百もの VPC に対してエンドポイントを使うだけで接続できる。
🏢 通路は 1 本でOK
🔄
高可用性 & 耐久性
リージョン内の複数 AZ にまたがって自動分散。単一障害点を排除。
🏢 複数フロアに入口あり

VPC エンドポイントは 3 種類ある

PrivateLink を使うのは「Interface 型」と「Gateway Load Balancer 型」です。Gateway 型は PrivateLink を使いません。

🔌

Interface エンドポイント

サブネットに ENI(ネットワークインターフェース)を作成し、プライベート IP でサービスにアクセスします。PrivateLink の本体

AWS サービス (S3, SQS, etc.) 自作の VPC Endpoint Service AWS Marketplace
🏢 ビル間を繋ぐ地下通路の「入口ドア」
🚪

Gateway エンドポイント

ルートテーブルにエントリを追加して S3 / DynamoDB にアクセス。ENI は作成されず、PrivateLink は不使用無料

S3 DynamoDB
🏢 ビル内の「直通エレベーター」(別の仕組み)
🔍

Gateway LB エンドポイント

GWLB(Gateway Load Balancer)と連携し、トラフィックを透過的にセキュリティアプライアンスに転送。PrivateLink を使用

ファイアウォール IDS/IPS セキュリティ検査
🏢 通路途中の「セキュリティチェック窓口」
比較項目 🔌 Interface 🚪 Gateway 🔍 Gateway LB
PrivateLink 使用 ✅ はい ❌ いいえ ✅ はい
ENI 作成 ✅ あり(Private IP 付与) ❌ なし(ルートテーブル方式) ✅ あり
対象サービス 多数の AWS サービス、自作サービス S3、DynamoDB のみ GWLB 連携サービス
料金 有料(時間+データ転送) 無料 有料
Security Group ✅ 適用可能 ❌ 不可(ポリシーで制御) ✅ 適用可能
たとえ 🏢 ビル間の地下通路の入口 🏢 ビル内の直通エレベーター 🏢 通路のセキュリティ検査窓口

VPC エンドポイントサービスの作り方

自分のサービスを PrivateLink 経由で他の VPC / アカウントに公開する手順を、たとえと一緒に理解しましょう。

📋 全体フロー(たとえ:地下通路を開通するまで)
⚖️
NLB 作成
受付カウンターを設置
📡
Endpoint Service 作成
地下通路の接続窓口を登録
🔑
アクセス許可
接続を許可する相手を指定
🔌
Consumer が Endpoint 作成
利用者側で入口ドアを設置
接続承認 & 完了
Provider が承認して開通
1

⚖️ NLB(Network Load Balancer)を作成する

サービスを提供する VPC に NLB を作成し、ターゲットグループに EC2 やコンテナを登録します。PrivateLink は NLB を通じてトラフィックをルーティングするため、NLB は必須です(特定ケースでは GWLB も可)。

🏢 取引先ビルに「受付カウンター」を設置する工程
AWS CLI - NLB 作成
# NLB を作成
aws elbv2 create-load-balancer \
  --name my-privatelink-nlb \
  --type network \
  --scheme internal \
  --subnets subnet-aaa111 subnet-bbb222

# ターゲットグループを作成
aws elbv2 create-target-group \
  --name my-service-targets \
  --protocol TCP \
  --port 443 \
  --vpc-id vpc-provider123 \
  --target-type instance
2

📡 VPC エンドポイントサービスを作成する

NLB を指定して Endpoint Service を作成します。これにより、他の VPC / アカウントが PrivateLink 経由で接続できる「窓口」が登録されます。

🏢 ビル間通路の「接続窓口」を正式登録する工程
AWS CLI - Endpoint Service 作成
# エンドポイントサービスを作成(NLB を指定)
aws ec2 create-vpc-endpoint-service-configuration \
  --network-load-balancer-arns \
    arn:aws:elasticloadbalancing:ap-northeast-1:111111111111:loadbalancer/net/my-privatelink-nlb/abc123 \
  --acceptance-required

# → ServiceId: vpce-svc-0xxxxxxxxxxxx が返される
# acceptance-required = 接続リクエストを手動承認するかどうか
3

🔑 アクセス許可を設定する

特定の AWS アカウント / IAM プリンシパルにアクセスを許可するか、「*」で全員に公開します。--acceptance-required を有効にしておけば、接続リクエストを個別に承認/拒否できます。

🏢 「このビルの住人だけ通路を使っていいよ」と許可証を発行
AWS CLI - アクセス許可設定
# 特定のアカウントにアクセス許可
aws ec2 modify-vpc-endpoint-service-permissions \
  --service-id vpce-svc-0xxxxxxxxxxxx \
  --add-allowed-principals \
    "arn:aws:iam::222222222222:root" \
    "arn:aws:iam::333333333333:root"
4

🔌 Consumer 側で VPC Endpoint (Interface) を作成する

許可された Consumer アカウントが、Provider の Endpoint Service の Service Name を指定して Interface Endpoint を作成します。ENI が自動的にサブネットに作成されます。

🏢 利用者が「自分のビルに地下通路の入口ドア」を設置
AWS CLI - Consumer 側で Endpoint 作成
# Consumer 側で VPC Endpoint (Interface) を作成
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-consumer456 \
  --vpc-endpoint-type Interface \
  --service-name \
    com.amazonaws.vpce.ap-northeast-1.vpce-svc-0xxxxxxxxxxxx \
  --subnet-ids subnet-ccc333 subnet-ddd444 \
  --security-group-ids sg-consumer789
5

✅ Provider 側で接続を承認する

acceptance-required が有効な場合、Provider 側で接続リクエストを手動承認します。承認後、Consumer は PrivateLink 経由でサービスを利用開始できます。

🏢 取引先が「OK、通路を開通していいよ」と最終承認
AWS CLI - 接続承認
# Provider 側で接続リクエストを承認
aws ec2 accept-vpc-endpoint-connections \
  --service-id vpce-svc-0xxxxxxxxxxxx \
  --vpc-endpoint-ids vpce-0yyyyyyyyyyyy

🛡️ セキュリティ:多層防御の仕組み

PrivateLink のセキュリティは「地下通路の多重セキュリティ」のイメージです。入口の鍵、ガードマン、ID チェック、監視カメラの 4 層で守ります。

🔐
Security Group(SG) ENI にアタッチして、許可する IP / ポートを厳密に制御。たとえ:入口ドアの「暗証番号付きの鍵」。
📋
VPC Endpoint Policy Endpoint レベルでアクセスできるリソース / アクションを制限する IAM ポリシー。たとえ:「この通路では荷物だけ、人は通れません」のルール。
🔑
Allowed Principals(アクセス許可) Endpoint Service に接続できる AWS アカウント / プリンシパルを限定。たとえ:「入館許可証を持つ人だけ」。
📊
VPC Flow Logs / CloudTrail 通信ログと API 操作ログで全アクセスを記録。たとえ:「監視カメラで出入りを常時記録」。

企業での実際の使いどころを 4 つ紹介します。

🏦

SaaS サービスへのプライベート接続

金融機関が Datadog や Snowflake などの SaaS をインターネット経由ではなく PrivateLink 経由で利用。コンプライアンス要件を満たしつつ、安全にモニタリングやデータ分析を行える。

🏢

マルチアカウント環境の共有サービス

AWS Organizations の複数アカウントから、共有サービス VPC に配置した内部 API や認証基盤に PrivateLink 経由でアクセス。VPC ピアリングの管理爆発を回避。

🏥

医療データのセキュアなアクセス

HIPAA 準拠が求められる医療システムで、患者データを扱う S3 や RDS へのアクセスをプライベートネットワーク内に閉じ、規制要件を満たす。

🛒

マイクロサービス間のプライベート通信

EC コマースの決済サービスと注文サービスが異なる VPC にある場合、PrivateLink でプライベートに接続。パブリックインターネットを通らない低レイテンシーな通信を実現。

どちらも VPC 間をプライベートに接続する方法ですが、目的とスケーラビリティが大きく異なります。

Service VPC (NLB) VPC-A Acct 1 VPC-B Acct 2 VPC-C Acct 3 VPC-D Acct 4 一方向・サービス単位

一方向の「サービス提供→利用」に特化。何百 VPC でもスケール。CIDR 重複 OK。

🤝 VPC ピアリング

VPC-A VPC-B VPC-C VPC-D VPC-E 双方向・フルメッシュ

双方向の「対等な接続」。数が増えると N×N のメッシュが爆発。CIDR 重複 NG。

比較項目 🔗 PrivateLink 🤝 VPC ピアリング
通信方向 一方向(Consumer → Provider) 双方向
CIDR 重複 ✅ OK(ENI 経由なので問題なし) ❌ NG(ルーティング衝突)
スケーラビリティ ✅ 高い(1 対多) ⚠️ 低い(N×N のメッシュ)
クロスアカウント ✅ 対応 ✅ 対応
主な用途 サービス公開・SaaS・API VPC 間の全面的な通信
たとえ 🏢 出前サービス(注文方向のみ) 🏢 隣のビルとドアで直結(自由往来)

💰 コストの考え方

Interface Endpoint(PrivateLink)には「時間料金」と「データ処理料金」の 2 つがかかります。Gateway Endpoint(S3 / DynamoDB)は無料です。

⏱️ エンドポイント時間料金
~$0.014 / 時間
AZ あたり、東京リージョン参考
📊 データ処理料金
~$0.01 / GB
処理データ量に応じた従量課金
🚪 Gateway Endpoint
無料
S3, DynamoDB 向けは無料
💡
コスト最適化のヒント:S3 にアクセスする場合、Interface Endpoint(有料)と Gateway Endpoint(無料)の両方が使えます。特別な要件(Private DNS、オンプレミスからのアクセス等)がなければ、Gateway Endpoint を使う方がコストを抑えられます

🔒 最小権限の原則を適用

Endpoint Policy と Allowed Principals で接続先・接続元を厳密に制限する。「*」(全公開)は本当に必要な場合のみ使用。

🌐 Private DNS を有効化

Interface Endpoint の Private DNS を有効にすると、既存アプリのコード変更なしでプライベート接続に切り替えられる。

🔄 複数 AZ にエンドポイントを配置

高可用性のため、少なくとも 2 つの AZ にエンドポイントを作成。Provider 側の NLB も複数 AZ に配置。

📊 VPC Flow Logs で監視

ENI に関連するトラフィックを Flow Logs で記録・分析し、不正アクセスやトラフィックパターンの異常を検知。

🛡️ Security Group は必ず設定

Interface Endpoint の ENI にはデフォルトで全トラフィック許可の SG がつく場合がある。必ず適切なインバウンドルールに絞り込む。

🏷️ タグ付けで管理しやすく

Endpoint / Endpoint Service にプロジェクト名・環境名のタグを付与し、コスト配分やリソース管理を効率化。

よくある問題と解決策

症状 Endpoint 作成後、サービスに接続できない
対策 Security Group のインバウンドルールを確認。ENI の SG で必要なポート(例:443)が許可されているか。
症状 Endpoint のステータスが「pendingAcceptance」のまま
対策 Provider 側で接続承認が完了していない。accept-vpc-endpoint-connections で承認する。
症状 DNS 名で名前解決できない
対策 Private DNS が有効になっているか確認。VPC の DNS ホスト名 & DNS 解決が有効化されているか確認。
症状 「Service not found」エラーが出る
対策 Service Name が正確か確認。Consumer のアカウントが Allowed Principals に追加されているか確認。
症状 特定の AZ でのみ接続エラーが発生
対策 Provider の NLB と Consumer の Endpoint が同じ AZ に配置されているか確認。AZ の論理名はアカウント間で異なる場合がある(AZ ID で確認)。

よくある質問

Q PrivateLink と VPC Endpoint の違いは何ですか?
PrivateLink は「プライベートネットワーク内でサービスに接続する技術・仕組み」を指し、VPC Endpoint はその仕組みを利用するために Consumer 側の VPC に作成する「入口」のリソースです。たとえで言えば、PrivateLink が「地下通路の仕組み全体」で、VPC Endpoint が「通路の入口ドア」です。
Q NLB ではなく ALB は使えますか?
いいえ、VPC Endpoint Service を作成するには NLB(Network Load Balancer)または GWLB(Gateway Load Balancer)が必要です。ALB(Application Load Balancer)は直接サポートされていません。ALB が必要な場合は、NLB のターゲットとして ALB を配置する構成が可能です。
Q クロスリージョンで PrivateLink は使えますか?
はい。2024年のアップデートにより、クロスリージョン VPC エンドポイントがサポートされました。Consumer と Provider が異なるリージョンにいても PrivateLink で接続できるようになっています。
Q S3 には Interface と Gateway の両方の Endpoint がありますが、どちらを使うべきですか?
コストを重視するなら Gateway Endpoint(無料)がおすすめです。ただし、オンプレミスから VPN / Direct Connect 経由で S3 にプライベートアクセスしたい場合や、Private DNS が必要な場合は Interface Endpoint を選択してください。
Q PrivateLink を使うとレイテンシーは増えますか?
PrivateLink はインターネット経由よりもレイテンシーが低い場合がほとんどです。AWS のバックボーンネットワーク内でトラフィックが完結するため、インターネットの不安定さ(ルーティング変動やパケットロス)の影響を受けません。
📝 AWS 認定試験で覚えておくべきポイント

「PrivateLink」が登場したら Interface Endpoint(ENI ベース)を思い出す。Gateway Endpoint は PrivateLink を使わない。

⚖️ NLB / GWLB が必須

自作サービスを PrivateLink で公開するには NLB または GWLB が必須。ALB は不可。

🌐 CIDR 重複 OK

PrivateLink は CIDR 重複を許容する。VPC ピアリングは CIDR 重複 NG。これは頻出の差別化ポイント。

💰 S3 は Gateway が無料

S3 向けに「コスト最適化」が問われたら Gateway Endpoint を選ぶ。Interface Endpoint は有料。

Created by SSuzuki1063

AWS SAP Learning Resources