Есть ли способ настроить Kafka ACL, чтобы разрешить использование любой группы потребителей без их перечисления? - PullRequest
1 голос
/ 05 мая 2020

Я пытаюсь настроить Kafka, где у каждого пользователя есть несколько тем, но каждый topi c может быть использован с любым количеством групп потребителей пользователем, которому принадлежит topi c.

Используемая версия сервера Kafka : kafka_2.12-2.4.0 (Commit: 77a89fcf8d7fa018)

Используемая версия клиента Kafka : confluent kafka 1.2.2

В Kafka ACL есть успешно настроенные пользователи, поэтому они могут получить доступ только к своим топи c. Я изо всех сил пытаюсь настроить разрешения для групп таким образом, чтобы каждый пользователь мог использовать любое количество групп потребителей только для своих собственных c, не видя, какие группы потребителей есть у других.

Следующее позволяет каждому пользователю использовать любую группу потребителей:

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. Поскольку операция Describe включает доступ к API ListGroup, что я не хочу, чтобы мои пользователи могли делать это, я выполнил следующее:

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

Это заставляет меня думать, что я либо пытаюсь достичь невозможного, либо делаю это неправильно.

TL; DR : можно ли настроить списки управления доступом Kafka, чтобы разрешить использование любой группы потребителей без одновременного предоставления разрешения API ListGroups?

Спасибо за любой ответ.

1 Ответ

0 голосов
/ 08 мая 2020

А пока решил использовать префикс. Работает достаточно хорошо. Для тех, кто задается вопросом, как это сделать:

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» использовать любую группу потребителей, начинающуюся с «AB C -», например «AB C -123». '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...