1

我正在尝试设置 Kafka,其中每个用户都有几个主题,但每个主题可以由该主题所属的用户与任意数量的消费者组一起使用。

使用的 Kafka 服务器版本:kafka_2.12-2.4.0 (Commit:77a89fcf8d7fa018)

使用的 Kafka 客户端版本:confluent 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读取操作隐式授予 Describe 操作。由于描述操作包括访问“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 权限?

感谢您的任何回答。

4

1 回答 1

0

现在决定使用前缀。工作得很好。对于那些想知道如何做到这一点的人:

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”

于 2020-05-08T19:36:57.330 回答