Skip to content

AWS DNS Zoneの作成と権限の移譲 ​

ここでは、デプロイメントに際しAWS DNS Zoneが必要となる場合のAWS DNS Zoneの作成と権限移譲の方法を解説します。

TIP

本手順は、以下のAWS公式ドキュメントを元に作成しております。

手順の実施中に不明な点などがあった場合には併せて参照してください。

AWS IAM

TIP

IAMの詳細や、IAMポリシー割り当ての方法については以下ドキュメントを参照してください。

TIP

AWS DNS Zoneの作成にはAWS用のコマンドラインツールであるAWS CLIを利用します。 AWS CLIのインストールが完了していない方はAWS CLI のインストール、更新、アンインストール を参考にAWS CLIのインストールを行なってください。

AWS CLIのインストール後にAWS CLIを認証する必要があります。 認証が完了していない方はAWS CLIのセットアップを参考に認証情報の設定を行なってください。

手順 ​

1.委任セットとホストゾーンの作成 ​

  1. 以下のコマンドを実行し、委任セットを作成します。
aws route53 create-reusable-delegation-set \
--caller-reference `date +"%Y-%m-%d-%H-%M-%S"`
  1. 以下のように委任セットの情報が表示されれば正しく作成できています。
{
    "Location": "https://route53.amazonaws.com/2013-04-01/delegationset/XXXXXXXXXXXXXXXX",
    "DelegationSet": {
        "Id": "/delegationset/XXXXXXXXXXXXXXXX",
        "CallerReference": "2024-10-01-16-42-41",
        "NameServers": [
            "ns-xxx.awsdns-xx.com",
            "ns-xxxx.awsdns-xx.org",
            "ns-xxx.awsdns-xx.co.uk",
            "ns-xxx.awsdns-xx.net"
        ]
    }
}
  1. 前項のコマンドの実行結果に表示された委任セットIDを確認しておきます。
  • 委任セットIDは "Id": "/delegationset/XXXXXXXXXXXXXXXX"のXXXXXXXXXXXXXXXX の部分です。
  1. 以下のコマンドを実行し、サブドメイン用のホストゾーンを作成します。
# 前項で作成した委任セットのIDを設定してください。
export DELEGATTION_SET_ID="XXXXXXXXXXXXXXXX"
# 登録したいサブドメイン名を設定してください。
export CHILD_HOST_ZONE_NAME="aws.exmaple.com"
aws route53 create-hosted-zone \
--delegation-set-id ${DELEGATTION_SET_ID} \
--name ${CHILD_HOST_ZONE_NAME} \
--caller-reference `date +"%Y-%m-%d-%H-%M-%S"`
  1. 以下のようにホストゾーンの情報が表示されていたら正しく作成できています。
{
    "Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/XXXXXXXXXXXXXXXXXXX",
    "HostedZone": {
        "Id": "/hostedzone/XXXXXXXXXXXXXXXXXXX",
        "Id": "/hostedzone/XXXXXXXXXXXXXXXXXXX",
        "Name": "aws.example.com",
        "CallerReference": "2024-10-01-16-49-30",
        "Config": {
            "PrivateZone": false
        },
        "ResourceRecordSetCount": 2
    },
    "ChangeInfo": {
        "Id": "/change/XXXXXXXXXXXXXXXXXXX",
        "Status": "PENDING",
        "SubmittedAt": "2024-10-01T07:49:32.858000+00:00"
    },
    "DelegationSet": {
        "Id": "/delegationset/XXXXXXXXXXXXXXXXXXX",
        "CallerReference": "2024-10-01-16-42-41",
        "NameServers": [
            "ns-xxx.awsdns-xx.com",
            "ns-xxx.awsdns-xx.org",
            "ns-xxx.awsdns-xx.co.uk",
            "ns-xxx.awsdns-xx.net"
        ]
    }
}

以上でホストゾーンの作成は完了です。

