Как правильно настроить Kafka acl и sasl для нескольких пользователей?
Всем привет.
Пошёл 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_ убрать....
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для настройки 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 кластеру.