You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过NLB监听器使用IAM认证连接MSK集群的可行性咨询

问题描述

现有一套AWS MSK 3.1.1集群,包含3个Broker,每个可用区各部署一个;已配置网络负载均衡器(NLB),其DNS名称为kafka-integrations-dev.com。
NLB针对IAM Broker配置了3个监听器:

  • TLS:7200 -> 目标组#1 TLS:9098 -> Broker#1的IP地址及9098端口
  • TLS:7201 -> 目标组#2 TLS:9098 -> Broker#2的IP地址及9098端口
  • TLS:7202 -> 目标组#3 TLS:9098 -> Broker#2的IP地址及9098端口
    所有上述监听器均配置了域名为kafka-integrations-dev.com的SSL/TLS证书。

请问是否可以将kafka-integrations-dev.com:7200、kafka-integrations-dev.com:7201、kafka-integrations-dev.com:7202作为引导服务器,通过IAM认证连接至该MSK集群?目前我们遇到了“Hostname verification failed”错误。

另外在Stack Overflow上找到一篇帖子《Making AWS MSK public using NLB and IAM authentication - Hostname verification failed》,作者提到2021年时不支持通过NLB使用IAM认证连接MSK。

解答

核心结论

针对MSK 3.1.1版本,不建议直接用这种NLB转发方式通过IAM认证连接集群,你遇到的“Hostname verification failed”错误是核心矛盾导致的必然结果。

错误原因

MSK的IAM认证依赖TLS握手阶段的主机名验证逻辑:

  1. 客户端通过NLB域名连接时,NLB仅转发TLS流量到Broker的9098(IAM认证端口)。
  2. Broker返回的TLS证书里的主机名是MSK集群自身的内部域名(比如b-1.xxx.xxx.kafka.us-east-1.amazonaws.com这类格式),并非你配置的NLB域名kafka-integrations-dev.com。
  3. 客户端默认会校验证书主机名和连接域名是否一致,不匹配就会抛出“Hostname verification failed”错误。

关于2021年帖子的补充

那篇帖子提到的“不支持”本质就是这个证书主机名不匹配的问题,直到现在MSK也没有改变这个逻辑——它不会为NLB域名签发对应证书,所以直接通过NLB转发IAM端口流量必然触发验证失败。

可行替代方案

如果需要公网+IAM认证访问MSK,推荐两种方式:

  • 开启MSK原生公网访问:直接在MSK集群配置里开启公网访问(需同步配置安全组允许目标公网IP),此时用MSK提供的公网引导服务器地址即可,证书主机名会自动匹配,无需额外NLB。
  • 临时关闭客户端主机名验证(仅测试用):如果必须保留现有NLB架构,可以在客户端配置里关闭TLS主机名验证(比如Java客户端设置ssl.endpoint.identification.algorithm=为空字符串),但这会降低TLS连接安全性,有中间人攻击风险,只能用于测试环境。

内容的提问来源于stack exchange,提问作者Lesha Pipiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:17:26