跳至内容

当我在开启了 SASL/SCRAM 身份验证的情况下使用我的 Amazon MSK 集群时,如何对身份验证和权限问题进行故障排除?

1 分钟阅读
0

当我使用开启了 SASL/SCRAM 身份验证的 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 集群时,我遇到了身份验证和权限问题。

解决方法

代理日志中的“ClusterAuthorizationException”错误

当您访问 Amazon MSK 集群时,可能会收到以下错误消息:“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.”

当以下两个条件都成立时,您会收到上述错误:

  • 您的 Amazon MSK 集群已开启 SASL/SCRAM 身份验证。
  • 在集群的访问控制列表 (ACL) 中,将 resourceType 设置为 CLUSTER ,将 operation 设置为 CLUSTER_ACTION

Amazon MSK 集群不支持上述设置,因为这些设置会阻止 Apache Kafka 的内部复制。当上述两个条件都成立时,对于代理之间的通信,代理的身份为 ANONYMOUS(匿名)。如果您在使用 SASL/SCRAM 身份验证时需要集群支持这些 ACL,则必须向该 ANONYMOUS 用户授予针对 ALL 操作的权限。这样可以防止限制代理之间的复制。

要将此权限授予 ANONYMOUS 用户,请运行以下命令:

./kafka-acls.sh --authorizer-properties
zookeeper.connect=example-ZookeeperConnectString --add --allow-principal
User:ANONYMOUS --operation ALL --cluster

SASL 身份验证错误

如果您已更改 AWS Secrets Manager 密钥的用户名或密码,但旧凭证仍然有效,则会收到身份验证错误。

AWS Secrets Manager 密钥只能与单个用户关联。当用户不再需要访问集群时,必须取消密钥的关联并更新 ACL。

当您更新密钥的用户名时,AWS Secrets Manager 不会自动解除旧用户名的关联。最佳做法是为新用户创建新密钥。如果您需要使用旧密钥,请先解除该密钥的关联,然后更新凭证,之后再次关联该密钥。有关详细信息,请参阅使用用户

非管理员用户无需授权即可创建和修改 ACL

默认情况下,所有用户都有权创建或修改 ACL。为了防止非管理员用户通过 Apache ZooKeeper 修改 ACL,请将 ZooKeeper 节点放在单独的安全组中。此外,请确保所有 Apache Kafka 命令和客户端连接都通过引导代理运行,而不是 Apache ZooKeeper。

**注意:**您可以使用引导字符串来执行所有 Apache Kafka 操作。

相关信息

Apache Kafka ACL

Scram secrets(Scram 密钥)

AWS 官方已更新 7 个月前