Amazon OpenSearch Service domain has internal user database disabled
Amazon OpenSearch Service domains are evaluated for the internal user database setting (InternalUserDatabaseEnabled). The finding identifies domains that rely on built-in HTTP basic users instead of external identity providers.
Risk
An enabled internal user database creates credential sprawl and weak account lifecycle. Missing centralized MFA, rotation, and revocation raises unauthorized access risk, impacting confidentiality and integrity.
Basic auth on exposed endpoints eases brute force and reduces auditability.
Run this check with Prowler
Run in Prowler Cloudprowler aws --checks opensearch_service_domains_internal_user_database_enabledRecommendation
Prefer federated authentication (IAM, SAML, or Amazon Cognito) and disable the internal user database. Enforce least privilege roles, require MFA, centralize credential rotation and offboarding, and log access. Use VPC access and restrictive policies; avoid HTTP basic auth to minimize exposure.
Remediation
CLI
aws opensearch update-domain-config --domain-name <example_resource_name> --advanced-security-options '{"InternalUserDatabaseEnabled":false}'Terraform
# Terraform: disable internal user database for the domain
resource "aws_opensearch_domain" "<example_resource_name>" {
domain_name = "<example_resource_name>"
advanced_security_options {
internal_user_database_enabled = false # Critical: disables internal user DB to pass the check
}
}NativeIaC
# CloudFormation: disable internal user database for the domain
Resources:
<example_resource_name>:
Type: AWS::OpenSearchService::Domain
Properties:
AdvancedSecurityOptions:
InternalUserDatabaseEnabled: false # Critical: disables internal user DB to pass the checkOther
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_internal_user_database_enabled(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} does not have internal user database enabled."
if domain.internal_user_database:
report.status = "FAIL"
report.status_extended = f"Opensearch domain {domain.name} has internal user database enabled."
findings.append(report)
return findings