目次
VPC エンドポイントの特徴
通常 EC2 インスタンスから S3 へアクセスする場合は、一旦インターネットを経由しなければいけませんが、VPC エンドポイントを利用することによりインターネットゲートウェイを経由せずにプライベート接続ができます。VPC エンドポイントは、インターネットゲートウェイ、NAT デバイス、VPN 接続、または AWS Direct Connect 接続を必要としません。
以下のように異なる環境にある 2つのサービスでプライベート接続ができます。
- EC2 インスタンス ← VPC 内のサービス
- S3 ← リージョンに設置するので VPC 外のサービス
VPC エンドポイントのメリットは VPC にパブリック IP アドレスなどを用意しないで済むだけではなく、以下で説明していますが、エンドポイントポリシー を使用して VPC と同じ AWS アカウントや同じ組織内の AWS のバケットにしかアクセスさせないなどの制御ができる点も挙げられます。
VPC エンドポイントの種類
VPC エンドポイントにはゲートウェイ型とインターフェース型の以下の 2 種類があり、仕組みが大きく異なります。
- ゲートウェイ型 ← 最初にできた(PrivateLink を使わない)
- インターフェイス型 ← 後にできた(PlivateLink 型)
Gateway VPC エンドポイントの特徴
Gateway VPC エンドポイントは、VPC から Amazon S3 または DynamoDB へ、インターネットゲートウェイや NAT を使わずにプライベートに到達させるための VPC エンドポイントです。AWS では、Gateway endpoint は S3 と DynamoDB 専用で、AWS PrivateLink は使わない方式だと説明しています。
Gateway VPC エンドポイントを作ると、ルートテーブルにそのエンドポイント宛ての経路を追加できます。すると、VPC 内の EC2 などが S3 や DynamoDB にアクセスするとき、その通信は NAT Gateway や Internet Gateway を通らず、AWS の内部ネットワーク経由で対象サービスへ届きます。
- サポートされる AWS のサービスを宛先とするトラフィックのルートテーブルで、ルートのターゲットとして指定するゲートウェイです。
- サポートされる AWS のサービスは、Amazon S3 と DynamoDB です。
- 追加料金なしで使用できます。
- サブネットに特殊なルーティングを設定し、AWS リソースが VPC 内部から直接外のサービスと通信することを可能にします。
Gateway VPC エンドポイントの構成図
以下が AWS 公式サイトで説明されている Gateway VPC エンドポイントの構成図です。この構成図を確認すると、Route 53 Resolver がグローバル IP を返しているのでインターネット経由で通信しているように見えますが、実際は VPC エンドポイント(正確には S3 のサービスエンドポイント名)の名前解決をしてグローバル IP が返ってきますが、そのグローバル IP は AWS がそのリージョンの S3 用に管理している CIDR なのでサブネットのルートテーブルでは、S3 のプレフィクスリストを宛先にします。実際はこの S3 のプレフィクスリストにより、通信はインターネットを経由せずに宛先まで到達できます。Gateway VPC エンドポイントはそもそも AWS サービス向けの内部経路です。

