VPC エンドポイント
VPC 内から AWS サービスにインターネットを経由せずにプライベートにアクセスする仕組み
VPC エンドポイントとは
VPC エンドポイントは、VPC 内のリソース (Lambda, EC2, ECS) から AWS サービス (S3, DynamoDB, SQS) にインターネットを経由せずにプライベートにアクセスする仕組みである。トラフィックが AWS ネットワーク内に留まるため、セキュリティが向上し、NAT ゲートウェイのデータ転送コストを削減できる。
2 つの種類
| 種類 | 対象サービス | コスト | 仕組み |
|---|---|---|---|
| ゲートウェイ型 | S3, DynamoDB のみ | 無料 | ルートテーブルにルートを追加 |
| インターフェース型 | その他の AWS サービス | $0.014/時間 + データ転送 | ENI をサブネットに作成 (PrivateLink) |
ゲートウェイ型は無料で使えるため、S3 や DynamoDB にアクセスする VPC 内のリソースには必ず設定すべきだ。設定しないと、NAT ゲートウェイ経由でインターネットを通ることになり、データ転送料金が発生する。
NAT ゲートウェイとのコスト比較
Lambda を VPC 内に配置して S3 にアクセスする場合:
| 方式 | 月額コスト (100GB 転送) |
|---|---|
| NAT ゲートウェイ | ~$50 (時間料金 $32 + データ処理 $4.5 + 転送 $9) |
| S3 ゲートウェイエンドポイント | $0 (無料) |
| S3 インターフェースエンドポイント | ~$10 (時間料金のみ) |
ゲートウェイ型を使うだけで月 $50 の節約になる。VPC 内の Lambda で S3 や DynamoDB を使う場合、ゲートウェイエンドポイントの設定は必須と考えてよい。
Lambda + VPC でのアクセス経路
Lambda を VPC 内に配置する場合、AWS サービスへのアクセス経路を整理する。
Lambda (VPC 内)
→ S3: ゲートウェイエンドポイント (無料)
→ DynamoDB: ゲートウェイエンドポイント (無料)
→ SQS/SNS: インターフェースエンドポイント (有料) or NAT GW
→ Bedrock: インターフェースエンドポイント (有料) or NAT GW
→ 外部 API: NAT ゲートウェイ (有料、VPC エンドポイントでは不可)
エンドポイントポリシー
VPC エンドポイントにはポリシーを設定でき、アクセスを特定のリソースに制限できる。IAM ポリシーとの多層防御を実現する。
{
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-app-bucket/*"
}]
}
よくある落とし穴
ゲートウェイ型のルートテーブル設定漏れ
ゲートウェイエンドポイントを作成しても、Lambda が使うサブネットのルートテーブルに関連付けないと機能しない。プライベートサブネットのルートテーブルを確認する。
インターフェース型のセキュリティグループ
インターフェースエンドポイントの ENI にはセキュリティグループが必要だ。Lambda のセキュリティグループからエンドポイントの 443 ポートへのアウトバウンドを許可する。
理論と実装の両面から学ぶなら関連書籍が参考になる。