Back to Checks
OpenSearch domain has at least 3 dedicated master nodes
opensearch_service_domains_fault_tolerant_master_nodes
Service: opensearchSeverity: medium
OfficialBuilt-inVerified
Categories:resilience
Resource Type:AwsOpenSearchServiceDomain
Amazon OpenSearch domains have dedicated master nodes enabled with a master node count of at least 3 to support stable cluster coordination and elections
Risk
With fewer than 3 or disabled dedicated master nodes, the cluster can lose quorum, blocking leader election.
Effects include stalled cluster state updates, failed reads/writes, shard allocation issues, and possible split-brain, reducing availability and integrity.
Run this check with Prowler
Run in Prowler CloudRun
prowler aws --checks opensearch_service_domains_fault_tolerant_master_nodesRecommendation
Enable dedicated master nodes and set the count to at least 3 (use an odd number) to maintain quorum. Use Multi-AZ with standby to distribute masters across zones. Right-size master instances and monitor cluster health to uphold high availability and resilience.
Remediation
CLI
aws opensearch update-domain-config --domain-name <name> --cluster-config "DedicatedMasterEnabled=true,DedicatedMasterType=<instance_type>,DedicatedMasterCount=3"Terraform
# Terraform: set at least 3 dedicated master nodes
resource "aws_opensearch_domain" "<example_resource_name>" {
domain_name = "<example_resource_name>"
cluster_config {
dedicated_master_enabled = true # Critical: enable dedicated masters
dedicated_master_count = 3 # Critical: ensure minimum of 3 masters
dedicated_master_type = "<instance_type>" # Critical: required when enabling masters
}
}NativeIaC
# CloudFormation: set at least 3 dedicated master nodes
Resources:
<example_resource_name>:
Type: AWS::OpenSearchService::Domain
Properties:
ClusterConfig:
DedicatedMasterEnabled: true # Critical: enable dedicated master nodes
DedicatedMasterCount: 3 # Critical: ensure minimum of 3 masters
DedicatedMasterType: "<instance_type>" # Critical: required when enabling mastersOther
1Sign in to the AWS Console and open Amazon OpenSearch Service
2Select your domain and choose Edit
3In Cluster configuration:
4- Enable Dedicated master nodes
5- Set Dedicated master node count to 3
6- Select a Dedicated master instance type
7Choose Save changes
Check Code
from prowler.lib.check.models import Check, Check_Report_AWS
from prowler.providers.aws.services.opensearch.opensearch_client import (
opensearch_client,
)
class opensearch_service_domains_fault_tolerant_master_nodes(Check):
def execute(self):
findings = []
for domain in opensearch_client.opensearch_domains.values():
report = Check_Report_AWS(metadata=self.metadata(), resource=domain)
report.status = "PASS"
report.status_extended = f"Opensearch domain {domain.name} has {domain.dedicated_master_count} dedicated master nodes, which guarantees fault tolerance on the master nodes."
if not getattr(domain, "dedicated_master_enabled", False):
report.status = "FAIL"
report.status_extended = f"Opensearch domain {domain.name} has dedicated master nodes disabled."
elif domain.dedicated_master_count < 3:
report.status = "FAIL"
report.status_extended = f"Opensearch domain {domain.name} does not have at least 3 dedicated master nodes."
findings.append(report)
return findings