概要
VPC 内のリソースから Amazon S3 や AWS Systems Manager などの AWS サービスにアクセスする場合、通常はインターネットゲートウェイや NAT ゲートウェイを経由してパブリックなエンドポイントに接続します。しかし、外部に出ない構成のプライベートサブネットからこれらのサービスを利用したい、あるいはセキュリティ要件上トラフィックをインターネットに出したくない、というケースは少なくありません。
VPC エンドポイントは、インターネットゲートウェイや NAT ゲートウェイを経由せず、VPC から AWS サービスへプライベートに接続するための仕組みです。トラフィックは AWS のネットワーク内に閉じるため、セキュリティが向上し、NAT ゲートウェイのデータ処理料金を抑えられる場合もあります。
本記事では、VPC エンドポイントの 2 種類(ゲートウェイ型・インターフェイス型)の違いを理解し、S3 向けのゲートウェイ型エンドポイントと Systems Manager 向けのインターフェイス型エンドポイントを実際に作成してプライベート接続を構成するところまで体験します。

この記事のメリット
- VPC エンドポイントの役割と、インターネット経由のアクセスとの違いを理解できる
- ゲートウェイ型エンドポイントとインターフェイス型エンドポイントの仕組み・対象サービス・課金の違いを把握できる
- ゲートウェイ型エンドポイントを作成し、ルートテーブルにプレフィックスリスト宛のルートが追加される挙動を確認できる
- インターフェイス型エンドポイントをサブネット・セキュリティグループ・プライベート DNS とあわせて構成する手順を習得できる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説



とひさん、プライベートサブネットに置いた EC2 から S3 のファイルを読みたいんですけど、プライベートサブネットってインターネットに出られないですよね?どうやって S3 にアクセスするんですか?
いい質問だね!S3 や DynamoDB みたいな AWS のサービスって、実はインターネット越しの「パブリックなエンドポイント」を持っているんだ。だから普通にアクセスしようとすると、インターネットゲートウェイか NAT ゲートウェイを通って外に出る必要があるんだよ。



なるほど。でもプライベートサブネットだとそのルートがないから、アクセスできないってことですね。
そうそう。そこで登場するのが VPC エンドポイントなんだ。VPC エンドポイントを使うと、インターネットゲートウェイや NAT ゲートウェイを経由せずに、VPC から AWS サービスへプライベートに接続できるようになるんだよ。トラフィックは AWS のネットワーク内に閉じたままなんだ。



インターネットに一度も出ずに S3 に届くってことですか!それはセキュリティ的にも安心ですね。
その通り。トラフィックが AWS ネットワークの外に出ないからセキュリティが上がるし、NAT ゲートウェイを経由しなくなることでデータ処理料金を節約できる場合もあるんだ。


エンドポイントの種類



VPC エンドポイントって 1 種類だけなんですか?
それがね、大きく分けて 2 種類あるんだ。「ゲートウェイ型エンドポイント」と「インターフェイス型エンドポイント」だよ。まずはゲートウェイ型から説明するね。
ゲートウェイ型エンドポイントは、対象が Amazon S3 と DynamoDB の 2 つだけ、という特別なエンドポイントなんだ。AWS PrivateLink という仕組みは使わずに、ルートテーブルにルートを追加することで実現するんだよ。



ルートテーブルにルートを追加…って、前回やったインターネットゲートウェイへのルートみたいな感じですか?
イメージは近いよ。ゲートウェイ型エンドポイントを作るときに、どのルートテーブルに関連付けるかを選ぶんだ。すると、そのルートテーブルに「S3 宛のトラフィックはこのエンドポイントへ」というルートが自動で追加されるんだよ。送信先には「プレフィックスリスト」というものが使われるんだ。



プレフィックスリスト…また新しい言葉が出てきました。
プレフィックスリストは、複数の CIDR をひとまとめにした名前付きのリストだと思ってもらえばいいよ。S3 のパブリック IP アドレス範囲は広くて頻繁に変わるから、いちいち CIDR を書くのは大変なんだ。そこで AWS が「S3 用のプレフィックスリスト」を用意してくれていて、ルートの送信先にそれを指定するんだよ。pl- で始まる ID で表されるよ。



なるほど!S3 宛かどうかを AWS 管理のリストで判定してくれるんですね。ちなみにゲートウェイ型って料金はかかるんですか?
ゲートウェイ型エンドポイントは追加料金なしで使えるんだ。これは嬉しいポイントだね。じゃあ次はもう 1 つのインターフェイス型を見てみよう。
インターフェイス型エンドポイントは、AWS PrivateLink という技術をベースにしたエンドポイントで、S3 や DynamoDB だけじゃなく、Systems Manager や EC2、CloudWatch などほとんどの AWS サービスに対応しているんだ。



対応サービスが広いんですね!ゲートウェイ型と仕組みはどう違うんですか?
インターフェイス型は、指定したサブネットの中に ENI(Elastic Network Interface)が作られるんだ。この ENI はサブネットの CIDR からプライベート IP アドレスを 1 つもらうよ。VPC 内のリソースは、その ENI のプライベート IP を経由してサービスに接続するんだ。



