SJ blog
architecture
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

AWS PrivateLink — VPCエンドポイントサービスとインターフェース型の設計

AWS PrivateLinkの仕組み、エンドポイントサービスの作成、NLBとの統合、クロスアカウント・クロスVPCでのプライベート接続、VPCピアリングとの設計上の違いを解説。

一言結論

PrivateLinkはCIDRが重複するVPC間でも特定サービスだけをプライベート公開できるため、VPCピアリングが全リソースへの双方向アクセスを許可してしまう問題を避けつつマイクロサービスやSaaS型のサービス公開を安全に実現できる。

PrivateLinkはインターネットを経由せずにVPC間でサービスを接続する仕組みだ。インターフェース型VPCエンドポイントとエンドポイントサービスの2コンポーネントで構成される。

PrivateLink を使わない場合(インターネット経由):
  消費者VPC → インターネット → プロバイダーサービス(セキュリティリスク)

PrivateLink を使う場合(プライベート接続):
  消費者VPC → インターフェースエンドポイント → PrivateLink → プロバイダーNLB → サービス
  ※ トラフィックはAWSネットワーク内に留まる

エンドポイントサービスの作成(プロバイダー側)

サービスを提供する側(プロバイダー)がNLBをベースにエンドポイントサービスを作成する。

# NLBの作成(プロバイダーVPCに)
aws elbv2 create-load-balancer \
  --name my-nlb \
  --type network \
  --subnets subnet-provider-aaa subnet-provider-bbb

# エンドポイントサービスの作成
aws ec2 create-vpc-endpoint-service-configuration \
  --network-load-balancer-arns arn:aws:elasticloadbalancing:...:loadbalancer/net/my-nlb/xxx \
  --acceptance-required true \
  --private-dns-name my-service.example.com

# 特定アカウントへのアクセス許可
aws ec2 modify-vpc-endpoint-service-permissions \
  --service-id vpce-svc-xxx \
  --add-allowed-principals arn:aws:iam::CONSUMER_ACCOUNT_ID:root
acceptanceRequired: true の場合:
  → 消費者がエンドポイントを作成する際にプロバイダーの承認が必要
  → セキュリティを高めたい場合に設定

acceptanceRequired: false の場合:
  → 許可されたプリンシパルなら自動接続

インターフェースエンドポイントの作成(消費者側)

# 消費者VPCからエンドポイントの作成
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-consumer-xxx \
  --service-name com.amazonaws.vpce.ap-northeast-1.vpce-svc-xxx \
  --vpc-endpoint-type Interface \
  --subnet-ids subnet-consumer-aaa subnet-consumer-bbb \
  --security-group-ids sg-endpoint-xxx \
  --private-dns-enabled true

# プロバイダーがリクエストを承認
aws ec2 accept-vpc-endpoint-connections \
  --service-id vpce-svc-xxx \
  --vpc-endpoint-ids vpce-yyy
VPCピアリング:
  ✅ 双方向通信が可能
  ❌ CIDRが重複するVPCとはピアリング不可
  ❌ 推移的ルーティング不可(A-B-CのCIDRをAから参照不可)
  ❌ VPC内の全リソースが相互アクセス可能(アクセス制御が粗い)
  使い所: 信頼されたVPC間の全面的な通信

PrivateLink:
  ✅ 特定サービスのみを公開(サービス単位のアクセス制御)
  ✅ CIDRが重複していても使用可能
  ✅ 推移的接続が実現できる(サービス経由)
  ✅ クロスアカウント・クロスリージョンに対応
  ❌ 単方向(消費者 → プロバイダー)
  使い所: SaaS的なサービス公開、マルチテナント

多くのAWSサービスがPrivateLinkを通じてVPC内からアクセスできる(インターフェース型VPCエンドポイント)。

# S3 へのインターフェース型エンドポイント(PrivateLink)
# ※ S3はゲートウェイ型もあるが、インターフェース型でPrivateLinkも使える
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-xxx \
  --service-name com.amazonaws.ap-northeast-1.s3 \
  --vpc-endpoint-type Interface \
  --subnet-ids subnet-aaa \
  --security-group-ids sg-xxx \
  --private-dns-enabled true
インターフェース型エンドポイント対応サービス(例):
  - EC2, ECS, ECR
  - Secrets Manager, SSM Parameter Store
  - KMS
  - CloudWatch Logs
  - SQS, SNS, EventBridge
  - Kinesis
  - S3(インターフェース型)
  - API Gateway

セキュリティグループ設計

インターフェースエンドポイントのSG:
  インバウンド: 443(HTTPS)→ VPC CIDR または特定SG
  アウトバウンド: 通常は設定不要

エンドポイントポリシーとSGの関係:
  SG: ネットワークレベルのアクセス制御(IP/ポート)
  エンドポイントポリシー: IAMポリシーレベルの制御(API操作ごと)
  
両方設定することで多層防御が実現できる

試験頻出ポイント

シナリオ回答
CIDRが重複するVPC間のプライベート接続PrivateLink(VPCピアリングは不可)
SaaS型サービスをAWSに公開エンドポイントサービス + PrivateLink
特定サービスのみをVPCに公開PrivateLink(VPCピアリングより細かい制御)
消費者がエンドポイント接続時に承認必要acceptanceRequired: true
PrivateLinkの方向消費者 → プロバイダー(単方向)

まとめ

PrivateLinkはサービス単位でのプライベート公開を実現し、CIDRの重複があるVPCでも使える。VPCピアリングが全リソースへの双方向アクセスを提供するのに対し、PrivateLinkは特定サービスを安全に公開するマイクロサービス・SaaS向けのアーキテクチャに適している。