Skip to main content
emnode
Compliance Medium severity

AWS Security Hub · Neptune

Neptune.9: Neptune clusters should span multiple AZs

Written and reviewed by Emnode · Last reviewed

What does AWS Security Hub Neptune.9 check?

Neptune.9 fails when a Neptune DB cluster does not have read-replica instances spread across multiple Availability Zones. The control checks the cluster's instance topology, not just storage durability.

Why does Neptune.9 matter?

Neptune storage is replicated across AZs and so is durable, but a single-instance cluster is not highly available: if its AZ fails, Neptune must rebuild the primary from storage, which takes many minutes of downtime. With a replica in a second AZ, failover promotes the existing replica in seconds. The gap is the difference between a brief blip and a multi-minute outage.

How do I fix Neptune.9?

  1. Inspect the cluster's instances and their AZs with describe-db-clusters and describe-db-instances.
  2. Add a read-replica in a different AZ with create-db-instance, matching the primary's instance class.
  3. Set failover priority tiers so the right replica is promoted, and point read traffic at the reader endpoint.
  4. Default a multi-AZ topology in your IaC so new clusters are compliant from creation.

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 Neptune.9 a false positive?

A single-instance cluster is sometimes the intended design: a dev or test cluster, a sandbox, or a workload that can tolerate the multi-minute rebuild after a primary failure and doesn't want to pay for a second instance. The control checks the cluster's instance topology and fails whenever every instance sits in one AZ, so it can't tell a deliberately lean cluster from an availability gap. If single-AZ is a conscious, signed-off choice for that environment, record the accepted recovery-time risk and suppress the finding for the specific cluster rather than adding a replica you don't need, and keep the control active so production clusters that drift to one AZ still surface.

Part of the learning path Tighten your databases
  • Neptune.1 Neptune clusters should encrypt at rest
  • Neptune.2 Neptune clusters should export audit logs to CW
  • Neptune.3 A Neptune snapshot is shared publicly
  • Neptune.5 Neptune clusters should have automated backups
  • Neptune.6 Neptune snapshots should be encrypted at rest
  • Neptune.7 Neptune clusters should have IAM DB auth