Skip to main content
emnode
Compliance Medium severity

AWS Security Hub · RDS

RDS.5: RDS DB instances should use multiple AZs

Written and reviewed by Emnode · Last reviewed

What does AWS Security Hub RDS.5 check?

RDS.5 checks whether a standalone RDS DB instance is configured with multiple Availability Zones. It reports FAILED for any single-AZ instance. It does not apply to instances that are part of a Multi-AZ DB cluster deployment; that topology is covered by RDS.15.

Why does RDS.5 matter?

By default an RDS instance runs in a single AZ, and that is the only copy. If the AZ has a power, network, or hardware event the database is unreachable until AWS restores it or you rebuild from backup: hours of downtime and potentially lost data. Multi-AZ maintains a synchronous standby in a second AZ and fails over automatically in a minute or two, with no application change. The standby is not readable; it exists purely for durability and failover.

How do I fix RDS.5?

  1. Decide which databases warrant Multi-AZ: production and revenue-facing instances almost always do; dev/test usually do not.
  2. Enable it with modify-db-instance --multi-az --apply-immediately (the standby builds in the background with no downtime).
  3. Record single-AZ exceptions deliberately rather than leaving resilience to chance.
  4. Default production instances to Multi-AZ in IaC.

Remediation script · bash

# Fix the highest-impact data stores first: enable Multi-AZ on production databases.
for db in $(aws rds describe-db-instances \
    --query 'DBInstances[?MultiAZ==`false` && DBClusterIdentifier==null].DBInstanceIdentifier' --output text); do
  aws rds modify-db-instance --db-instance-identifier "$db" \
    --multi-az --apply-immediately
  echo "$db: standby being provisioned in a second AZ"
done

# Span a stateless compute fleet across three AZs, then mirror the set on its load balancer.
aws autoscaling update-auto-scaling-group --auto-scaling-group-name web-tier-asg \
  --vpc-zone-identifier "subnet-0aaa1,subnet-0bbb2,subnet-0ccc3"
aws elbv2 set-subnets --load-balancer-arn "$ALB_ARN" \
  --subnets subnet-0aaa1 subnet-0bbb2 subnet-0ccc3

Full walkthrough (console steps, edge cases and verification) in the lesson Deploy across multiple Availability Zones.

Is RDS.5 a false positive?

Multi-AZ roughly doubles the per-database cost because you pay to run the standby, so a single-AZ dev or throwaway instance failing RDS.5 is often a correct, deliberate choice: record it as an exception rather than enabling Multi-AZ everywhere to clear the dashboard.

Part of the learning path Tighten your databases
  • RDS.1 An RDS snapshot is shared publicly
  • RDS.2 An RDS instance is publicly accessible from the internet
  • RDS.3 RDS DB instances should be encrypted at rest
  • RDS.4 RDS snapshots should be encrypted at rest
  • RDS.6 RDS lacks enhanced monitoring
  • RDS.7 RDS clusters should have deletion protection
  • RDS.8 RDS DB instances should have deletion protection
  • RDS.9 RDS engine logs are not shipped to CloudWatch
  • RDS.10 RDS relies on long-lived database passwords
  • RDS.11 RDS instances should have automatic backups
  • RDS.12 IAM auth should be configured for RDS clusters
  • RDS.13 RDS is not receiving automatic minor security patches