信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
VPCエンドポイント — InterfaceとGatewayの違い・プライベート接続の設計
VPCのInterfaceエンドポイントとGatewayエンドポイントの仕組みの違い、対応サービス、料金、エンドポイントポリシー、DNS設定、PrivateLinkとの関係を解説。
一言結論
S3とDynamoDBへのVPC内アクセスは無料のGatewayエンドポイントを使うべきで、Systems ManagerなどのマネージドサービスにはInterfaceエンドポイントが必要だが、オンプレミスからDirect Connect経由でS3にアクセスする場合は必ずInterfaceを選択しなければならない。
VPCエンドポイントとは
VPCエンドポイントを使うと、インターネットゲートウェイやNATゲートウェイを経由せずにAWSサービスに直接アクセスできる。プライベートなネットワーク経路でAWSサービスと通信するための仕組みだ。
GatewayエンドポイントとInterfaceエンドポイントの違い
Gatewayエンドポイント
対応サービス: S3 と DynamoDB のみ
仕組み: ルートテーブルにルートエントリーを追加
料金: 無料
DNS変更: なし(エンドポイントURLは変わらない)
# S3用Gatewayエンドポイントの作成
aws ec2 create-vpc-endpoint \
--vpc-id vpc-xxx \
--service-name com.amazonaws.ap-northeast-1.s3 \
--route-table-ids rtb-aaa rtb-bbb \
--vpc-endpoint-type Gateway
ルートテーブルに pl-xxxxx(S3のPrefixリスト) へのエントリーが自動追加される。サブネットのルートテーブルにこのエントリーが追加されたサブネットからのみ、エンドポイント経由のアクセスが有効だ。
Interfaceエンドポイント(AWS PrivateLink)
対応サービス: S3, DynamoDB以外のほぼ全AWSサービス
+ サードパーティサービス(AWS Marketplace)
+ 自社サービス(PrivateLinkで公開)
仕組み: ENI(弾性ネットワークインターフェース)をサブネットに作成
料金: 時間料金($0.014/時間) + データ処理料金($0.01/GB)
DNS変更: Private DNSを有効にするとAWSサービスのエンドポイントURLが
自動的にプライベートIPに解決される
# Systems ManagerへのInterfaceエンドポイントの作成
aws ec2 create-vpc-endpoint \
--vpc-id vpc-xxx \
--service-name com.amazonaws.ap-northeast-1.ssm \
--subnet-ids subnet-aaa subnet-bbb \
--security-group-ids sg-xxx \
--vpc-endpoint-type Interface \
--private-dns-enabled
S3にはどちらも使えるが違いがある
S3はGatewayとInterfaceの両方のエンドポイントが存在する。
Gatewayエンドポイント(無料):
- ルートテーブルで制御
- リクエスト元がVPC内のみ
- インターネット経由を完全にブロックしたい場合に組み合わせる
Interfaceエンドポイント(有料):
- オンプレミスからDirect Connect/VPN経由でS3にアクセスしたい場合
- PrivateLinkベースなのでVPC外からも利用可能
- S3 Access Pointsと組み合わせ可能
エンドポイントポリシー
VPCエンドポイントにもポリシーを設定できる。エンドポイント経由でアクセスできるリソースを制限する。
// S3 GatewayエンドポイントのPolicy: 特定バケットのみアクセス可
{
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::my-private-bucket",
"arn:aws:s3:::my-private-bucket/*"
]
}]
}
// S3バケットポリシー: VPCエンドポイント経由以外のアクセスを拒否
{
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::secure-bucket",
"arn:aws:s3:::secure-bucket/*"
],
"Condition": {
"StringNotEquals": {
"aws:SourceVpce": "vpce-0123456789abcdef0"
}
}
}]
}
Interfaceエンドポイントのセキュリティグループ
Interfaceエンドポイントに付けるセキュリティグループは「どのリソースからエンドポイントにアクセスできるか」を制御する。
EC2セキュリティグループ → エンドポイントSG → エンドポイント → AWSサービス
エンドポイントSGのインバウンドルール:
HTTPS(443): EC2のSGからAllow
HTTP(80): EC2のSGからAllow(HTTPエンドポイントの場合)
オンプレミスからのアクセス
GatewayエンドポイントはVPC外(オンプレミス)からは使えない。オンプレミスから直接AWSサービスへのプライベートアクセスにはInterfaceエンドポイントを使う。
オンプレミス → Direct Connect → VPC → Interfaceエンドポイント → S3/EC2/etc.
試験頻出ポイント
| シナリオ | 回答 |
|---|---|
| コストなしでVPCからS3にプライベートアクセス | Gatewayエンドポイント |
| オンプレミスからS3にプライベートアクセス | Interfaceエンドポイント |
| プライベートサブネットからSSMエージェント | Interfaceエンドポイント(SSM, SSMmessages, EC2messages) |
| エンドポイント経由以外のS3アクセスを禁止 | バケットポリシーにaws:SourceVpce条件 |
| Gatewayエンドポイントはサブネットをまたがるかどうかのか | ルートテーブル単位(サブネット単位で制御) |
まとめ
GatewayエンドポイントはS3/DynamoDBのみで無料、InterfaceはほぼすべてのAWSサービスに対応するが有料だ。プライベートサブネットからNATゲートウェイなしでS3にアクセスするならGateway、Systems Manager等の管理サービスにはInterfaceを使う。オンプレミスからのアクセスが必要な場合は必ずInterfaceを選ぶ。