如何解决使用已启用 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 集群启用了 Simple Authentication and Security Layer (SASL)/Salted Challenge Response Mechanism (SCRAM) 身份验证。
  • 您已在集群的访问控制列表 (ACL) 中设置 resourceType=CLUSTERoperation=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 密钥

AWS 官方
AWS 官方已更新 2 年前
没有评论