Delegating a Route 53 hosted zone across AWS accounts isn’t about granting access to the zone itself, but rather about enabling a different account to manage the DNS records within that zone.
Let’s imagine you have a primary AWS account (let’s call it Account-A) that owns the domain example.com and its associated Route 53 hosted zone. You want your development team, working in a separate AWS account (Account-B), to be able to create and manage subdomains like dev.example.com without giving them direct write access to Account-A’s Route 53 zone or the root domain. This is where cross-account delegation shines.
Here’s how it looks in practice.
Account-A (Owner of example.com)
-
Create a Hosted Zone: If you haven’t already, create the public hosted zone for
example.cominAccount-A.- Go to Route 53 -> Hosted zones -> Create hosted zone.
- Domain name:
example.com - Type: Public hosted zone
- This will give you a set of NS (Name Server) records. Note these down.
-
Create a Delegation Set: This is the key for delegation.
- Go to Route 53 -> Hosted zones -> Actions -> Create delegation set.
- Choose the hosted zone you just created (
example.com). - This generates a set of four NS records. These are the delegated name servers that
Account-Bwill point to.
-
Create a Record Set for Delegation: Now, within your
example.comhosted zone inAccount-A, you’ll create a record set that points to the NS records of the delegation set. This record tells Route 53 that traffic for a specific subdomain (or the whole zone) is handled elsewhere.- In the
example.comhosted zone, click "Create record". - Record name:
dev(if you wantAccount-Bto managedev.example.com) or leave blank if delegating the entireexample.com. - Record type:
NS - Value: Enter the four NS records from the delegation set you created in step 2. Each NS record goes into its own line in the value field.
- TTL: 300 seconds (or adjust as needed).
- In the
Account-B (Delegated Account for dev.example.com)
-
Create a Hosted Zone (Crucial Step): In
Account-B, you create a hosted zone for the subdomain you intend to manage.- Go to Route 53 -> Hosted zones -> Create hosted zone.
- Domain name:
dev.example.com(if you delegateddevin Account-A) - Type: Public hosted zone
- This will again give you a set of NS records.
-
Associate with Delegation Set: Now, you tell Route 53 in
Account-Bthat thisdev.example.comzone is part of a delegation from another account.- When creating the hosted zone in step 1, you would have seen an option: "Create a new delegation set" or "Use an existing delegation set".
- Instead, you’ll go to Route 53 -> Hosted zones -> Actions -> "Create delegation set".
- Select "Create a delegation set for a subdomain".
- Enter the NS records that were provided by
Account-Afor theexample.comdelegation set in step 2 ofAccount-A. - This links the
dev.example.comzone inAccount-Bto the delegation mechanism established byAccount-A.
-
Manage Records: Now, in
Account-B, you can create any DNS records fordev.example.com.- Go to the
dev.example.comhosted zone inAccount-B. - Click "Create record".
- Record name:
api(forapi.dev.example.com) - Record type:
A - Value:
192.0.2.10 - TTL: 300 seconds.
- Go to the
The Mental Model:
Route 53’s cross-account delegation isn’t a direct IAM permission share. Instead, it works by establishing a chain of trust and authority. Account-A declares, via NS records within its example.com zone, that the NS records associated with Account-B’s dev.example.com zone are authoritative for dev.example.com. When a DNS resolver queries for api.dev.example.com, it first asks the NS records for example.com. These NS records point to the delegation set’s NS servers, which then direct the query to the NS servers for dev.example.com (managed by Account-B). Account-B’s zone then provides the IP address for api.dev.example.com.
The key insight is that Account-B doesn’t see or manage Account-A’s example.com zone. It only manages its own zone (dev.example.com), and the delegation mechanism makes Route 53 recognize that zone as the authority for that specific subdomain.
The one thing that often trips people up is thinking they need to grant IAM permissions between the accounts for Route 53. You do not. The delegation is purely DNS-level. The only "permission" is that Account-B is allowed to create a hosted zone with the correct name and associate it with the delegation set.
Once you’ve successfully delegated dev.example.com to Account-B and created records there, the next logical step is to understand how to integrate these delegated zones with VPCs using private hosted zones or VPC peering.