メモ
- AWSサービス毎、サブネット毎(ただし同じAZのサブネットは2つ以上指定できない)に有効にできる
- 例えば「EC2」のAPIエンドポイントに対して、既存のサブネット4つのうち2つをインターフェイス VPC エンドポイントを有効にする、等
- 有効にするとそのサブネットでENIが生成される
- 有効にしたサブネット(AZ)毎にプライベートDNS名が払い出される
- 「Private DNS names enabled」をEnabledにするとデフォルトのAPIエンドポイントのIPアドレスがVPCエンドポイントになる
検証
上図のようにインターネットへの到達性の無いプライベートサブネットのインスタンスに踏み台からログインし、動作確認する。
「Private DNS names enabled」が有効の場合
デフォルトのAPIエンドポイントに対して dig する。VPCエンドポイントのIPアドレスが返答されている
[ec2-user@ip-10-0-1-64 ~]$ dig ec2.ap-northeast-1.amazonaws.com
;; ANSWER SECTION:
ec2.ap-northeast-1.amazonaws.com. 60 IN A 10.0.0.254
ec2.ap-northeast-1.amazonaws.com. 60 IN A 10.0.1.11
当然、インターネット(例: 8.8.8.8)には到達性は無いが、AWS APIは使用できる。
[ec2-user@ip-10-0-1-64 ~]$ ping 8.8.8.8 -c 1 -W 3
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
[ec2-user@ip-10-0-1-64 ~]$ aws ec2 describe-instances --query 'Reservations[].Instances[].{ipaddress:NetworkInterfaces[].PrivateIpAddress[]'}
[
{
"ipaddress": [
"172.31.15.184"
]
}
]
「Private DNS names enabled」が無効の場合
デフォルトのAPIエンドポイントは普通にグローバルIPアドレスが返答される。
[ec2-user@ip-10-0-1-64 ~]$ dig ec2.ap-northeast-1.amazonaws.com
;; ANSWER SECTION:
ec2.ap-northeast-1.amazonaws.com. 15 IN A 54.239.96.159
プライベートサブネットからはインターネットに到達性が無いので、当然APIも実行できない
[ec2-user@ip-10-0-1-64 ~]$ aws ec2 describe-instances --query 'Reservations[].Instances[].{ipaddress:NetworkInterfaces[].PrivateIpAddress[]'}
ただし、プライベートDNS名で発行されたエンドポイントのURLを直接指定( endpoint-url
)すれば実行できる。
[ec2-user@ip-10-0-1-64 ~]$ aws ec2 describe-instances --query 'Reservations[].Instances[].{ipaddress:NetworkInterfaces[].PrivateIpAddress[]'} --endpoint-url "https://vpce-0c428aae6eb77d7a8-hekvq062.ec2.ap-northeast-1.vpce.amazonaws.com"
[
{
"ipaddress": [
"172.31.15.184"
]
}
]