Back to Checks
aws

Redshift cluster has Multi-AZ enabled

redshift_cluster_multi_az_enabled
Service: redshiftSeverity: medium
OfficialBuilt-inVerified
Categories:resilience
Resource Type:AwsRedshiftCluster

Amazon Redshift clusters are evaluated for Multi-AZ deployment on provisioned RA3 clusters, confirming compute spans two Availability Zones and is served via a single endpoint.

Risk

Absent Multi-AZ, a single-AZ cluster is exposed to AZ or node failures, leading to dropped connections, aborted queries, and stalled ETL/BI jobs. This reduces availability, increases RTO, delays analytics, and risks SLA breaches with cascading pipeline backlogs.

Run this check with Prowler

Run in Prowler Cloud
Run
prowler aws --checks redshift_cluster_multi_az_enabled

Recommendation

Enable Multi-AZ deployments for provisioned RA3 clusters to avoid single-AZ dependency. Align designs to fault tolerance and high availability: provision sufficient capacity, implement client/ETL retries and reconnects, validate failover periodically, and monitor performance and error rates.

Remediation

CLI

aws redshift modify-cluster --cluster-identifier <cluster-id> --multi-az

Terraform

# Enable Multi-AZ on a Redshift cluster
resource "aws_redshift_cluster" "<example_resource_name>" {
  cluster_identifier = "<example_resource_id>"
  multi_az           = true  # Critical: enables Multi-AZ so the check passes
}

NativeIaC

# CloudFormation: Enable Multi-AZ on a Redshift cluster
Resources:
  <example_resource_name>:
    Type: AWS::Redshift::Cluster
    Properties:
      ClusterIdentifier: <example_resource_id>
      MultiAZ: true  # Critical: enables Multi-AZ so the check passes

Other

1In the Amazon Redshift console, go to Clusters
2Select the target cluster
3Choose Actions > Activate Multi-AZ
4Confirm and wait until the cluster shows Multi-AZ: Yes

Check Code

from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.redshift.redshift_client import redshift_client


class redshift_cluster_multi_az_enabled(Check):
    def execute(self):
        findings = []
        for cluster in redshift_client.clusters:
            report = Check_Report_AWS(metadata=self.metadata(), resource=cluster)
            report.status = "FAIL"
            report.status_extended = (
                f"Redshift Cluster {cluster.id} does not have Multi-AZ enabled."
            )
            if cluster.multi_az == "Enabled":
                report.status = "PASS"
                report.status_extended = (
                    f"Redshift Cluster {cluster.id} has Multi-AZ enabled."
                )

            findings.append(report)

        return findings