我在使用已启用 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 集群启用了 Simple Authentication and Security Layer (SASL)/Salted Challenge Response Mechanism (SCRAM) 身份验证。
- 您已在集群的访问控制列表 (ACL) 中设置 resourceType=CLUSTER 和 operation=CLUSTER_ACTION。
Amazon MSK 集群不支持此设置,因为此设置会阻止内部 Apache Kafka 复制。如果使用此设置,代理的身份将显示为匿名,以便代理之间进行通信。如果需要集群在使用 SASL/SCRAM 身份验证时支持这些 ACL,则必须将所有操作的权限授予匿名用户。此举可以防止代理之间的复制受到限制。使用以下命令将此权限授予匿名用户:
./kafka-acls.sh --authorizer-properties
zookeeper.connect=example-ZookeeperConnectString --add --allow-principal
User:ANONYMOUS --operation ALL --cluster
您更改了 AWS Secrets Manager 密钥的用户名和/或密码,但旧凭证仍处于活跃状态
AWS Secrets Manager 密钥必须与单个用户关联。如果用户不再需要访问集群,则必须解除与密钥的关联,并且必须更新 ACL。更新密钥上的用户名不会自动解除与旧用户名的关联。因此,最佳实践是为新用户创建新密钥。如果需要使用旧密钥,请先解除与密钥的关联,然后更新凭证,再重新关联密钥。有关更多信息,请参阅《使用用户》。
非管理员用户可以创建新的 ACL 以及修改现有 ACL
默认情况下,任何用户都可以创建或修改 ACL。为防止非管理员用户使用 Apache ZooKeeper 创建或更新 ACL,请务必通过将 ZooKeeper 节点放置在单独的安全组中来限制对 Apache ZooKeeper 的访问。另外,请确保所有 Apache Kafka 命令和客户端连接都通过引导代理而非 Apache ZooKeeper 运行。请注意,所有 Apache Kafka 操作都可以使用引导字符串来执行。
相关信息
Apache Kafka ACL
Scram 密钥