ENI ってサブネットの中の「ネットワークの差込口」みたいなものでしたよね。エンドポイント用の差込口がサブネットにできるイメージですか?
まさにそういうイメージだよ!ENI には IP アドレスがあるから、セキュリティグループも関連付けられるんだ。VPC 内のリソースからその ENI へ HTTPS(443 番ポート)で通信できるようにセキュリティグループを設定するのがポイントだね。



ENI に IP があるってことは、サービスの名前を引いたら本来はパブリックな IP が返ってきそうですけど、それだとエンドポイントを通らないですよね?
いいところに気づいたね!そこで使うのが「プライベート DNS」という機能なんだ。これを有効にすると、たとえば ssm.ap-northeast-1.amazonaws.com のようなサービスの標準の DNS 名を引いたときに、ENI のプライベート IP が返ってくるようになるんだ。だからアプリケーション側のコードを変えなくても、自動的にエンドポイント経由になるんだよ。



コードを変えずに済むのは便利ですね!プライベート DNS を使うために何か前提はありますか?
プライベート DNS を使うには、VPC の「DNS ホスト名」と「DNS 解決」の両方を有効にしておく必要があるんだ。VPC を作るときに設定する項目だね。インターフェイス型は S3 以外のサービスではプライベート DNS がデフォルトで有効になるよ。



インターフェイス型は料金がかかるんでしたっけ…?
そうだね。インターフェイス型エンドポイントは、エンドポイントが存在している時間に応じた時間課金と、処理したデータ量に応じたデータ処理課金がかかるんだ。使わなくなったら削除するのを忘れないようにしようね。ここまでの 2 種類をまとめるとこうなるよ。
| 項目 | ゲートウェイ型エンドポイント | インターフェイス型エンドポイント |
|---|---|---|
| 基盤技術 | ルートテーブルによるルーティング | AWS PrivateLink |
| 対象サービス | Amazon S3、DynamoDB のみ | S3・DynamoDB を含むほとんどの AWS サービス |
| VPC 側に作られるもの | ルートテーブルへのルート(プレフィックスリスト宛) | サブネット内の ENI |
| セキュリティグループ | 関連付け不可(ルート単位の制御) | ENI に関連付け可能 |
| プライベート DNS | 該当なし | 利用可能(標準 DNS 名で解決) |
| VPC 外からのアクセス | 不可(同一 VPC 内のみ) | 可能(VPN・ピアリング経由など) |
| 課金 | 追加料金なし | 時間課金 + データ処理課金 |



S3 と DynamoDB ならゲートウェイ型を選んでおけば追加料金なし、それ以外のサービスや VPC 外からのアクセスが必要ならインターフェイス型、という使い分けですね!
その整理でばっちりだよ。ちなみにもう 1 つ「Gateway Load Balancer エンドポイント」という種類もあって、これはファイアウォールなどの仮想アプライアンスにトラフィックを通すために使うものなんだ。今回の記事ではこういうものもある、という紹介にとどめておくね。
エンドポイントポリシーによるアクセス制御



エンドポイントを作れば VPC からサービスに繋がるのはわかりました。でも「この S3 バケットだけ許可したい」みたいな細かい制御はできるんですか?
できるよ。それが「エンドポイントポリシー」なんだ。エンドポイントポリシーは、そのエンドポイント経由でどのサービス・どのリソースへのアクセスを許可するかを定義する IAM ポリシー形式のドキュメントなんだ。



エンドポイントに対してポリシーを貼るんですね。IAM ユーザーに貼るポリシーとは別物ですか?
別物だよ。IAM ポリシーが「誰が何をできるか」を制御するのに対して、エンドポイントポリシーは「このエンドポイントを通る通信で何が許可されるか」を制御するんだ。両方の条件を満たしたアクセスだけが通る、と考えるといいよ。
たとえばエンドポイントポリシーで「特定の S3 バケットへの読み取りだけ許可」と書いておけば、そのエンドポイント経由ではほかのバケットには一切アクセスできなくなるんだ。作成時はデフォルトでフルアクセスのポリシーが付くから、必要に応じて絞り込む、という使い方になるね。



