Making AWS MSK public using NLB and IAM authentication - Hostname verification failed
Master System Design with Codemia
Enhance your system design skills with over 120 practice problems, detailed solutions, and hands-on exercises.
Amazon Managed Streaming for Apache Kafka (AWS MSK) is a fully managed service that makes it easy for developers to build and run applications that use Apache Kafka to process streaming data. AWS MSK automatically provisions and runs your Kafka infrastructure and operations such as the Kafka clusters and Apache ZooKeeper nodes.
One challenge that arises with AWS MSK, particularly in more complex networking scenarios, is providing secure external access to the Kafka cluster. We'll discuss a method to expose AWS MSK to the public Internet securely using Network Load Balancers (NLB) and IAM authentication along with troubleshooting a common issue - hostname verification failures.
Steps to Make AWS MSK Public Using NLB and IAM Authentication
1. Set Up AWS MSK Cluster
Firstly, you need an active AWS MSK cluster. During the setup, choose your VPC, subnets, and security groups carefully, as these will impact how you configure the NLB.
2. Create a Network Load Balancer (NLB)
- Create an NLB and set it to listen on the Kafka broker port, typically
9092. - Target groups will be IP targets, not instance targets, consisting of the IP addresses of the MSK broker nodes.
3. Set Up Listener for NLB
For Kafka, TCP listeners are appropriate. Configure the listener on the same port as your brokers (9092).
4. Update Route 53 for DNS Resolution
Create a Route 53 DNS entry for your NLB. This ensures users can connect using a friendly DNS name instead of an IP address.
5. Configure Security Groups
The security group of your NLB should allow inbound traffic on the appropriate ports from the clients’ locations and outbound traffic to the MSK brokers.
6. Implement IAM Policies for Authentication
Authentication in AWS MSK can be handled via IAM. Configure your clients and MSK with IAM policies that strictly control who can produce and consume data based on predefined policies.
7. Troubleshooting: Hostname Verification Failed
When clients connect to a Kafka server, they might face a Hostname Verification Failed error due to the discrepancy between the hostname used by the client and the certificate's Common Name (CN) or Subject Alternative Name (SANs).
To resolve this issue:
- Ensure that the DNS name matches: The DNS name used to configure the NLB should match the CN/SANs in your certificate.
- Client Configuration: On the client side, ensure that the hostname verification is either appropriately configured or disabled (the latter is not recommended for production environments).
Best Practices and Additional Measures
- Encryption in Transit: Use TLS for clients connecting to NLB to ensure data encryption in transit.
- Monitoring and Logging: Utilize AWS CloudWatch for monitoring the NLB and MSK cluster performance.
- Regular Updates and Patch Management: Keep the client libraries up to date to avoid security vulnerabilities.
Summary Table
| Feature | Description | Configuration Notes |
| AWS MSK Setup | Provision managed Kafka clusters. | Choose VPC, subnets, and security groups. |
| NLB Configuration | Route traffic to MSK broker nodes. | Set TCP listeners on port 9092. |
| IAM Authentication | Secure connection using AWS IAM roles. | Define strict access policies. |
| Hostname Verification | Resolve client errors. | Match DNS name with certificate CN/SANs. |
| Security | Implement robust security practices. | Use TLS, follow IAM best practices. |
By following these steps and considering the troubleshooting tips, you can successfully make AWS MSK publicly accessible in a secure manner using a Network Load Balancer and IAM authentication, thereby enhancing the flexibility and scalability of your streaming solutions on AWS.

