AWS Security Hub · Redshift
Redshift.16: Redshift subnet groups should span multiple AZs
Written and reviewed by Emnode · Last reviewed
What does AWS Security Hub Redshift.16 check?
Redshift.16 evaluates the cluster subnet group and fails when its subnets all live in a single Availability Zone. A cluster draws its node placement from this named subnet group, so a single-AZ group pins the whole warehouse to one zone.
Why does Redshift.16 matter?
A single-AZ subnet group is a latent resilience gap nobody notices until an AZ has a bad day, when a power event or network partition then leaves no in-region path to keep serving queries. It also blocks the features that depend on multiple zones: you cannot stand up a meaningful Multi-AZ deployment (Redshift.18) on a single-AZ subnet group.
How do I fix Redshift.16?
- Add subnets from at least two Availability Zones to the cluster subnet group.
- Ensure those subnets have the routing and capacity the cluster needs.
- Use the multi-AZ subnet group when building new clusters, and plan migration for existing ones.
- Default subnet groups to span multiple AZs in your IaC so the gap doesn't recur.
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 Redshift.16 a false positive?
A subnet group can be deliberately pinned to a single Availability Zone for legitimate reasons (a dev or analytics cluster kept in one AZ to avoid cross-AZ data-transfer charges, or a workload co-located in a specific zone for latency or data-residency reasons) and it will fail this resilience control even though that placement is the intended trade-off. The control evaluates the cluster subnet group, not the cluster's criticality, so it can't tell a throwaway warehouse from a production one. Where single-AZ is a conscious decision, capture it as a documented exception (a Security Hub suppression rule scoped by tag, with the owner and review date) rather than adding subnets you don't actually want; reserve real remediation for any production warehouse where a single-AZ subnet group is an oversight, since it also blocks a meaningful Multi-AZ deployment (Redshift.18).
More Redshift controls
- Redshift.1 A Redshift cluster is publicly accessible
- Redshift.2 Connections to Redshift should be encrypted in transit
- Redshift.3 Redshift clusters should have automatic snapshots
- Redshift.4 Redshift clusters should have audit logging
- Redshift.6 Redshift should auto-upgrade major versions
- Redshift.7 Redshift clusters should use enhanced VPC routing
- Redshift.8 Redshift should not use the default admin username
- Redshift.10 Redshift clusters should be encrypted at rest
- Redshift.15 Redshift accepts cluster-port traffic from anywhere
- Redshift.18 Redshift clusters should have Multi-AZ enabled