エンドポイントという「通り道」自体に制限をかけられるんですね。多層防御という感じがします!
実践
S3 向けのゲートウェイ型エンドポイントと、Systems Manager 向けのインターフェイス型エンドポイントを作成し、プライベートサブネットから AWS サービスへプライベート接続する構成を VPC コンソールで作成します。
前提条件
- リージョン:
ap-northeast-1(東京) - IAM ユーザーまたはロールに VPC・エンドポイント関連リソースの操作権限があること
- 以下のリソースが作成済みであること
| リソース種別 | リソース名 | 補足 |
|---|---|---|
| VPC | vpce-vpc | CIDR 10.0.0.0/16、DNS ホスト名・DNS 解決が有効 |
| プライベートサブネット | vpce-private-subnet | CIDR 10.0.1.0/24、AZ: ap-northeast-1a |
| ルートテーブル | vpce-private-rt | vpce-private-subnet に関連付け済み |
| セキュリティグループ | vpce-endpoint-sg | VPC CIDR からの HTTPS(443) インバウンドを許可 |
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| ゲートウェイ型エンドポイント | vpce-s3-gateway | S3 へのプライベート接続 |
| インターフェイス型エンドポイント | vpce-ssm-interface | Systems Manager(ssm)へのプライベート接続 |
ステップ1: S3 向けゲートウェイ型エンドポイントを作成する
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
VPCと入力し、表示された「VPC」を選択します - 左側ナビゲーションの「エンドポイント」を選択し、「エンドポイントを作成」をクリックします
- 以下の内容を入力します
- 名前タグ:
vpce-s3-gateway - タイプ:
AWS のサービス - 「サービス」の検索ボックスに
s3と入力し、絞り込み条件で「タイプ」がGatewayのサービス(com.amazonaws.ap-northeast-1.s3)を選択します - 「VPC」で
vpce-vpcを選択します - 「ルートテーブル」セクションで
vpce-private-rtにチェックを入れます - 「ポリシー」は
フルアクセスを選択します


- ページ下部の「エンドポイントを作成」をクリックします
- エンドポイントの状態が
使用可能になったことを確認します


ステップ2: ルートテーブルに追加されたルートを確認する
ゲートウェイ型エンドポイントを作成すると、関連付けたルートテーブルに S3 宛のルートが自動で追加されます。
- 左側ナビゲーションの「ルートテーブル」を選択します
vpce-private-rtを選択し、「ルート」タブを選択します- 送信先がプレフィックスリスト(
pl-で始まる ID)、ターゲットが作成したエンドポイント(vpce-で始まる ID)のルートが追加されていることを確認します


このルートにより、vpce-private-subnet 内のリソースからの S3 宛トラフィックがエンドポイント経由でルーティングされます。
ステップ3: Systems Manager 向けインターフェイス型エンドポイントを作成する
- 左側ナビゲーションの「エンドポイント」を選択し、「エンドポイントを作成」をクリックします
- 以下の内容を入力します
- 名前タグ:
vpce-ssm-interface - タイプ:
AWS のサービス - 「サービス」の検索ボックスに
ssmと入力し、サービス名がcom.amazonaws.ap-northeast-1.ssm(タイプがInterface)のサービスを選択します - 「VPC」で
vpce-vpcを選択します - 「追加設定」の「DNS 名を有効化」にチェックが入っていることを確認します(プライベート DNS が有効になります)
- 「サブネット」セクションで、アベイラビリティーゾーン
ap-northeast-1aを選択し、サブネットにvpce-private-subnetを指定します - 「IP アドレスタイプ」は
IPv4を選択します


- 「セキュリティグループ」セクションで、
vpce-endpoint-sgにチェックを入れます(VPC のデフォルトセキュリティグループにチェックが入っている場合は外します) - 「ポリシー」は
フルアクセスを選択します


- ページ下部の「エンドポイントを作成」をクリックします
ステップ4: インターフェイス型エンドポイントの状態を確認する
- 左側ナビゲーションの「エンドポイント」を選択し、
vpce-ssm-interfaceを選択します - 作成直後の状態は
保留中で、しばらくすると使用可能に変わります - 「サブネット」タブを選択し、
vpce-private-subnet内に ENI のプライベート IP アドレスが割り当てられていることを確認します


「詳細」タブの「DNS 名」に、ssm.ap-northeast-1.amazonaws.com を含む DNS 名が表示されていれば、プライベート DNS が有効になっています。VPC 内のリソースから Systems Manager の標準 DNS 名を引くと、このエンドポイントの ENI のプライベート IP が返されるようになります。
まとめ
- VPC エンドポイントは、インターネットゲートウェイや NAT ゲートウェイを経由せず、VPC から AWS サービスへプライベートに接続する仕組みである
- ゲートウェイ型エンドポイントは Amazon S3 と DynamoDB が対象で、ルートテーブルにプレフィックスリスト宛のルートが追加され、追加料金なしで利用できる
- インターフェイス型エンドポイントは AWS PrivateLink ベースで、サブネット内に ENI が作られ、セキュリティグループとプライベート DNS を利用でき、時間課金とデータ処理課金がかかる
- プライベート DNS を有効にすると、サービスの標準 DNS 名がエンドポイントの ENI のプライベート IP に解決され、アプリケーションの変更なしでエンドポイント経由の通信になる
- エンドポイントポリシーを使うと、エンドポイント経由でアクセスできるサービスやリソースを制限できる
参照先
- AWS PrivateLink とは
- ゲートウェイエンドポイントを使用して AWS サービスにアクセスする
- インターフェイスエンドポイントを使用して AWS サービスにアクセスする
- Amazon S3 のエンドポイント
- VPC エンドポイントポリシーを使用してサービスへのアクセスを制御する












