【Route53】エイリアスレコードのターゲットとして別アカウントのリソースを指定できることを知らなかった

Route53でエイリアスレコードを用いてAWSリソースを登録する際に、クロスアカウントでの指定に対応していることをずっと知りませんでした。

コンバンハ、千葉(幸)です。

知らなかったです。皆さんは知ってましたか?

目次

エイリアスレコードとは

Route53の独自の機能で、簡単に言えば「IPアドレスを直接入力しなくても裏でいい感じに設定してくれる機能」です。

一般的なDNSサーバでは、Aレコードを登録する際には値としてIPアドレスを指定することになります。しかし、ELBなどのIPが可変であるAWSリソースをターゲットにする場合、IPを直接指定するのは得策ではありません。AWSリソースがデフォルトで持っているDNS名を指定してCNAMEレコードとして登録することもできますが、いくつか制約を受ける部分が出てきます。その解決策として、AWSリソースがデフォルトで持っているDNS名をIPアドレスの代わりに入力できるようにしてくれるのがエイリアスレコードです。

詳細な説明は、ぜひ以下のブログをご参照ください。

現状エイリアスレコードの登録が可能なAWSサービスは以下のようになっています。

  • Amazon API Gateway リージョン固有のカスタム API またはエッジ最適化 API
  • Amazon VPC インターフェイスエンドポイント
  • CloudFront ディストリビューション
  • Elastic Beanstalk 環境
  • ELB ロードバランサー
  • AWS Global Accelerator アクセラレータ
  • 静的ウェブサイトとして設定されている Amazon S3 バケット
  • 同じホストゾーン内の別の Route 53 レコード

エイリアスレコードと非エイリアスレコードの選択

別アカウントのリソースもターゲットにできる?どこに書いてあるんだ

ここに書いてありました。

Route 53 ホストゾーンとロードバランサーを作成する際に異なるアカウントを使用している場合 – 「ELB ロードバランサーの DNS 名の取得」の手順で取得した値を入力します。

エイリアスレコードの値

ELBの部分だけ引用しましたが、他のAWSサービスについてもクロスアカウントの場合の記述があります。

やってみた

流石にこのままでは終われないので、実際に試してみます。

やりたいこと

  • プライベートホストゾーンを作成し、VPCに関連付ける
  • 別アカウントに存在するELBをターゲットとして、エイリアスレコードを登録する
  • VPCのEC2をクライアントとして、ELBの名前解決ができるか確認する

下準備

以下が済んでいるところからスタートします。

  • プライベートホストゾーンexample.comの作成
  • VPCへの関連付け
  • クライアントEC2の作成
  • 別アカウントのELBの作成(今回はインターナル)

ちなみにVPCは「DNS 解決」「DNS ホスト名」を有効にすることを忘れないでください。(私は忘れていたのでちょっとハマりました。)

プライベートホストゾーンを使用するには、次の Amazon VPC 設定を true に設定する必要があります。

・enableDnsHostnames

・enableDnsSupport

プライベートホストゾーンを使用する場合の考慮事項

レコードの追加

ホストゾーンからレコードの作成を試みて、エイリアス先の候補を見てみますが、別アカウントのため表示されません。

プルダウンから選択するのではなく、直接ELBのDNS名を入力します。(ちなみにこのDNS名はELBのコンソールだと『(Aレコード)』って書いてありますが、すごく混乱しませんか?私はします。)

(Aレコード。)

問題なく登録できました。

クライアントEC2からの名前解決

今回はSSMで接続しています。問題なく名前解決できました。

sh-4.2$ nslookup chiba.example.com
Server:         192.168.0.2      # Amazon Provided DNS
Address:        192.168.0.2#53

Non-authoritative answer:
Name:   chiba.example.com
Address: 10.121.0.76      # ELBのIPその1
Name:   chiba.example.com
Address: 10.121.0.57   # ELBのIPその2

念のためELBのデフォルトDNS名でも引いてみますが、同じ結果が返ってきます。

sh-4.2$ nslookup internal-xxxxxxxxxx-000000000.ap-northeast-1.elb.amazonaws.com
Server:         192.168.0.2
Address:        192.168.0.2#53

Non-authoritative answer:
Name:   internal-xxxxxxxxxx-000000000.ap-northeast-1.elb.amazonaws.com
Address: 10.121.0.76
Name:   internal-xxxxxxxxxx-000000000.ap-northeast-1.elb.amazonaws.com
Address: 10.121.0.57

終わりに

今回はプライベートホストゾーンで試してみましたが、パブリックホストゾーンでも同様に別アカウントのリソースを指定することが可能です。マネジメントコンソールで候補に出てこないことから、できないものだというイメージをずっと持っていましたが、きちんと調べないといけないですね。

いったんお返しします。