2.親ドメインへの権限の移譲 ​

  1. 以下のコマンドを実行して、親ドメインに登録するNSレコードの設定ファイルを作成します。

Name には前項で作成したホストゾーンのサブドメイン名を、ResourceRecords の Value には前項で作成したホストゾーンの DelegationSet.NameServers に記載されていたネームサーバーを設定してください。

echo '{
    "Changes": [
        {
            "Action": "CREATE",
            "ResourceRecordSet": {
                "Name": "aws.example.com",
                "Type": "NS",
                "TTL": 172800,
                "ResourceRecords": [
                    {
                        "Value": "ns-xxx.awsdns-xx.com"
                    },
                    {
                        "Value": "ns-xxx.awsdns-xx.org"
                    },
                    {
                        "Value": "ns-xxx.awsdns-xx.co.uk"
                    },
                    {
                        "Value": "ns-xxx.awsdns-xx.net"
                    }
                ]
            }
        }
    ]
}' > route53.json
  1. 権限を移譲したい親ドメインのIDを確認します。

以下のコマンドを実行するとホストゾーン一覧が表示されるので、権限を移譲したい親ドメインのIDをメモしておきます。

aws route53 list-hosted-zones
  1. 以下のコマンドを実行して権限の移譲します。
# 権限を移譲する親ドメインのホストゾーンIDを設定してください。
export PARENT_HOST_ZONE_ID="XXXXXXXXXXXXXXXXXXX"
# 作成した設定ファイル名を設定してください。
export FILE_NAME="route53.json"
aws route53 change-resource-record-sets \
--hosted-zone-id ${PARENT_HOST_ZONE_ID} \
--change-batch  file://${FILE_NAME}
  1. 実行が完了すると変更内容が表示されます。
{
    "ChangeInfo": {
        "Id": "/change/XXXXXXXXXXXXXXXXXXX",
        "Status": "PENDING",
        "SubmittedAt": "2024-10-01T08:31:23.433000+00:00"
    }
}
  1. 正常に設定できたかを確認するため、以下のコマンドを実行してTXTレコード作成用の設定ファイルを作成します。
# 作成したサブドメインのホストゾーンIDを設定してください
export CHILD_HOST_ZONE_ID = "XXXXXXXXXXXXXXXXXXX"
echo '{
  "Comment": "Add Text Record",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "hello.aws.example.com",
        "Type": "TXT",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "\"world\""
          }
        ]
      }
    }
  ]
}' > change-batch.json
  • NameのValueにはhello.作成したサブドメイン名を設定してください。
  1. 以下のコマンドを実行してTXTレコードを登録します。
aws route53 change-resource-record-sets --hosted-zone-id ${CHILD_HOST_ZONE_ID} --change-batch file://change-batch.json
  1. 実行が完了すると変更内容が表示されます。
{
    "ChangeInfo": {
        "Id": "/change/XXXXXXXXXXXXXXXXXXX",
        "Status": "PENDING",
        "SubmittedAt": "2024-10-01T09:06:35.632000+00:00",
        "Comment": "Add Text Record"
    }
}
  1. 以下のコマンドを実行し、answerとして "world" が出力されていれば正しく設定されています。
dig TXT +noall +ans hello.${CHILD_HOST_ZONE_NAME}
hello.aws.exmaple.com 300 IN TXT    "world"
  1. 不要となったTXTレコードを削除するため、作成した change-batch.json の Action を UPSERT から DELETE に変更して保存します。
echo '{
  "Comment": "Add Text Record",
  "Changes": [
    {
      "Action": "DELETE",
      "ResourceRecordSet": {
        "Name": "hello.aws.example.com",
        "Type": "TXT",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "\"world\""
          }
        ]
      }
    }
  ]
}' > change-batch.json
  1. 以下のコマンドを実行し、TXTレコードを削除します。
aws route53 change-resource-record-sets --hosted-zone-id ${CHILD_HOST_ZONE_ID} --change-batch file://change-batch.json

以上でDNSゾーンの作成と権限の移譲は完了です。