NAT を使わずプライベートに AWS API へ通信する ― Gateway / Interface エンドポイントを構築する
VPC エンドポイントを使うと、インターネットゲートウェイや NAT ゲートウェイを経由せずに、VPC 内から AWS サービスへプライベートに通信できます。このハンズオンでは、S3 への Gateway Endpoint、SSM / Secrets Manager への Interface Endpoint を構築し、プライベートサブネットの EC2 から NAT なしで AWS API にアクセスする構成を体験します。
| 項目 | 内容 |
|---|---|
| 対象サービス | VPC Endpoint(Gateway / Interface)、AWS PrivateLink、S3、SSM、Secrets Manager |
| 主な学習内容 | Gateway / Interface エンドポイント / プライベート DNS / エンドポイントポリシー / SG 制御 |
| 所要時間 | 75〜90 分 |
| 難易度 | ★★★★☆(中〜上級者向け) |
| 前提知識 | VPC / サブネット / ルートテーブル / セキュリティグループの理解 |
| 費用目安 | 約 1〜2 USD(Interface Endpoint は 1 個あたり約 0.014 USD/時。終了後削除) |
| 項目 | Gateway Endpoint | Interface Endpoint |
|---|---|---|
| 対象サービス | S3・DynamoDB のみ | ほとんどの AWS サービス |
| 仕組み | ルートテーブルにルート追加 | サブネットに ENI を配置(PrivateLink) |
| 料金 | 無料 | 有料(時間 + データ処理) |
| DNS | パブリック DNS のまま | プライベート DNS で上書き |
EC2 をパブリック IP / NAT なしのプライベートサブネットに置いても、Interface Endpoint があれば Session Manager で接続でき、S3 にもアクセスできます。「インターネットに一切出さずに運用する」セキュアな構成の基礎です。
ap-northeast-1(東京) を使用AmazonSSMManagedInstanceCore 付き)をプライベートサブネットに 1 台EC2 のプライベートサブネットのルートテーブルから NAT ゲートウェイへの 0.0.0.0/0 ルートを一時的に外すと、「エンドポイント経由でしか通信できない」状態を作れ、効果を体感しやすくなります。
「VPC」→「エンドポイント」→「エンドポイントを作成」 をクリックします。
| 設定項目 | 設定値 |
|---|---|
| サービスカテゴリ | AWS のサービス |
| サービス名 | com.amazonaws.ap-northeast-1.s3(タイプ: Gateway) |
| VPC | handson-vpc |
| ルートテーブル | プライベートサブネットのルートテーブル |
| ポリシー | フルアクセス(後で絞る) |
「エンドポイントを作成」をクリックします。
選択したルートテーブルを開くと、送信先に pl-xxxxxx(S3 のプレフィックスリスト)、ターゲットに vpce-xxxxxx のルートが自動追加されています。これで S3 宛トラフィックがエンドポイント経由になります。
ルートテーブルに S3 プレフィックスリスト宛のルートが追加され、エンドポイントのステータスが「利用可能」になれば成功です。Gateway Endpoint は無料です。
EC2 コンソールから対象インスタンスを選び 「接続」→「Session Manager」 で接続します(この時点では NAT 経由。ステップ 3 で NAT なしでも接続できるようにします)。
プライベートルートテーブルから NAT への 0.0.0.0/0 ルートを削除します。その状態でも上記の aws s3 ls は成功しますが、curl https://example.com はタイムアウトします。S3 だけがエンドポイント経由で到達できている証拠です。
NAT がなくても S3 操作が成功し、一般のインターネット通信は失敗することを確認できれば、Gateway Endpoint が機能しています。
NAT を完全に外しても Session Manager で接続できるように、SSM 系の Interface Endpoint を作ります。
Session Manager には以下 3 つの Interface Endpoint が必要です。それぞれ「エンドポイントを作成」で作成します。
| サービス名 | 用途 |
|---|---|
| com.amazonaws.ap-northeast-1.ssm | SSM 本体 API |
| com.amazonaws.ap-northeast-1.ssmmessages | Session Manager の通信 |
| com.amazonaws.ap-northeast-1.ec2messages | SSM エージェント通信 |
| 設定項目 | 設定値 |
|---|---|
| タイプ | Interface |
| VPC | handson-vpc |
| サブネット | プライベートサブネット(2 AZ) |
| プライベート DNS 名を有効化 | オン(重要) |
| セキュリティグループ | 後述の sg-endpoint |
有効にすると、ssm.ap-northeast-1.amazonaws.com という通常のエンドポイント名が VPC 内では自動的にエンドポイントの ENI(プライベート IP)に解決されます。アプリ側のコード変更なしでプライベート通信に切り替わります。
NAT ルートを外したまま、EC2 に Session Manager で接続できることを確認します。エンドポイントが効いていれば、インターネットに一切出ずに接続できます。
NAT ゲートウェイへのルートがない状態でも、Session Manager で EC2 に接続できれば成功です。
サービス名 com.amazonaws.ap-northeast-1.secretsmanager で Interface Endpoint を作成します(プライベート DNS 有効、同じプライベートサブネット・SG)。
エンドポイントの「ポリシー」タブで、特定のシークレットだけ許可するように制限できます。VPC からアクセスできる範囲をエンドポイント単位で最小化できます。
{
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:ap-northeast-1:<AccountId>:secret:handson/*"
}]
}
エンドポイント名がプライベート IP に解決され、NAT なしでシークレットを取得できれば成功です。
Interface Endpoint の ENI はセキュリティグループで保護できます。誰がエンドポイントを使えるかを制御します。
sg-endpoint を作成し、インバウンドルールで EC2 の SG からの HTTPS(443)だけを許可します。
| タイプ | ポート | ソース |
|---|---|---|
| HTTPS | 443 | sg-ec2(EC2 のセキュリティグループ) |
各 Interface Endpoint にこの SG を割り当てます。
EC2 の SG を一時的にソースから外すと、エンドポイント経由の API がタイムアウトすることを確認します(443 が届かなくなるため)。確認後は元に戻します。
自社の ALB/NLB の背後にあるサービスを、別 VPC や別アカウントに Endpoint Service として公開できるのが PrivateLink です。SaaS 提供者が顧客 VPC にプライベート接続を提供する仕組みもこれです。NLB + エンドポイントサービスを作成し、コンシューマー側で Interface Endpoint を作れば、インターネットを経由しないサービス間接続が実現します。
SG でソースを許可したときのみエンドポイント経由の通信が成功し、外すとタイムアウトすることを確認できれば、エンドポイントのアクセス制御を理解できています。
Interface Endpoint は 1 個あたり約 0.014 USD/時 × AZ 数の課金が続きます。複数作成しているので、終了後は必ずすべて削除してください。Gateway Endpoint は無料です。
0.0.0.0/0 → NAT を再追加sg-endpoint を削除| 習得したスキル | 実践内容 |
|---|---|
| Gateway Endpoint | S3 用エンドポイント・ルートテーブル連携(無料) |
| プライベート疎通 | NAT なしで S3 アクセス・インターネット遮断の確認 |
| Interface Endpoint | SSM 3 種で NAT なし Session Manager 接続 |
| プライベート DNS | エンドポイント名をプライベート IP に自動解決 |
| アクセス制御 | SG とエンドポイントポリシーによる最小化 / PrivateLink の概念 |