Back to Checks
Neptune cluster has Multi-AZ enabled
neptune_cluster_multi_az
Service: neptuneSeverity: medium
OfficialBuilt-inVerified
Categories:resilience
Resource Type:AwsRdsDbCluster
Amazon Neptune DB clusters are evaluated for Multi-AZ deployment by checking whether the cluster has read-replica instances distributed across multiple Availability Zones.
A failing result indicates the cluster is deployed in a single AZ and lacks read-replicas that enable automatic promotion and cross-AZ failover.
Risk
Single-AZ deployment creates a clear availability single point of failure.
- Availability: AZ outage or maintenance can cause prolonged downtime until the primary is rebuilt.
- Integrity/Recovery: Manual recovery increases risk of configuration errors and longer RTOs, impacting operations and compliance.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks neptune_cluster_multi_azRecommendation
Adopt a high availability deployment model for production Neptune clusters by placing read-replicas in separate Availability Zones to avoid single points of failure.
Regularly test automated failover and combine HA with robust backup and recovery practices as part of a defense-in-depth strategy.
Remediation
Terraform
resource "aws_neptune_cluster" "example" {
cluster_identifier = "<db_cluster_identifier>"
availability_zones = ["<AZ_1>", "<AZ_2>", "<AZ_3>"] # Deploy across multiple AZs for high availability
}NativeIaC
Resources:
NeptuneCluster:
Type: AWS::Neptune::DBCluster
Properties:
DBClusterIdentifier: "<DB_CLUSTER_IDENTIFIER>"
# Deploy across multiple AZs for high availability and failover
AvailabilityZones:
- "<AZ_1>"
- "<AZ_2>"
- "<AZ_3>"Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.neptune.neptune_client import neptune_client
class neptune_cluster_multi_az(Check):
def execute(self):
findings = []
for cluster in neptune_client.clusters.values():
report = Check_Report_AWS(metadata=self.metadata(), resource=cluster)
report.resource_id = cluster.name
report.status = "FAIL"
report.status_extended = (
f"Neptune Cluster {cluster.name} does not have Multi-AZ enabled."
)
if cluster.multi_az:
report.status = "PASS"
report.status_extended = (
f"Neptune Cluster {cluster.name} has Multi-AZ enabled."
)
findings.append(report)
return findings