目次
BeeXの榊原です。
今回はインターフェイス型VPCエンドポイントの名前解決について記事化しました。
基本単語についてそれぞれ詳細内容と、必要に応じdigコマンドの実行結果をまとめています。
※ドキュメント引用文の日本語が所々不自然ですが、あえてそのまま掲載しています。
前提
・ゲートウェイ型、Gateway Load Balancer型については本記事では触れない
・名前解決先はRoute 53 Resolverを指定。(ローカル環境からの名前解決は除く)
・エンドポイントのサービスカテゴリがAWS servicesのものとする。下記画像参照
基本用語
VPCエンドポイント
グローバルIPをもつAWSのサービスに対して、VPC内部から直接アクセスするための出口(引用元:Amazon VPC Blackbelt)
ほとんどの AWS のサービス は、次の構文を持つパブリックリージョンエンドポイントを提供します。
protocol
://service_code
.region_code
.amazonaws.com
例えば、us-east-2 CloudWatch の Amazon のパブリックエンドポイントは次のとおりです。https://monitoring.us-east-2.amazonaws.com
(引用元:
AWSのサービスを介したアクセスAWS PrivateLink
)
VPCエンドポイントを作成した際、以下の3種類のDNS名が出現します。
1.リージョン毎のパブリックDNS名
2.アベイラビリティゾーン毎のパブリックDNS名
3.プライベートDNS名
実際のコンソール画面で確認してみましょう。例えば東京リージョンでSSM用のエンドポイントを作成すると以下のようにDNS名が出現します。
インターフェイス型エンドポイントを作成した際は下記のようにアベイラビリティゾーン毎にENIが作成されます。
では AWS PrivateLink、プライベートエンドポイントを使用してトラフィックをサービスに送信します。インターフェイス VPC エンドポイントを作成すると、VPC AWS のサービス からの との通信に使用できるリージョンおよびゾーン DNS 名が作成されます。
インターフェイス VPC エンドポイントのリージョンレベルの DNS 名の構文は次のとおりです。
endpoint_id
.service_id
.region
.vpce.amazonaws.com
ゾーンレベルの DNS 名の構文は次のとおりです。
endpoint_id
-az_name
.service_id
.region
.vpce.amazonaws.com
(引用元:AWSのサービスを介したアクセスAWS PrivateLink
)
インターフェイス VPC エンドポイント用に作成される DNS レコードはパブリックです。したがって、これらの DNS 名はパブリックに解決可能です。ただし、VPC 外部からの DNS リクエストは引き続きエンドポイントのネットワークインターフェイスのプライベート IP アドレスを返すため、VPC にアクセスできない限り、これらの IP アドレスを使用してエンドポイントサービスにアクセスすることはできません。(引用元:AWS のサービス を介したアクセス AWS PrivateLink)
1と2はVPCエンドポイント作成時に自動で作成されるパブリックDNSなので、digやnslookupコマンドを打つとENIのプライベートIPアドレスを返してくれます。1と2の各パブリックDNSへのdig実行結果は以下の通りです。
####################################################################
1.リージョン毎のパブリックDNSへのdig
####################################################################
sh-5.2$ dig vpce-0bb20377a387ade86-njczioek.ssm.ap-northeast-1.vpce.amazonaws.com
# 以下実行結果
; <<>> DiG 9.16.48-RH <<>> vpce-0bb20377a387ade86-njczioek.ssm.ap-northeast-1.vpce.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17918
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;vpce-0bb20377a387ade86-njczioek.ssm.ap-northeast-1.vpce.amazonaws.com. IN A
# 各AZのエンドポイントの情報が返ってくる。
;; ANSWER SECTION:
vpce-0bb20377a387ade86-njczioek.ssm.ap-northeast-1.vpce.amazonaws.com. 60 IN A 172.20.144.169
vpce-0bb20377a387ade86-njczioek.ssm.ap-northeast-1.vpce.amazonaws.com. 60 IN A 172.20.128.22
# 名前解決先はRoute 53 Resolver( VPC+2 IP アドレス)
;; Query time: 0 msec
;; SERVER: 172.20.0.2#53(172.20.0.2)
;; WHEN: Tue Jun 25 15:47:38 UTC 2024
;; MSG SIZE rcvd: 130
####################################################################
2.AZ毎のパブリックDNSへのdig(AZ-Aの場合)
####################################################################
sh-5.2$ dig vpce-0bb20377a387ade86-njczioek-ap-northeast-1a.ssm.ap-northeast-1.vpce.amazonaws.com
# 以下実行結果
; <<>> DiG 9.16.48-RH <<>> vpce-0bb20377a387ade86-njczioek-ap-northeast-1a.ssm.ap-northeast-1.vpce.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23397
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;vpce-0bb20377a387ade86-njczioek-ap-northeast-1a.ssm.ap-northeast-1.vpce.amazonaws.com. IN A
# AZ-aのエンドポイントの情報が返ってくる。
;; ANSWER SECTION:
vpce-0bb20377a387ade86-njczioek-ap-northeast-1a.ssm.ap-northeast-1.vpce.amazonaws.com. 60 IN A 172.20.128.22
# 名前解決先はRoute 53 Resolver( VPC+2 IP アドレス)
;; Query time: 0 msec
;; SERVER: 172.20.0.2#53(172.20.0.2)
;; WHEN: Tue Jun 25 15:50:00 UTC 2024
;; MSG SIZE rcvd: 130
3は前提としてVPCの設定でDNSホスト名、DNS解決の両方が有効になっていなければ作成できません。
Amazon S3 以外のサービスのサービス名を選択した場合は、[追加設定] の [DNS 名を有効にする] が既に選択されています。デフォルトを維持することをお勧めします。(引用元:インターフェイス VPC エンドポイント AWS のサービス を使用して にアクセスする)
インターフェイス VPC エンドポイントでプライベート DNS を有効にし、VPC で DNS ホスト名と DNS 解決の両方が有効になっている場合、非表示の AWSマネージドプライベートホストゾーンが作成されます。ホストゾーンにはサービスのデフォルトの DNS 名のレコードセットが含まれており、VPC のエンドポイントのネットワークインターフェイスのプライベート IP アドレスに解決されます。(引用元:AWSのサービスを介したアクセスAWS PrivateLink)
【2024/7/12 追記】
[追加設定]の[DNS名を有効にする]を選択した場合、裏ではAWSが管理するRoute 53プライベートホストゾーンが作成されているみたいです。このマネージドなプライベートホストゾーンは、エンドポイントがあるVPC外では機能しません。なので、もしVPCエンドポイントを他のVPCとも共有したい場合は、この[追加設定]の[DNS名を有効にする]を無効化したうえで、プライベートホストゾーンを自前で作成し、他のVPCと共有、さらにトランジットゲートウェイやVPCピアリングで接続する必要があります。下記AWS公式ブログの記述をご参照ください。
When you create a VPC endpoint to an AWS service or AWS PrivateLink SaaS, you can enable Private DNS. When enabled, the setting creates an AWS managed Route 53 private hosted zone (PHZ) for you. The managed PHZ works great for resolving the DNS name within a VPC however, it does not work outside of the VPC. This is where PHZ sharing and Route 53 Resolver come into play to help us get unified name resolution for shared VPC endpoints. We’ll now dig into how you can make this name resolution work from VPC to VPC and from on-premises.(引用元:Integrating AWS Transit Gateway with AWS PrivateLink and Amazon Route 53 Resolver)
【追記ここまで】
3に対し、VPC内のEC2からdigやnslookupコマンドを打つと、こちらもENIのプライベートIPアドレスを返してくれます。3のdig実行結果は以下の通りです。
####################################################################
3.プライベートDNSへのdig
####################################################################
sh-5.2$ dig ssm.ap-northeast-1.amazonaws.com
; <<>> DiG 9.16.48-RH <<>> ssm.ap-northeast-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19273
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ssm.ap-northeast-1.amazonaws.com. IN A
# 各AZのエンドポイントの情報が返ってくる。
;; ANSWER SECTION:
ssm.ap-northeast-1.amazonaws.com. 60 IN A 172.20.144.169
ssm.ap-northeast-1.amazonaws.com. 60 IN A 172.20.128.22
# 名前解決先はRoute 53 Resolver( VPC+2 IP アドレス)
;; Query time: 0 msec
;; SERVER: 172.20.0.2#53(172.20.0.2)
;; WHEN: Wed Jun 26 13:32:00 UTC 2024
;; MSG SIZE rcvd: 93
PrivateLink
ここは公式資料の説明がシンプルかつ分かりやすいので引用で済ませます。
ネットワークトラフィックをAWSネットワーク内に限定して、AWSでホストされるサービスに簡単かつセキュアにアクセスするための機能 (引用元:Transit Gateway, PrivateLink VPCアーキテクチャー deep dive)
パブリックIPを使用することなく、またインターネット全体を横断するトラフィックを必要とすることなく、Amazon Virtual Private Cloud(VPC)からAWSサービスにプライベートにアクセスできます。
・別のAWSアカウントでホストされるサービス、AWS Marketplaceのサードパーティサービスにセキュアに接続
・お客様のVPCとこうしたいずれかのサービス間のトラフィックはAmazonのネットワークの外に出ない
・サービスと通信するためにインターネットゲートウェイ、NATデバイス、パブリックIPアドレス、VPN接続は不要。
(引用元:YouTube動画【AWS Black Belt Online Seminar】 Amazon VPC Advanced)
サービスエンドポイント
AWS サービスにプログラムで接続するには、 エンドポイントを使用します。 エンドポイントは、 AWS ウェブサービスのエントリポイントの URL です。(引用元:AWS サービスエンドポイント)
AWSのサービス利用時に用いるURLで、たとえば東京リージョンでAWS Systems Managerを使う際は、「ssm.ap-northeast-1.amazonaws.com」というURLを用います。AWSサービスのエンドポイント一覧についてはこちらのページをご参照ください。
サービスエンドポイントはパブリックにアクセスでき、対応するIPアドレスを返してくれます。
私のローカル環境からdigコマンドを打った際は以下のようにパブリックIPを返してくれます。
keita@BEEX00328:~$ dig ssm.ap-northeast-1.amazonaws.com
# 以下実行結果
; <<>> DiG 9.18.18-0ubuntu0.22.04.2-Ubuntu <<>> ssm.ap-northeast-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11133
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ssm.ap-northeast-1.amazonaws.com. IN A
# パブリックIPが返ってきている
;; ANSWER SECTION:
ssm.ap-northeast-1.amazonaws.com. 42 IN A 52.119.221.73
;; Query time: 9 msec
;; SERVER: 10.255.255.254#53(10.255.255.254) (UDP)
;; WHEN: Tue Jun 25 23:57:46 JST 2024
;; MSG SIZE rcvd: 77
インターネットアクセスが無い環境下、例えばプライベートサブネット内からサービスエンドポイントにアクセスしたい場合は、PrivateLinkを用いれば可能です。サービスエンドポイントがあたかもVPC内にあるかのように使用できます。VPC内のプライベートサブネット内のEC2から打った下記コマンド結果をご参照ください。
####################################################################
※VPCエンドポイントと同じ実行結果です。
3.プライベートDNSへのdig
####################################################################
sh-5.2$ dig ssm.ap-northeast-1.amazonaws.com
; <<>> DiG 9.16.48-RH <<>> ssm.ap-northeast-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19273
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ssm.ap-northeast-1.amazonaws.com. IN A
# 各AZのエンドポイントの情報が返ってくる。
;; ANSWER SECTION:
ssm.ap-northeast-1.amazonaws.com. 60 IN A 172.20.144.169
ssm.ap-northeast-1.amazonaws.com. 60 IN A 172.20.128.22
# 名前解決先はRoute 53 Resolver( VPC+2 IP アドレス)
;; Query time: 0 msec
;; SERVER: 172.20.0.2#53(172.20.0.2)
;; WHEN: Wed Jun 26 13:32:00 UTC 2024
;; MSG SIZE rcvd: 93
プライベート DNS では、インターフェイス VPC エンドポイントを介したプライベート接続を活用しながら、パブリックエンドポイントの DNS 名を使用してサービスへのリクエストを引き続き行うことができます。(引用元:AWS のサービス を介したアクセス AWS PrivateLink)
最後に
今回はインターフェイス型エンドポイントについて、名前解決の内容を踏まえつつ基本的な説明を行いました。名前解決周りは例えばVPC内のEC2の場合、ネームサーバにRoute53 Resolver(AmazonProvidedDNS)を指定していれば、さほど困るケースはありません。しかし、ここを別のサーバに向けて躓いた際はきっと本記事の内容が役に立ちます。次回はそれに関連して案件で詰まった点を記事化予定です。ここまでお読みいただきありがとうございました。
参考URL一覧
・Amazon VPC Blackbelt
・AWSのサービスを介したアクセスAWS PrivateLink
・インターフェイス VPC エンドポイント AWS のサービス を使用して にアクセスする
・YouTube動画【AWS Black Belt Online Seminar】 Amazon VPC Advanced
・Transit Gateway, PrivateLink VPCアーキテクチャー deep dive
・AWS サービスエンドポイント
・Integrating AWS Transit Gateway with AWS PrivateLink and Amazon Route 53 Resolver