AWSをマルチアカウント構成で運用している場合、別アカウントのRoute53にサブドメイン管理を委任することがあります。 そのやり方について、Terraformを用いておこなう手順を整理しました。
サブドメインの委任
まず最初に「サブドメインの委任とはなにか?」という点について少し整理してみます。
委任(delegation)とは?
- ドメイン名管理の階層化を実現する
- 以下の2ステップを指す
- 自分か管理するドメインにサブドメインを作成する
hoge.com
にsub.hoge.com
を追加
- そのサブドメインの管理権限を他者に委任
sub.hoge.com
の管理を他者に委任
- 自分か管理するドメインにサブドメインを作成する
- それぞれの管理範囲をゾーン(zone)と呼ぶ
hoge.com
ゾーンsub.hoge.com
ゾーン
Tips
サブドメインが存在しても、必ずしも委任されているわけではない!
co.jp
はjp
のサブドメインだが、委任されておらずjp
ゾーンに属している
example.co.jp
はjp
ゾーンから委任される
やること
委任元と委任先の間でネームサーバに関する設定を行う必要がある。具体的には?
上位のドメインを管理するゾーンに、委任するゾーンを管理するネームサーバを記述する
別アカウントのRoute53にサブドメイン管理を委任する
AWSのRoute53間でサブドメインの委任をおこなうためには、大きく分けて以下の2つの対応が必要になります。
- 委任先のアカウントに委任したいサブドメインのHosted Zoneを作成する
- 委任元のアカウントに「委任したいサブドメインのHosted Zone」のNSレコードの値を登録する
Aアカウントで管理するexample.com
のサブドメインであるsub.example.com
をBアカウントで管理したい場合について考えてみます。
委任先のアカウントに委任したいサブドメインのHosted Zoneを作成する
今回はsub.example.com
というサブドメインをBアカウントで管理するようにしたい(=BアカウントのRoute53に委任したい)ので、Bアカウントにsub.example.com
のHosted Zoneを作成します。
# Bアカウントで作成
resource "aws_route53_zone" "sub_example_zone" {
name = "sub.example.com"
comment = "sub.example.com"
}
委任元のアカウントに「委任したいサブドメインのHosted Zone」のNSレコードの値を登録する
次に、委任元のアカウント(Aアカウント)に委任したいサブドメインのNSレコードを登録します。
先程作成したHosted Zoneに自動的にNSレコードが登録されているので、コンソールから値を確認し、委任元アカウント(Aアカウント)のexample.com
のHosted ZoneにNSレコードを追加します。
# Aアカウントで作成
resource "aws_route53_record" "sub_example_ns" {
zone_id = aws_route53_zone.example_zone.zone_id
name = "sub"
type = "NS"
ttl = 300
# Bアカウントのsub.example.comのHosted Zoneに登録されているNSレコードの値
records = [
"ns-XXX.awsdns-XX.net.",
"ns-XXX.awsdns-XX.com.",
"ns-XXX.awsdns-XX.co.uk.",
"ns-XXX.awsdns-XX.org.",
]
}
必要な作業は以上です。意外と簡単ですよね。基本的な流れはRoute53でなくても一緒なので、お名前.comからサブドメインを委任する際にも似たような手順でサブドメインの委任ができるかと思います。