【AWS】他のAWSアカウントにドメインを移す

今回は異なるアカウントにドメインを移管する方法について紹介したいと思います。

前提

前提として以下のような状態であるとします。 操作はCLIを利用します。

  • アカウントAでドメインを取得している(example.com)
  • アカウントBにドメインを移管したい
  • アカウントBからロールを払い出して、アカウントAのIAMユーザがスイッチロールする形式とする

最後の項目についてはオプションです。 アカウントB側でドメインを受け取るという操作が必要ですが、ロールを使わずとも同じことができるので、ロールを使わない場合はIAMユーザをそのまま使うものと置き換えてください。

ロールの作成(アカウントB側)

アカウントB側でロールを作成します。 以下の4つの権限を持てるようにポリシーをアタッチします。

  • route53domains:TransferDomainToAnotherAwsAccount
  • route53domains:RejectDomainTransferFromAnotherAwsAccount
  • route53domains:CancelDomainTransferToAnotherAwsAccount
  • route53domains:AcceptDomainTransferFromAnotherAwsAccount

さらに信頼ポリシーを以下のように記載します。 こうすることでアカウントA側からアカウントB側にあるこのロールを扱うことができます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::【アカウントAのID】:root"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

CLIの設定

CLIに操作者(アカウントA側のIAMユーザ)のprofileを追加します。

aws configure --profile acount-a

IAMユーザのアクセスキー、シークレット等々を入力します。 以降の操作主体をこのacount-aにしたい場合は、以下のようにデフォルトに設定します。

  • Windowsの場合
set AWS_DEFAULT_PROFILE=account-a
  • Mac,Linuxの場合
export AWS_DEFAULT_PROFILE=account-a

さらに、このaccount-aから使用できるロールをprofileとして宣言します。 ~/.aws/configを編集して以下のようにロールを宣言します。

[default]
region=us-east-1
output=json
[profile account-a]
region = us-east-1
output = json
+ [profile role-b]
+ region = us-east-1
+ role_arn = 【アカウントBで作ったロールのARN】
+ source_profile = account-a

これで以降のCLI実行時に--profile role-bとオプションをつけることでスイッチロールした状態でコマンド実行することができます。

ドメインの移管(アカウントA側)

それではアカウントA側からドメイン移管を行います。 もしドメインの移管ロック状態にある場合はまずは解除します。

aws route53domains disable-domain-transfer-lock \
--domain-name example.com

その上で移管処理を行います。

aws route53domains transfer-domain-to-another-aws-account \
--domain-name example.com \
--account-id 【アカウントBのID】

レスポンスとして以下が返ります。

{
    "OperationId": "xxxxxxxxxxxxxxx",
    "Password": "xxxxxxxxxxxxxx"
}

この中のPasswordは後で使います。

ドメインの受け取り(アカウントB側)

今度はアカウントB側でドメインを受け取ります。

aws route53domains accept-domain-transfer-from-another-aws-account \
--profile role-b \
--domain-name example.com \
--password 【先ほどのPassword】

特に問題がなければアカウントB側の登録済みドメインに移管されます。

ホストゾーンの移行

ここまでの作業がドメインの移管です。 大概はホストゾーンの移行もセットで行うかと思いますので、ここで手順を紹介します。 厳密には「移行」というより、ドメインの移管先で新たにホストゾーンを作り、そこに移管元から参照してレコードを作成する、といった流れです。 その際に、以降元のホストゾーンにNSレコードとSOAレコードしかない場合はこの手順は不要です。 今回はNSおよびSOAレコード以外がなかったため、具体的な移行処理はありません。 上記以外のレコードがある場合については、別の AWS アカウントへのホストゾーンの移行の手順を参考にしてください。

移行先にホストゾーンを作成(アカウントB側)

まずは移行先にホストゾーンを作成します。

aws route53 create-hosted-zone \
--name example.com \
--caller-reference 2022-06-08-13:00 \
--profile role-b

これで移行先にホストゾーンが作成されました。 デフォルトでNSSOAの2種類のレコードはできていると思います。

移行元のホストゾーンを削除

削除したいホストゾーンのIDを確認します。

aws route53 list-hosted-zones

対象のホストゾーンのIDを確認した上で、下記を実行します。

aws route53 delete-hosted-zone \
--id 【移行元のホストゾーンID】

これで移行元のホストゾーンが削除されました。

まとめ

今回はAWSアカウント間でのドメインの移管についての手順と、それに伴うホストゾーン周りの処理をまとめました。

いろいろ試行錯誤しながらAWSを触ってAWS Organizationsの機能を後から知ったようなケースでは、今回のように別アカウントにドメインを移管するようなケースが出てくるかと思います。 最初からベストプラクティスの構成にするのはなかなか難しいですが、こうやってリカバリできる方法が用意されているので便利ですね。

今回の内容が役立ちましたら幸いです。

参考

SNSでシェアする