[Route 53]他のAWSアカウントのVPCにプライベートホストゾーンを関連付ける
こんにちは、佐伯です。
結構昔のアップデートで追加された機能であり、既に当ブログでも紹介されていますが改めてご紹介したいと思います。今回は下記の合せ技みたいな感じです。
構成
ざっくりした構成は以下の通りです。VPCピアリングで接続したVPC同士でプライベートホストゾーンの関連付けを行います。
注意点
VPCの設定
プライベートホストゾーンを使用するにはVPCの設定で enableDnsHostnames
と enableDnsSupport
をtrueに設定する必要があります。
制限事項
VPCに関連付けるプライベートホストゾーンの名前空間が重複する場合、関連付けすることができません。
複数のプライベートホストゾーンに VPC に関連付けることができますが、名前空間が重複することはできません。たとえば、example.com と acme.example.com の両方のホストゾーンは、どちらの名前空間も example.com で終わるため、VPC を関連付けることはできません。
引用元: プライベートホストゾーンの使用 - Amazon Route 53
やってみた
VPC作成やVPCピアリング作成、ルートテーブルや疎通確認のためのセキュリティグループの編集については省略します。
アカウントA
Route 53でプライベートホストゾーン exapmle1.local を作成します。
作成したプライベートホストゾーンにAレコードを作成します。AレコードにはアカウントAのVPC上で稼働するEC2インスタンスのプライベートIPアドレスを設定しました。
アカウントB
アカウントBでも同様にプライベートホストゾーン example2.local を作成します。手順はアカウントAと同じなので省略します。また、アカウントBでも同様にAレコードを作成しました。
アカウントAのプライベートホストゾーンをアカウントBのVPCに関連付ける
他のAWSアカウントへの関連付けの操作はAWSマネジメントコンソールで対応していませんので、AWS CLIから行います。
関連リンク: 作成済みの Amazon VPC と、別の AWS アカウントで作成したプライベートホストゾーンを関連付ける - Amazon Route 53
アカウントAからアカウントBへ関連付けリクエスト
アカウントAから関連付けのリクエストを行います。 --hosted-zone-id
はアカウントAで作成したプライベートホストゾーンのHosted Zone IDです。 VPCId
は関連付けをリクエストするアカウントBのVPC IDです。
aws route53 create-vpc-association-authorization \ --hosted-zone-id Z3A22JQCBOXXXX \ --vpc VPCRegion=ap-northeast-1,VPCId=vpc-4d4bXXXX
アカウントBでリクエストの承認
アカウントBでリクエストの承認をします。
aws route53 associate-vpc-with-hosted-zone \ --hosted-zone-id Z3A22JQCBOXXXX \ --vpc VPCRegion=ap-northeast-1,VPCId=vpc-4d4bXXXX
アカウントBで承認されるとアカウントAのマネジメントコンソールから関連付けしたVPCが確認できます。
アカウントBのプライベートホストゾーンをアカウントAのVPCに関連付ける
アカウントBからアカウントAへ関連付けリクエスト
アカウントBでも同じくリクエストを行い、アカウントAで承認します。
aws route53 create-vpc-association-authorization \ --hosted-zone-id ZDFHP1LZ1XXXX \ --vpc VPCRegion=ap-northeast-1,VPCId=vpc-32e6XXXX
アカウントAでリクエストの承認
aws route53 associate-vpc-with-hosted-zone \ --hosted-zone-id ZDFHP1LZ1XXXX \ --vpc VPCRegion=ap-northeast-1,VPCId=vpc-32e6XXXX
こちらもアカウントAで承認されるとアカウントBのマネジメントコンソールから関連付けしたVPCが確認できます。
VPC上のインスタンスから名前解決してみる
VPC上に作成したEC2インスタンスから名前解決と疎通確認を行いました。
アカウントAのEC2インスタンス
[ec2-user@ip-172-16-1-199 ~]$ dig ec2.example2.local ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.57.amzn1 <<>> ec2.example2.local ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52111 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ec2.example2.local. IN A ;; ANSWER SECTION: ec2.example2.local. 60 IN A 192.168.0.178 ;; Query time: 2 msec ;; SERVER: 172.16.0.2#53(172.16.0.2) ;; WHEN: Mon Apr 9 01:25:50 2018 ;; MSG SIZE rcvd: 52 [ec2-user@ip-172-16-1-199 ~]$ ping ec2.example2.local PING ec2.example2.local (192.168.0.178) 56(84) bytes of data. 64 bytes from ip-192-168-0-178.ap-northeast-1.compute.internal (192.168.0.178): icmp_seq=1 ttl=255 time=0.444 ms 64 bytes from ip-192-168-0-178.ap-northeast-1.compute.internal (192.168.0.178): icmp_seq=2 ttl=255 time=0.976 ms 64 bytes from ip-192-168-0-178.ap-northeast-1.compute.internal (192.168.0.178): icmp_seq=3 ttl=255 time=0.425 ms 64 bytes from ip-192-168-0-178.ap-northeast-1.compute.internal (192.168.0.178): icmp_seq=4 ttl=255 time=0.491 ms 64 bytes from ip-192-168-0-178.ap-northeast-1.compute.internal (192.168.0.178): icmp_seq=5 ttl=255 time=0.391 ms ^C --- ec2.example2.local ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4006ms rtt min/avg/max/mdev = 0.391/0.545/0.976/0.218 ms
アカウントBのEC2インスタンス
[ec2-user@ip-192-168-0-178 ~]$ dig ec2.example1.local ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.57.amzn1 <<>> ec2.example1.local ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39912 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;ec2.example1.local. IN A ;; ANSWER SECTION: ec2.example1.local. 60 IN A 172.16.1.199 ;; Query time: 2 msec ;; SERVER: 192.168.0.2#53(192.168.0.2) ;; WHEN: Mon Apr 9 01:26:01 2018 ;; MSG SIZE rcvd: 52 [ec2-user@ip-192-168-0-178 ~]$ ping ec2.example1.local PING ec2.example1.local (172.16.1.199) 56(84) bytes of data. 64 bytes from ip-172-16-1-199.ap-northeast-1.compute.internal (172.16.1.199): icmp_seq=1 ttl=255 time=0.340 ms 64 bytes from ip-172-16-1-199.ap-northeast-1.compute.internal (172.16.1.199): icmp_seq=2 ttl=255 time=0.513 ms 64 bytes from ip-172-16-1-199.ap-northeast-1.compute.internal (172.16.1.199): icmp_seq=3 ttl=255 time=0.546 ms 64 bytes from ip-172-16-1-199.ap-northeast-1.compute.internal (172.16.1.199): icmp_seq=4 ttl=255 time=0.472 ms 64 bytes from ip-172-16-1-199.ap-northeast-1.compute.internal (172.16.1.199): icmp_seq=5 ttl=255 time=0.501 ms ^C --- ec2.example1.local ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4005ms rtt min/avg/max/mdev = 0.340/0.474/0.546/0.073 ms [ec2-user@ip-192-168-0-178 ~]$
まとめ
名前空間が重複してはいけないという制限事項はありますが、今回のようにVPCピアリング先の名前解決に使用することができます。他の組織が管理するAWSアカウントとVPCピアリング接続する場合、ひとつのプライベートホストゾーンでDNSレコードの管理すると、変更の際に依頼などが発生してしまいますが、この機能を使えばDNSレコードを各々のAWSアカウントで管理することができるかと思います。