継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AWS アカウントを跨いだプライベートホストゾーンの設定方法

タダです.

業務で Route53 プライベートホストゾーンを別アカウントの VPC でも使うことができるよう設定を行ったのでどのように設定するかを整理しておきます.

本記事で紹介する設定の概要

まず,Route53 プライベートホストゾーンは VPC に閉じたプライベートネットワーク内の DNS ドメインレコードを管理するためのコンテナになります.プライベートなのでインターネットにリソースを公開せずに名前解決が可能になるのが特徴で,関連づける VPC は複数サポートされています.

docs.aws.amazon.com

下の構成図のようにメインアカウントの Route53 プライベートホストゾーンとサブアカウントVPC を関連付ける方法をこの記事で紹介します.

f:id:sadayoshi_tada:20191116183151p:plain

同一アカウントでのプライベートホストゾーンの VPC 関連付けは Route53 の管理画面から VPC ID を参照できますが,別アカウントの VPC は下記の引用文にあるように参照できません.そのため,別のアプローチが必要になるのですが,今回は AWS CLI を使った設定方法を紹介します.

次の点に注意してください。

・あるアカウントで作成した複数の VPC と別のアカウントで作成したホストゾーンを関連付ける場合は、VPC ごとに認証リクエストを送信する必要があります。

・関連付けを許可する際、ホストゾーン ID を指定する必要があるため、プライベートホストゾーンが存在している必要があります。

VPC とプライベートホストゾーンの関連付けを許可する場合や、関連付けを行う場合はいずれも、Route 53 コンソールを使用することはできません。

参考ドキュメント

docs.aws.amazon.com

予め準備しておくこと

予め準備しておくこととして,別アカウントの VPC では DNS ホストゾーンの設定を有効化してください.プライベートホストゾーンの設定に必要な要素となります.

Amazon VPC 設定

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

・enableDnsHostnames

・enableDnsSupport

下記の画像のようにDNS hostnames Enabled になっていればOKです.

f:id:sadayoshi_tada:20191116180637p:plain

参考ドキュメント

docs.aws.amazon.com

また,AWS CLI の実行環境とプライベートホストゾーンの管理アカウントと関連づける VPC のアカウントそれぞれのアクセスキーとシークレットアクセスキーが必要です.Route53 の強い権限 AmazonRoute53FullAccess 等を付与ください.今回は,AdministratorAccess を付与して確認しています.

実際の設定作業

それでは,実設定を行います.

1 予めプライベートホストゾーンを管理するアカウントで別アカウントの VPC を関連づける前のホストゾーンの設定状況を確認します.

$ aws route53 get-hosted-zone --id  <プライベートホストゾーンのID>

[実行結果]

{
    "VPCs": [
        {
            "VPCId": "vpc-xxxxxxxxxxxxxxxx",
            "VPCRegion": "ap-northeast-1"
        }
    ],
    "HostedZone": {
        "ResourceRecordSetCount": 2,
        "CallerReference": "xxxx",
        "Config": {
            "Comment": "for test",
            "PrivateZone": true
        },
        "Id": "/hostedzone/<プライベートホストゾーンのID>",
        "Name": "private.hoge.com."
    }

2 以下の AWS CLI コマンドをプライベートホストゾーンを管理するアカウントで実行して,対象のVPCを紐づけます.

$ aws route53 create-vpc-association-authorization \
--hosted-zone-id <プライベートホストゾーンのID> \
--vpc VPCRegion=ap-northeast-1,VPCId=<別アカウントの VPC ID>

[実行結果]

{
    "HostedZoneId": "<プライベートホストゾーンのID>",
    "VPC": {
        "VPCId": "<別アカウントの VPC ID>",
        "VPCRegion": "ap-northeast-1"
    }
}

3 サブアカウントの権限でプライベートホストゾーン管理アカウントに認証リクエストを送ります.

$ aws route53 associate-vpc-with-hosted-zone \
--hosted-zone-id <プライベートホストゾーンのID> \
--vpc VPCRegion=ap-northeast-1,VPCId=<別アカウントの VPC ID>

[実行結果]

{
    "ChangeInfo": {
        "Status": "PENDING",
        "Comment": "",
        "SubmittedAt": "2019-11-16T08:41:16.398Z",
        "Id": "/change/C1I9D47KD29FOR"
    }
}

4 再度プライベートホストゾーンを管理するアカウントでホストゾーンの設定状況を確認します.

$ aws route53 get-hosted-zone --id  <プライベートホストゾーンのID>

[実行結果]

{
    "VPCs": [
        {
            "VPCId": "vpc-xxxxxxxxxxxxxxxx",
            "VPCRegion": "ap-northeast-1"
        },
        {
            "VPCId": "<別のアカウントの VPC ID>", <= 別アカウント VPC ID が追加されています
            "VPCRegion": "ap-northeast-1"
        }
    ],
    "HostedZone": {
        "ResourceRecordSetCount": 2,
        "CallerReference": "xxxx",
        "Config": {
            "Comment": "for test",
            "PrivateZone": true
        },
        "Id": "/hostedzone/<プライベートホストゾーンのID>",
        "Name": "private.hoge.com."
    }
}

管理画面上でも関連づけられていることを確認できました.

f:id:sadayoshi_tada:20191116181804p:plain

まとめ

アカウントが分かれているVPC を Route53 プライベートホストゾーンに関連づける方法で必要な設定をさらいました.なかなかない機会でしたので記事化しましたが,同じ状況の方の参考になれば幸いです.