SJ blog
architecture
A

信頼度ランク

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リスト) へのエントリーが自動追加される。サブネットのルートテーブルにこのエントリーが追加されたサブネットからのみ、エンドポイント経由のアクセスが有効だ。

対応サービス: 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を選ぶ。