Как правильно настроить Kafka acl и sasl для нескольких пользователей?

Ссылка скопирована
1 ответ

Всем привет.

Пошёл 3 день конфигурации kafka...

Есть 1 брокер и zookeeper. Между собой прекрасно взаимодействуют. Есть kafka-gitops, который тоже прекрасно ходит в кластер под своим пользователем и создаёт/меняет топики/права. Есть клиент на php, который через rdkafka пытается послать сообщение в заданный топик, но получает:

%3|1690452667.087|FAIL|rdkafka#producer-1| [thrd:sasl_plaintext://10.0.200.20:9093/bootstrap]: sasl_plaintext://1.2.3.4:9092/bootstrap: SASL authentication error: Authentication failed: Invalid username or password (after 301ms in state AUTH_REQ)

%3|1690452667.087|FAIL|rdkafka#producer-1| [thrd:sasl_plaintext://10.0.200.20:9093/bootstrap]: sasl_plaintext://1.2.3.4:9092/bootstrap: SASL authentication error: Authentication failed: Invalid username or password (after 301ms in state AUTH_REQ)

При этом если поставить в настройки админского пользователя, то ошибок нет, но сообщение в топик не добавляется.

/etc/kafka/kafka_server_jaas.conf выглядит так:

KafkaServer {   org.apache.kafka.common.security.plain.PlainLoginModule required   username="admin"   password="pass"   user_admin="pass"   user_gitops-user="pass1"   user_dev="pass2"; };  KafkaClient {     org.apache.kafka.common.security.plain.PlainLoginModule required     user_admin="pass";      org.apache.kafka.common.security.plain.PlainLoginModule required     username="user_dev"     password="pass2"; };  Client {   org.apache.zookeeper.server.auth.DigestLoginModule required   username="admin"   password="pass"; };

KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="pass" user_admin="pass" user_gitops-user="pass1" user_dev="pass2"; }; KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required user_admin="pass"; org.apache.kafka.common.security.plain.PlainLoginModule required username="user_dev" password="pass2"; }; Client { org.apache.zookeeper.server.auth.DigestLoginModule required username="admin" password="pass"; };

Вполне может быть, что где-то тут ошибка, но всё запускается и работает... С этим файлом я упражнялся по всякому... Это текущий вариант.

Композ файлом не буду загромождать описание.
Переменные окружения про настройки безопасности:

KAFKA_SECURITY_PROTOCOL: 'SASL_PLAINTEXT' KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf" KAFKA_SASL_ENABLED_MECHANISMS: PLAIN KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN KAFKA_AUTHORIZER_CLASS_NAME: "kafka.security.authorizer.AclAuthorizer"

KAFKA_SECURITY_PROTOCOL: 'SASL_PLAINTEXT' KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf" KAFKA_SASL_ENABLED_MECHANISMS: PLAIN KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN KAFKA_AUTHORIZER_CLASS_NAME: "kafka.security.authorizer.AclAuthorizer"

на клиенте ставлю:

enqueue:     default:         transport:             dsn: '%env(resolve:ENQUEUE_DSN)%'             global:                 group.id: 'dev-bp'                 metadata.broker.list: '%env(resolve:KAFKA_BROKER_LIST)%'                 sasl.mechanism: PLAIN                 security.protocol: SASL_PLAINTEXT                 sasl.username: '%env(resolve:KAFKA_BROKER_USER)%'                 sasl.password: '%env(resolve:KAFKA_BROKER_PASS)%'             topic:                 auto.offset.reset: 'beginning'

enqueue: default: transport: dsn: '%env(resolve:ENQUEUE_DSN)%' global: group.id: 'dev-bp' metadata.broker.list: '%env(resolve:KAFKA_BROKER_LIST)%' sasl.mechanism: PLAIN security.protocol: SASL_PLAINTEXT sasl.username: '%env(resolve:KAFKA_BROKER_USER)%' sasl.password: '%env(resolve:KAFKA_BROKER_PASS)%' topic: auto.offset.reset: 'beginning'

Подскажите, пожалуйста, где я ошибся?

Дополнительно:

Свежая Kafka может работать без Zookeeper - рекомендую попробовать.

Ответы:

В настройках надо было префикс user_ убрать....

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Елена Вебер Ответ

Для настройки Kafka ACL (Access Control Lists) и SASL (Simple Authentication and Security Layer) для нескольких пользователей, вам потребуется следовать определенным шагам. Ниже приведены инструкции по настройке Kafka для обеспечения безопасности и контроля доступа для различных пользователей:

1. Настройка Kafka ACL:
- Определите ACL для различных пользователей, указывая разрешения на чтение и запись для различных тем Kafka.
- Добавьте ACL в файл `server.properties` вашего Kafka брокера. Например:
```
super.users=User:admin
allow.everyone.if.no.acl.found=false
```
- Перезапустите Kafka брокер после внесения изменений.

2. Настройка SASL:
- Включите SASL в конфигурации Kafka, задав необходимые настройки для механизма аутентификации и протокола безопасности.
- Создайте файл конфигурации SASL, который будет содержать информацию о пользователях и их паролях. Например:
```
KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf"
```
- Создайте файл `kafka_server_jaas.conf` с указанием информации о пользователях и их ролях. Например:
```
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin";
};
```
- Перезапустите Kafka брокер после внесения изменений.

3. Проверка настроек:
- Проверьте правильность настройки ACL и SASL, попытавшись подключиться к Kafka с использованием учетных данных различных пользователей.
- Убедитесь, что каждый пользователь имеет доступ только к темам Kafka, для которых ему были предоставлены соответствующие разрешения.

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно