AWS Security Hub · Opensearch
Opensearch.2: An OpenSearch domain is reachable from the public internet
Written and reviewed by Emnode · Last reviewed
What does AWS Security Hub Opensearch.2 check?
Opensearch.2 fails when a domain has a public endpoint instead of being placed inside a VPC. The control reads the domain's VPCOptions; a domain with no VPC configuration is reachable from the public internet and reports FAILED.
Why does Opensearch.2 matter?
A public OpenSearch endpoint sits one weak access policy away from exposing every index it holds — and those indexes routinely contain logs, support transcripts, or PII that nobody intended to publish. Internet reachability also widens the attack surface to credential-stuffing and unauthenticated-access bugs. Keeping the domain in a VPC means an attacker needs network presence before they can even attempt anything.
How do I fix Opensearch.2?
- Inventory public domains by listing each one and checking for absent VPCOptions.
- Stand up a replacement domain inside private subnets, because network mode is fixed at creation and cannot be changed in place.
- Snapshot the public domain, restore into the VPC domain, repoint clients, then delete the public domain.
- Add a Config rule and an SCP so a public domain can never be created again.
Remediation script · bash
# Move the highest-impact case first: an RDS instance in a public subnet group.
aws rds create-db-subnet-group \
--db-subnet-group-name prod-db-subnets-private \
--db-subnet-group-description "Private subnets only - no IGW route" \
--subnet-ids subnet-0aa11bb22cc33dd44 subnet-0ee55ff66aa77bb88
aws rds modify-db-instance \
--db-instance-identifier prod-payments-db \
--db-subnet-group-name prod-db-subnets-private \
--apply-immediately
# Provide a private path before moving compute, so it can still reach AWS services.
# A free S3 gateway endpoint, or a narrow interface endpoint instead of a NAT gateway.
aws ec2 create-vpc-endpoint --vpc-id vpc-0a1b2c3d \
--vpc-endpoint-type Interface \
--service-name com.amazonaws.us-east-1.ssm \
--subnet-ids subnet-0aa11 subnet-0bb22 \
--security-group-ids sg-0ccfn33 --private-dns-enabled
# Force Redshift bulk traffic through the VPC (confirm an S3 gateway endpoint exists first).
aws redshift modify-cluster \
--cluster-identifier analytics-prod --enhanced-vpc-routing Full walkthrough (console steps, edge cases and verification) in the lesson Move resources into private networks (VPC isolation).
Is Opensearch.2 a false positive?
Teams expect to toggle the network mode like the encryption settings, but unlike every other OpenSearch control this one has no in-place fix — a public domain stays FAILED until it is migrated to a fresh VPC domain.
More Opensearch controls
- Opensearch.1 OpenSearch domains should encrypt at rest
- Opensearch.3 OpenSearch should encrypt node-to-node traffic
- Opensearch.4 OpenSearch error logging to CW should be enabled
- Opensearch.5 OpenSearch domains should have audit logging
- Opensearch.6 OpenSearch domains should have >= 3 data nodes
- Opensearch.7 OpenSearch has no fine-grained access control
- Opensearch.8 OpenSearch should use latest TLS policy
- Opensearch.10 OpenSearch should have latest software update