我无法将 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 生产者、使用者或连接器客户端连接到已启用客户端身份验证的 MSK 集群。身份验证尝试失败并显示错误。
解决方法
IAM 客户端身份验证错误
身份验证失败,拒绝访问
如果您使用 AWS Identity and Access Management (IAM) 进行身份验证,则可能会收到以下错误消息之一:
- "Connection to node -1 (b-1.your-cluster.abc123.c2.kafka.us-east-1.amazonaws.com) failed authentication due to: Access denied"
- "org.apache.kafka.common.errors.SaslAuthenticationException: Access denied"
当访问策略、权限边界和服务控制策略 (SCP) 阻止未通过所需授权的用户时,就会出现上述错误。
要解决此问题,请使用 IAM 访问控制来确保 IAM 角色可以执行集群操作。
SaslAuthenticationException
您会收到以下错误消息之一:
- "org.apache.kafka.common.errors.SaslAuthenticationException: Too many connects"
- "org.apache.kafka.common.errors.SaslAuthenticationException: Internal error"
当您在具有 IAM 访问控制的 kafka.t3.small 代理类型上运行集群且超出连接配额时,就会出现上述错误。kafka.t3.small 实例类型仅接受每个代理每秒进行一次 TCP 连接。当超过连接配额时,创建测试操作将失败。有关详细信息,请参阅 Amazon MSK 如何与 IAM 配合使用。
要解决此问题,请在您的 Amazon MSK Connect Worker 配置中,将 reconnect.backoff.ms 和 reconnect.backoff.max.ms 的值更新为 1000 或更高。然后,升级到更大的代理实例类型,例如 kafka.m5.large。有关详细信息,请参阅适当调整集群的大小: 每个标准代理的分区数。
SASL/SCRAM 客户端身份验证错误
客户端 SASL 机制未开启
您会收到以下错误消息之一:
- "Connection to node -1 (b-1-testcluster.abc123.c7.kafka.us-east-1.amazonaws.com/3.11.111.123:9098) failed authentication due to: Client SASL mechanism 'SCRAM-SHA-512' not enabled in the server, enabled mechanisms are [AWS_MSK_IAM]"
- "Connection to node -1 (b-1-testcluster.abc123.c7.kafka.us-east-1.amazonaws.com/3.11.111.123:9096) failed authentication due to: Client SASL mechanism 'AWS_MSK_IAM' not enabled in the server, enabled mechanisms are [SCRAM-SHA-512]"
在运行集群操作的命令中,当客户端属性文件中的端口号与 Authentication and Security Layer/Salted Challenge Response Authentication Mechanism (SASL/SCRAM) 机制不匹配时,就会发生上述错误。
要与使用 SASL 身份验证的集群中的代理进行通信,请使用端口 9096 从 AWS 内部进行访问,使用端口 9196 进行公共访问。
要与使用 IAM 访问控制的代理进行通信,请使用端口 9098 从 AWS 内部进行访问,使用端口 9198 进行公共访问。
SASL 凭证身份验证错误
您会收到以下错误消息:
"Connection to node -1 (b-3.testcluster.abc123.c2.kafka.us-east-1.amazonaws.com/10.11.111.123:9096) failed authentication due to: Authentication failed during authentication due to invalid credentials with SASL mechanism SCRAM-SHA-512"
出现上述错误是因为您使用的凭证无效。确保将用户凭证存储在 AWS Secrets Manager 中,并将这些凭证与 MSK 集群相关联。
当您通过端口 9096 访问集群时,Secrets Manager 中的用户和密码必须与客户端属性相同。
当您运行 get-secret-value 命令来检索密钥时,请确保 Secrets Manager 中的密码不包含特殊字符。
ClusterAuthorizationException
您会收到以下错误消息:
"org.apache.kafka.common.errors.ClusterAuthorizationException: Request Request(processor=11, connectionId=INTERNAL_IP-INTERNAL_IP-0, session=Session(User:ANONYMOUS,/INTERNAL_IP), listenerName=ListenerName(REPLICATION_SECURE), securityProtocol=SSL, buffer=null) is not authorized"
当您为 MSK 集群启用 SASL/SCRAM 身份验证,并在集群的访问控制列表 (ACL) 中将 resourceType 设置为 CLUSTER,将 operation 设置为 CLUSTER_ACTION 时,就会出现上述错误。
MSK 集群不支持上述设置,因为这些设置会阻止 Apache Kafka 的内部复制。代理的身份在代理间通信中会显示为 ANONYMOUS。如果您的集群必须支持 ACL 并使用 SASL/SCRAM 身份验证,请允许 ANONYMOUS 用户使用 ALL 操作。
对于 ZooKeeper 集群,请运行以下命令将 ALL 操作授予 ANONYMOUS 用户:
./kafka-acls.sh --authorizer-properties zookeeper.connect=example-ZookeeperConnectString --add --allow-principal User:ANONYMOUS --operation ALL --cluster
对于 KRaft 模式集群,请运行以下命令将 ALL 操作授予 ANONYMOUS 用户:
./kafka-acls.sh --bootstrap-server BootstrapBrokerString --command-config client.properties --add --allow-principal User:ANONYMOUS --operation All --cluster
相关信息
如何对尝试连接到 Amazon MSK 集群时收到的错误进行故障排除?