Авторизация Kafka между узлами с помощью TLS

#apache-kafka #acl #tls1.2

#apache-kafka #acl #tls1.2

Вопрос:

У меня ужасные проблемы с ACL авторизации в Kafka 2.6. У меня настроен TLS, и он отлично работает между моим клиентским приложением и всеми узлами kafka. У меня есть свойства acl в файле server.properties

 #TLS Portion
advertised.listeners=SSL://10.1.1.2:9092
listeners=SSL://:9092
ssl.keystore.location=/opt/kafka/keystore.jks
ssl.keystore.password=password
ssl.key.password=password
ssl.truststore.location=/opt/kafka/truststore.jks
ssl.truststore.password=password
ssl.enabled.protocols=TLSv1.2
ssl.client.auth=required
security.inter.broker.protocol=SSL
security.protocol=SSL

#ACL Portion
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:CN=me@me.me
  

У меня включена ОТЛАДКА для журналов авторизации. Если я установлю для параметра allow.everyone~ значение true, это сработает, потому что я полагаю, что он перестает беспокоиться об авторизации / ACL, и в настоящее время значение super.users используется для моего клиентского приложения и отлично работает для сообщений ОТЛАДКИ.

Когда я запускаю службу на каждом узле, я получаю ClusterAction not allowed, когда узел выглядит так, как будто они пытаются запросить UpdateMetadata друг у друга.

Я применил запись ACL, предполагая, что сервер CN=server.side

 bin/kafka-acls.sh --authorizer kafka.security.authorizer.AclAuthorizer --authorizer-properties zookeeper.connect=10.1.1.5:2181 --add --allow-principal User:CN=server.side  --operation ClusterAction --cluster sample-cluster
  

на всех узлах нет кубиков.

Я пытаюсь установить с --operation ALL помощью, и это не сработало. Я также пытаюсь вместо этого указать команду на узел --bootstrap-server , и это вообще ничего не возвращает, и я могу получить ошибку тайм-аута (я предполагаю, что он принимает запись ACL, но затем не может распространить ее на другие узлы из-за вышеупомянутой проблемы).

Я прошел через добавление ACL для тем, потребителей и производителей различной схемы разрешений, но, похоже, это происходит только при запуске, когда узел пытается перекрестно обмениваться данными. В результате я получаю пользователей и производителей клиентских приложений, которые могут подключаться, авторизоваться в своих соответствующих темах, но затем не возникают проблемы с метаданными ЛИДЕРА.

Я был в Google весь день; кто-нибудь знаком с этим? TIA

Ответ №1:

Согласно документации Confluent при авторизации.

Каждый брокер должен иметь возможность взаимодействовать со всеми другими брокерами для репликации и когда он действует как контроллер. Вы должны добавить участника-брокера в качестве суперпользователя, иначе Kafka не будет работать.

Также

В защищенном кластере авторизация требуется как для клиентских запросов, так и для операций между брокерами. Операции между брокерами разделены на два класса: кластерные и тематические. Операции кластера относятся к операциям, необходимым для управления кластером, таким как обновление метаданных брокера и раздела, изменение лидера и набора синхронизированных реплик раздела и запуск контролируемого завершения работы.

Из-за того, что репликация тематических разделов работает внутри, участник брокера должен быть суперпользователем, чтобы брокер мог правильно реплицировать темы от лидера к последователю.

Итак, вы должны добавить в список своих участников-брокеров. super.users Кстати, вы можете настроить ssl.principal.mapping.rules извлечение основного имени таким образом, чтобы оно не содержало CN= часть. Например: подобное правило RULE:^CN=(.*?)$/$1/ даст вам подобное принципалу me@me.me .