跳至内容

如何解决在使用 IAM 或 SASL/SCRAM 客户端身份验证连接到 Amazon MSK 集群时出现的错误?

2 分钟阅读
0

我无法将 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.msreconnect.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 集群时收到的错误进行故障排除?

AWS 官方已更新 5 个月前