この記事の前提
- 対象読者: AWSのネットワークを触っている人。VPCエンドポイントの存在は分かるが、ゲートウェイ型/インターフェース型の違いが分からない人
- ゴール: 自分の構成でどちらを選ぶべきか判断できるようになること
- 注意: 対応サービス数・対応リージョン・料金体系は今後変更となる可能性があります。設計時はAWS公式ドキュメントで最新の仕様を確認してください
VPCエンドポイントとは
例として、VPCの中にあるEC2から、S3を使いたい場合に通るのが、VPCエンドポイントです。
インターネットゲートウェイ・NAT・パブリックIP(いずれも外部とやり取りするためのネットワークサービス)を使わずに、AWSサービスへ到達するための出入口が、VPCエンドポイントです。外部に通信が露出しないため、安全にAWSサービスへ接続できます。
VPCエンドポイントには5つの種類がありますが、AWSサービスへのアクセスに使うのは「ゲートウェイ型」と「インターフェース型」の2つだけです。この記事ではその2つの違いについてお話します。
VPCエンドポイントとは?
- VPC内でAWSサービスと通信できる
- ゲートウェイ型とインターフェース型の2種類ある
結論
ゲートウェイ型と、インターフェース型の違いは
- 「ルートテーブル経由 = ゲートウェイ型」
- 「ENI(プライベートIPアドレス)経由 = インターフェース型」
の2点で、S3/DynamoDBなら基本的にゲートウェイ型、これ以外のほとんどのサービス(200以上)はインターフェース型を利用します。
ルートテーブルは宛先ごとの道案内表、ENI(ElasticNetworkInterface)はVPCの中に置かれるネットワークの差し込み口でプライベートIPを1つ持ちます。
ポイント
- 宛先IPがプライベートIPかどうか
- ルートテーブルとGatewayがあるかどうか
上記2つの違いから、料金もオンプレから使えるかどうかが変わってきます。順番に見ていきます。
違い①:DNSが返すIPが違う
AWSサービスのDNS名前解決(ドメイン名をIPアドレスに変換する仕組み)の答えが違います。
- ゲートウェイ型は、サービスのパブリックIPがそのまま返ってきます
- インターフェース型は、VPC内に作られたENIのプライベートIPが返ってきます
ゲートウェイ型
ゲートウェイ型では、エンドポイント専用のDNS名は払い出されません。使うのは本来のドメイン名のままです。
例えば、S3は下記のようになります。
s3.ap-northeast-1.amazonaws.com
これを名前解決しても、返ってくるのはS3の パブリックIP です。エンドポイントを作る前と後で、DNSの答えは変わりません。
インターフェース型
ゲートウェイ型と反対に、S3にインターフェース型のエンドポイントを作ると、専用のDNS名が払い出されます。
bucket.vpce-1a2b3c4d-5e6f.s3.ap-northeast-1.vpce.amazonaws.com
これを名前解決すると、ENIの プライベートIP が返ります。「プライベートDNS名を有効化」をオンにしておけば、この長い名前を使わなくても、本来の s3.ap-northeast-1.amazonaws.com を引くだけでプライベートIPが返るようになります。
ちなみに、他のサービスの例で、EC2のAPIサービスのDNSに対してVPCエンドポイント(インターフェース型)を作成すると下記のようになります。
vpce-1a2b3c4d-5e6f.ec2.ap-northeast-1.vpce.amazonaws.com
これも名前解決すると、ENIのプライベートIPが返ります。「プライベートDNS名を有効化」をオンにすることによる名前短縮の恩恵は同様に得られます。
違い②:ルートテーブルとGatewayがあるかどうか
ゲートウェイ型
宛先はパブリックIPのままです。放っておけばインターネットへ出ていきます。
そこでルートテーブルに「対象IPレンジ宛はGateway Endpointへルーティングするルート」を加え、経路を設定します。通常、VPCエンドポイントを作成すると自動で当該ルートがAWSマネージドプレフィックスリスト(pl-xxxx)で作成されます。要は、ユーザがひとつずつ設定しなくて問題ないです。
インターフェース型
宛先が同じVPC内のIPなので、そのまま届きます。ルートテーブルもGatewayも要りません。
代わりにENIという実体がサブネットの中に置かれます。これが料金差の理由です。
| 実体 | 料金 | |
|---|---|---|
| ゲートウェイ型 | 経路の設定だけ | 追加料金なし |
| インターフェース型 | ENIという実体がある | 時間課金+データ処理課金 |
違い③:オンプレから使えるかどうか
オンプレミス(社内ネットワークなどクラウド以外のネットワーク・サーバ)からのアクセスについての対象サービスの利用可否が変わります。
ゲートウェイ型:
AWSクライアント内のルートテーブルの設定に従います。ルートが効くのはVPC内のサブネットだけなので、 オンプレからは届きません。
インターフェース型:
宛先はVPC内のプライベートIPです。そのIPに届く経路さえあれば、送信元がVPCの外でも構いません。VPNやDirect Connectのオンプレと接続するサービスを経由し、AWSクラウド環境がプライベートIPアドレス空間で繋がっていればそのまま使えます。
オンプレからのプライベートアクセスが要件に入った時点で、 選択肢はインターフェース型だけになります。
一覧比較
上記までの仕様を一覧化した表です。
| 観点 | ゲートウェイ型 | インターフェース型 |
|---|---|---|
| 対象サービス | S3・DynamoDBのみ | 200以上 |
| 宛先IP | パブリックIP | プライベートIP |
| ルートテーブル | 必要 | 不要 |
| VPC内の実体 | なし | ENI |
| オンプレから | 使えない | 使える |
| 追加料金 | なし | あり |
S3は2021年2月、DynamoDBは2024年3月からインターフェース型にも対応しました。この2サービスだけはどちらも選べます。
判断フロー
ゲートウェイア型、インターフェース型を利用する場面を選択する際のフローです。
VPC内からしか使わず、対象がS3かDynamoDBならゲートウェイ型。追加料金がかからないので、ほかに選ぶ理由がありません。
ハマりどころ3つ
1. アクションごとにエンドポイントが分かれる
同じサービスでも、APIの系統が違えばエンドポイントは別物です。Bedrockでモデル一覧の取得と推論の実行を両方やるなら、東京リージョンでは2つ要ります。
bedrock.ap-northeast-1.amazonaws.com
bedrock-runtime.ap-northeast-1.amazonaws.com
一部のAPIだけタイムアウトするなら、まずここを疑ってください。
2. ENIのセキュリティグループで443を開け忘れる
インターフェース型の通信先はVPC内のENIです。そのENIに付くセキュリティグループでHTTPS(443)を許可していないと止まります。
厄介なのは、名前解決だけは成功してしまうこと。プライベートIPはちゃんと返るのに、接続だけがタイムアウトします。
3. プライベートDNS名を有効化していない
インターフェース型を作るときの「プライベートDNS名を有効化」というオプション。オフのままだと、サービス本来のドメイン名を引いてもパブリックIPが返ります。違い①の図の上段のまま、エンドポイントがあるのに一切使われません。
アプリ側の接続先を書き換えたくないなら、オンにしておきます。
まとめ
ゲートウェイ型、インターフェース型の違いと使い方についてのまとめです。
- 違いは「DNSが返すIP」と「ルートテーブルとゲートウェイの有無」の2点
- ゲートウェイ型はS3/DynamoDB限定、追加料金なし、オンプレからは使えない
- インターフェース型はENIを持つので課金あり、200以上のサービスとオンプレに対応
- VPC内だけでS3/DynamoDBならゲートウェイ型、それ以外はインターフェース型
- 作っただけで使われていないことがあるので、
digで確認する