AWS Route 53 is a highly reliable DNS service, but "reliable infrastructure" doesn't mean "your DNS records are protected from accidental or unauthorized changes." A team member with Route53 access can modify or delete a record in seconds. A Terraform misconfiguration can overwrite an A record during a deployment. An IAM policy that's too permissive lets a compromised service account make DNS changes without an alert firing.
Route 53 has more native observability than most DNS providers — CloudTrail logs every API call, and EventBridge can react to changes. This article covers how to use those tools and where external DNS monitoring fills the remaining gaps.
Every Route 53 change is recorded in CloudTrail as a route53.amazonaws.com event. The relevant API calls to watch:
ChangeResourceRecordSets — any record add, update, or deleteDeleteHostedZone — zone deletion (catastrophic)CreateHostedZone — new zone creationAssociateVPCWithHostedZone — private zone association changesTo see recent DNS changes in CloudTrail via CLI:
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=EventSource,AttributeValue=route53.amazonaws.com \
--start-time 2026-10-01 \
--query 'Events[?EventName==`ChangeResourceRecordSets`].[EventTime,Username,CloudTrailEvent]' \
--output table
CloudTrail has up to 90 days of event history in the console (and indefinitely if shipped to S3). The limitation: it's a log, not an alert system. You get visibility into what changed, not a real-time notification when a change occurs.
EventBridge can trigger a Lambda function or SNS notification whenever Route 53 records change. The setup:
aws events put-rule \
--name "route53-record-changes" \
--event-pattern '{
"source": ["aws.route53"],
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"eventSource": ["route53.amazonaws.com"],
"eventName": ["ChangeResourceRecordSets"]
}
}' \
--state ENABLED
aws sns create-topic --name route53-dns-changes
aws sns subscribe \
--topic-arn arn:aws:sns:us-east-1:ACCOUNT_ID:route53-dns-changes \
--protocol email \
--notification-endpoint ops@yourcompany.com
aws events put-targets \
--rule route53-record-changes \
--targets '[{
"Id": "1",
"Arn": "arn:aws:sns:us-east-1:ACCOUNT_ID:route53-dns-changes",
"InputTransformer": {
"InputPathsMap": {
"user": "$.detail.userIdentity.arn",
"zone": "$.detail.requestParameters.hostedZoneId",
"action": "$.detail.requestParameters.changeBatch.changes[0].action",
"record": "$.detail.requestParameters.changeBatch.changes[0].resourceRecordSet.name"
},
"InputTemplate": "\"DNS change in Route 53 zone : on (by )\""
}
}]'
us-east-1 regardless of where your hosted zone is. Your EventBridge rule must be created in us-east-1 for it to receive Route 53 events.
This setup fires an SNS email the moment ChangeResourceRecordSets is called, with the zone ID, record name, and the IAM principal that made the change. It catches changes made via the AWS Console, CLI, Terraform, CDK, and any other AWS API client.
The EventBridge approach covers internal AWS changes. It doesn't cover:
A complete setup for a Route 53 environment typically combines three layers:
Layers 1 and 2 come from AWS natively. Layer 3 requires checking from outside AWS.
Enter any domain to see current DNS records (A, AAAA, CNAME, MX, TXT, NS) as seen by external resolvers. Useful for verifying Route 53 changes have propagated.
Check DNS records → Get change alerts →The EventBridge + CloudTrail setup gives you good coverage but has non-trivial setup cost: IAM policies, cross-region considerations for Route 53 events, Lambda or SNS wiring, and ongoing maintenance of the alerting infrastructure itself.
For teams that want DNS change alerts without building and maintaining AWS infrastructure, external DNS monitoring services poll your records on a schedule and alert on changes — without requiring AWS credentials or internal infrastructure.
DNSWatch monitors your Route 53 records externally and sends email alerts when any A, CNAME, MX, or TXT record changes. No AWS credentials needed — it queries public resolvers the same way your users do.
Join the DNSWatch waitlist → Free DNS checker →