我正在尝试设置Kafka,每个用户都有几个主题,但每个主题可以由主题所属的用户与任何数量的消费者群体一起消费。
使用的Kafka服务器版本:Kafka_2.12-2.4.0(提交:77a89fcf8d7fa018(
使用的Kafka客户端版本:融合Kafka 1.2.2
在Kafka中,ACL已经成功地配置了用户,因此他们只能访问自己的主题。我很难设置组权限,这样每个用户都可以只为自己的主题使用任意数量的用户组,而不会看到其他用户有什么用户组。
以下功能使每个用户都可以使用任何消费者组:
bin/kafka-acls.sh localhost:9092 --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=zookeeper.address --add --allow-principal User:* --operation Read --group '*'
然而,根据https://docs.confluent.io/current/kafka/authorization.html读取操作隐式授予描述操作。由于描述操作包括访问"ListGroup"API,我不希望我的用户能够这样做,我执行了以下操作:
bin/kafka-acls.sh localhost:9092 --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=zookeeper.address --add --deny-principal User:* --operation Describe --group '*'
上面的两个命令产生以下ACL:
Current ACLs for resource `Group:LITERAL:*`:
User:* has Deny permission for operations: Describe from hosts: *
User:* has Allow permission for operations: Read from hosts: *
问题是我得到了以下异常:
Confluent.Kafka.ConsumeException: Broker: Group authorization failed
这让我相信我要么试图实现不可能的事情,要么尝试错了。
TLDR:是否可以设置Kafka ACL以允许使用任何使用者组,而无需同时授予ListGroups API权限?
谢谢你的回答。
现在决定使用前缀。效果很好。对于那些想知道如何做到这一点的人:
bin/kafka-acls.sh localhost:9092 --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=zookeeper.address --add --allow-principal User:XYZ --operation Read --group 'ABC-' --resource-pattern-type prefixed
这段代码将允许用户"XYZ"使用任何以"ABC-"开头的消费者群体,如"ABC-123">