別アカウントにあるRoute53(プライベートホストゾーン)を参照しFQDN無しで名前解決してみる

AWS

マルチアカウント環境などで1つのアカウントにあるプライベートホストゾーンを複数のアカウントから参照し、名前解決するための設定をしていきます。

構成イメージ

アカウントAのRoute53にプライベートホストゾーンを作成し、レコードを追加する。
アカウントBからアカウントAにあるプライベートホストゾーンのレコードを参照し、アカウントAにあるEC2インスタンスの名前解決をする。

手順の流れ

【前提】

・アカウントA/BにはそれぞれVPCを用意。(※VPCの設定でDNS ホスト名は”有効”にしておく)
・アカウントA/BにEC2インスタンスを用意。

【手順の流れ】

  1. 【アカウントA】プライベートホストゾーン作成
  2. 【アカウントA】プライベートホストゾーンにレコード追加
  3. 【アカウントA】EC2インスタンス(accountA-server)にIAMロールを付与
  4. 【アカウントA】アカウントAからアカウントBへ関連付けリクエスト
  5. 【アカウントB】リクエストの承認
  6. 【アカウントA】関連付けの確認
  7. 【アカウントB】名前解決できるか確認
  8. 【アカウントB】FQDN無し(ホスト名)で名前解決する方法

1.【アカウントA】プライベートホストゾーン作成

まずはアカウントAのRoute53でプライベートホストゾーンを作成。

ドメイン名:accounta-private.com
タイプ:プライベートホストゾーン
VPC:既に作成済のVPCを指定

上記でホストゾーンを作成。

ホストゾーンが作成されていることを確認。

2.【アカウントA】プライベートホストゾーンにレコード追加

作成したプライベートホストゾーン(accounta-private.com)にレコードを追加する。

レコード名:accountA-server
レコードタイプ:A レコード
値:アカウントAのEC2インスタンスのプライベートIPアドレス

Aレコードが作成されたことを確認。

3.【アカウントA】EC2インスタンス(accountA-server)にIAMロールを付与

Route53にアクセスするためのIAMロールを作成。

ポリシーは「AmazonRoute53FullAccess」を付与。

accountA-Serverにロールを適用。

4.【アカウントA】アカウントAからアカウントBへ関連付けリクエスト

accountA-ServerでRoute53にアクセスできるか確認します。

プライベートホストゾーンの情報が出力されるか確認する。

# aws route53 list-hosted-zones

【実行結果】
{
    "HostedZones": [
        {
            "Id": "/hostedzone/【ホストゾーンID】",
            "Name": "accounta-private.com.",
            "CallerReference": "XXXXXXXXXXXXXXXXXXXXXXXXX",
            "Config": {
                "Comment": "",
                "PrivateZone": true
            },
            "ResourceRecordSetCount": 3
        }
    ]
}

ホストゾーンの情報が表示されたらRoute53にアクセスできているので、アカウントBへの関連付けリクエストを実施する。

# aws route53 create-vpc-association-authorization --hosted-zone-id【ホストゾーンID】--vpc VPCRegion=ap-northeast-1,VPCId=【アカウントBのVPCID】

【実行結果】
{
    "HostedZoneId": 【ホストゾーンID】,
    "VPC": {
        "VPCRegion": "ap-northeast-1",
        "VPCId": 【アカウントBのVPCID】
    }
}

5.【アカウントB】リクエストの承認

アカウントBでリクエストを承認します。

Statusが”PENDING”となります。

# aws route53 associate-vpc-with-hosted-zone --hosted-zone-id Z08487521KFII04HQ06DO --vpc VPCRegion=ap-northeast-1,VPCId=vpc-0db1f620d0a77fffb

【実行結果】
{
    "ChangeInfo": {
        "Status": "PENDING",
        "Comment": "",
        "SubmittedAt": "2022-10-22T15:57:38.121Z",
        "Id": "/change/XXXXXXXXXX"
    }
}

6.【アカウントA】関連付けの確認

アカウントAのプライベートホストゾーンで「関連付けられたVPC」を確認するとアカウントBのVPCIDが表示されていることを確認します。

7.【アカウントB】名前解決できるか確認

アカウントBのaccountB-serverからaccountA-serverの名前解決ができるか確認してみる。

# dig accounta-server.accounta-private.com +short

【実行結果】
10.0.2.10

accountA-serverのIPアドレスが返ってきました。

8.【アカウントB】FQDN無し(ホスト名)で名前解決する方法

現状では名前解決を指定する際にFQDN(ドメイン名+ホスト名)指定じゃないといけないため
ホスト名だけで引けるように設定します。

まず、アカウントBのDHCPオプションセットを新規作成します。
※既にVPCに紐づいているデフォルトのDHCPオプションセットは変更不可のため、新たに作成し、VPCに紐づける必要があります。

ドメイン名:ap-northeast-1.compute.internal accounta-private.com
 ※ap-northeast-1.compute.internalはリージョン固有のドメイン

ドメインネームサーバ:AmazonProvidedDNS
 ※VPC内でのリソース名前解決に利用されるDNS

DHCPオプションセット(dhcp-optionset-accountB)が作成されていることを確認。

アカウントBのVPCを選択し、「DHCPオプションセットを編集」を選択。

dhcp-optionset-accountBを設定し、保存する。

アカウントBのEC2(accountB-server)にログインし、/etc/resolve.confを確認する。
現時点ではsearch行には「ap-northeast-1.compute.internal」のみ存在する状態。

# cat /etc/resolv.conf

【実行結果】
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search ap-northeast-1.compute.internal
nameserver 10.1.0.2

networkサービスを再起動する。

# systemctl restart network

再度resolve.confを確認するとsearch行に「accounta-private.com」が追加される。

# cat /etc/resolv.conf

【実行結果】
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search ap-northeast-1.compute.internal accounta-private.com
nameserver 10.1.0.2

この状態でホスト名だけで(ドメイン名を省略して)名前解決することができる。

# nslookup accounta-server

【実行結果】
Server:         10.1.0.2
Address:        10.1.0.2#53
Non-authoritative answer:
Name:   accounta-server.accounta-private.com
Address: 10.0.2.10

【補足】

直接/etc/resolv.confを編集し、accounta-private.comを追記してもnetworkサービスを再起動すると設定が戻ってしまうので、DHCPオプションセットから編集する必要があります。

コメント

タイトルとURLをコピーしました