こんにちは。自称ネットワーク技術者の貝塚です。SCSKでAWSの内製化支援『テクニカルエスコートサービス』を担当しています。
業務でヤバいくらいお世話になっているひつじちゃんがVPCエンドポイントについての記事を書いていました。
ひつじちゃんリスペクト記事として、VPCエンドポイントに関する役立ちそうで役立たない豆知識を書きます。
問題
インターフェース型のエンドポイントのIPはプライベートとなります。
(Amazon VPC エンドポイントについて整理してみる より引用)
とありますが、プライベートIPアドレスがつけられたエンドポイント(例えばSystems Manager用のインターフェース型エンドポイント)に、VPC内のEC2インスタンスなどがアクセスできているのはどうしてでしょうか?
答え
Route 53 Resolverが返すIPアドレスが書き換わっているから。
解説
Route 53 Resolverとは、Amazon Provided DNSなどとも呼ばれる、EC2インスタンスを作成したときにデフォルトで指定されているDNSのことです。
さて、AWSの各種サービスにアクセスするためのインターフェース型エンドポイントにはDNS名がついています。
たとえばec2messagesサービスの場合はこうです。
ec2messagesインターフェース型エンドポイントがないVPCからこの名前を解決してみると以下のようになります。
[ec2-user@ip-10-32-1-157 ~]$ dig ec2messages.ap-northeast-1.amazonaws.com (略) ;; ANSWER SECTION: ec2messages.ap-northeast-1.amazonaws.com. 58 IN A 52.119.223.180 (略)
グローバルIPアドレスが返ってきています。
ec2messagesインターフェース型エンドポイントがあるVPCから名前解決するとこうなります。
[ec2-user@ip-10-33-1-124 ~]$ dig ec2messages.ap-northeast-1.amazonaws.com (略) ;; ANSWER SECTION: ec2messages.ap-northeast-1.amazonaws.com. 32 IN A 10.33.1.68 (略)
VPC内のIPアドレスが返ってきます。
このようにDNSの名前解決の仕組みによって、本来インターネット上にあるAWSのサービスエンドポイントを、利用者が意識することなくVPC内の通信にしてくれているわけです。
インターネットゲートウェイがなくてもとりあえずVPC内にssmとssmmessagesとec2messagesのエンドポイントを作っておけばSession ManagerでEC2インスタンスにログインできるようになる、とおまじないのように覚えている方の理解を深める一助になれば幸いです。
役に立たない豆知識
インターフェース型エンドポイントは、どこのVPCからの通信か、とか気にしてないので、たとえばVPCピアリングしたお隣のVPCにいるEC2インスタンスのhostsにこんな感じで書いてあげれば、お隣VPCのインスタンスにもSession Managerで接続できるようになります。
[ec2-user@ip-10-32-1-157 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost6 localhost6.localdomain6 # Added for connection to VPC interface endpoints 10.33.1.68 ec2messages.ap-northeast-1.amazonaws.com 10.33.1.138 ssmmessages.ap-northeast-1.amazonaws.com 10.33.1.21 ssm.ap-northeast-1.amazonaws.com
いちいちこれ設定するくらいなら各VPCにエンドポイント作った方が面倒がなくてよくない?というのはあります……。
それではご査収ください。