インターフェイス型VPCエンドポイント名前解決に関する基本説明

この記事を書いたメンバー:

榊原慶太

インターフェイス型VPCエンドポイント名前解決に関する基本説明

目次

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


カテゴリー
タグ

この記事を書いたメンバー

榊原慶太
榊原慶太

技術検証、re:Invent参加、AWS資格全冠のための勉強教材等、幅広く記事にしています。皆様のお役に立てば幸いです。最近は会社ブログメインで記事投稿しています。

Pick upピックアップ

Search記事を探す

キーワード

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)