エンドポイントポリシー
エンドポイントポリシーは、JSON 形式で「誰が」「どのリソースに」「何ができるか」を細かく制限・保護できます。デフォルトはフルアクセス許可ですが、特定のバケットのみ許可する等の制限が可能で、IAMポリシーやバケットポリシーと組み合わせて強固なセキュリティを確保できます。
付ける場所はコンシューマー側 VPC の VPC エンドポイント自身です。重要なのは、IAM ポリシーやサービス側のリソースポリシーを置き換えるものではないことです。最終的には、IAM ポリシー、エンドポイントポリシー、サービス側のリソースポリシーの合わせ技で決まります。
デフォルトのエンドポイントポリシーは、通常かなり広く、フルアクセス寄りです。そのため、実務では「何も考えずデフォルトのまま」は避けて、少なくとも 対象リソースを絞ることが多いです。
エンドポイントポリシーの例(Gateway VPC エンドポイントの場合)
Gateway VPC エンドポイントのエンドポイントポリシーの例です。このポリシーはコンシューマー側のエンドポイントポリシーに付与します。このエンドポイントで接続できる S3 バケットはmy-company-logs-bucketに絞っていることが分かると思います。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowOnlySpecificBucket",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-company-logs-bucket",
"arn:aws:s3:::my-company-logs-bucket/*"
]
}
]
}
Interface VPC エンドポイントの特徴
Interface VPC エンドポイントは、AWS PrivateLink を使って、VPC から AWS サービスや他 VPC のサービスへ Private IP で接続する仕組みです。Interface VPC エンドポイントは多くの AWS サービスや独自サービスに使えます。(Gateway エンドポイントは AWS PrivateLink を使いません。)
Interface VPC エンドポイントと Gateway VPC エンドポイントの一番大きな違いは VPC の中に ENI が作られることです。Interface VPC エンドポイントを作ると、指定した各サブネットごとに ENI(Elastic Network Interface) が作られ、そこに Private IP アドレス が割り当てられます。マネージドな ENI で、利用者は見えますが自分で通常の ENI のように管理できません。
通信のイメージは以下のようになります。
EC2
↓
VPC 内の private IP(Interface Endpoint の ENI)
↓
AWS PrivateLink
↓
対象サービス
Interface VPC エンドポイントは VPC 内に配置された Private IP 宛てに通信する仕組みです。Interface は DNS で解決されたエンドポイント ENI 宛てに TCP/UDP トラフィックを送ります。
VPC エンドポイントと VPC PrivateLink の違いは?
Interface VPC エンドポイント = PrivateLink ではありません。シンプルに言うと以下のようになります。
- AWS PrivateLink = 仕組み全体の名前(専用通路という仕組み)エンドポイントの入口から相手のサービスまでプライベートにつなぐ仕組み全体
- Interface VPC エンドポイント = その(専用通路という)仕組みを使うために利用者側 VPC に作るプライベートな入口
PrivateLink は VPC 内から VPC 外のサービスへプライベート接続をするための仕組みで IP アドレスの範囲が重なっている別の VPC のサービスへプライベート接続できます。
PrivateLink によって他 VPC のサービスやリソースへプライベート IP アドレスで接続でき、コンシューマーは VPC エンドポイントを作ってプロバイダー側のエンドポイントサービスやリソースに接続します。
VPC エンドポイントとエンドポイントサービスの違いと構成図
- VPC エンドポイント … コンシューマー側(利用者側)が自分の VPC に作る「入口」
- エンドポイントサービス … プロバイダー側(提供者側)が自分のサービスを PrivateLink で公開する「公開口」

構成図にもありますが、VPC エンドポイントは、コンシューマー側(利用者側)の VPC 側に作ります。Interface VPC エンドポイントの場合、コンシューマー側の VPC の指定した各サブネットに ENI と Private IP が作られ、それが通信の入口になります。Interface VPC エンドポイントを作成すると各サブネットに ENI(Endpoint Network Interface)を作り、そこにプライベート IP を割り当てます。
エンドポイントサービスとは、プロバイダー側の相手が公開するものです。通常はプロバイダー側が Load Balancer を背後に置いて エンドポイントサービスを作り、他のアカウントや VPC から PrivateLink で接続できるようにします。サービスプロバイダーは Load Balancer を基にエンドポイントサービスを構成し、コンシューマー(利用者)はそのエンドポイントサービスに接続すると説明しています。
つまり、提供者目線ではこうです。
endpoint service → Load Balancer → backend service
ENI(Elastic Network Interface)
ENI は、仮想ネットワークインターフェース(Elastic Network Interface)のことです。AWS の VPC(仮想プライベートクラウド)内で EC2 インスタンスなどのリソースが通信を行うための仮想ネットワークカード(NIC)です。紛らわしいですが Endpoint Network Interface は、ENI(Elastic Network Interface)の一種です。頭文字を取ると ENI になるのでややこしいです。
- 正式な略称 ENI = Elastic Network Interface
- Endpoint Network Interface = エンドポイント用途の ENI
関係性は以下のようになっています。
ENI(Elastic Network Interface)
└─ endpoint network interface
(VPCエンドポイント用のENI)
ENI なのでプライベート IP 、グローバル IP、セキュリティグループなどが付きます。
Interface VPC エンドポイントのセキュリティ制御ポイント
セキュリティとして制御できるポイント主に以下の 4つがあります。
- 送信元リソースのセキュリティグループ
- VPC エンドポイント ENI のセキュリティグループ
- VPC エンドポイントポリシー
- サービス側の IAM / リソースポリシー / セキュリティグループ
例としての構成図
プロバイダー側のリソースをロードバランサーとその先に EC2 インスタンスがあると想定した場合です。

エンドポイントポリシーの例(Interface VPC エンドポイントの場合)
Interface VPC エンドポイントで Secrets Manager に接続するエンドポイントポリシーの例です。この VPC エンドポイントは、secret:prod/db/password-* のみ接続できます。更に Principal を絞ることも出来ます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowReadSpecificSecretOnly",
"Effect": "Allow",
"Principal": "*",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret"
],
"Resource": "arn:aws:secretsmanager:ap-northeast-1:111122223333:secret:prod/db/password-*"
}
]
}
コメント