Check ID: kafka_cluster_is_public
Provider: AWS
Service: kafka
Severity: CRITICAL
Categories: internet-exposed
Resource type: AwsMskCluster

What this check verifies

Amazon MSK clusters with broker endpoints exposed to the public Internet. Serverless clusters are private by default; provisioned clusters are evaluated for their public access configuration.

Risk

Public brokers erode CIA:
  • Confidentiality: unauthorized consumers can read topics
  • Integrity: rogue producers inject or alter events
  • Availability: floods or scans strain brokers
This enables metadata enumeration, data exfiltration, stream poisoning, and costly egress.

Recommendation

Keep brokers private within the VPC by disabling public access and limiting exposure to trusted networks. Enforce strong auth (SASL/IAM, SASL/SCRAM, or mTLS), require TLS, and apply Kafka ACLs. Provide access via VPN, bastion, or private networking (peering/Transit Gateway). Apply least privilege and monitor broker connections.

Remediation

aws kafka update-connectivity --cluster-arn <CLUSTER_ARN> --current-version <CURRENT_CLUSTER_VERSION> --connectivity-info '{"PublicAccess":{"Type":"DISABLED"}}'

References

Where this check fires

This check runs on every scheduled scan against your AWS account. Findings appear at Cloud Security → Findings filterable by Check ID = kafka_cluster_is_public. To re-evaluate after a fix, hit Run now on the account’s schedule under Cloud Security → Schedules — the next scan re-checks this control and marks the finding fixed or keeps it persistent.
← Back to AWS checks