org-little-kafka
Библиотека содержит два модуля:
- модуль поддержки SASL PLAIN аутентификации;
- модуль поддержки хранилищ сертификатов для SSL.
Первый обеспечивает устранение недостатков использования стандартного механизма sasl plaintext
для внешних взаимодействий. В стандартном модуле аутентификации невозможно изменять аутентификационные параметры без перезагрузки брокера, а также пароли пользователей хранятся на диске в легко читаемом виде.
Дополнительно модуль позволяет:
- изменять аутентификационные параметры без перезагрузки брокера
- использовать пароли пользователей в зашифрованном виде
Стандартный способ включения SASL аутентификации является задание при запуске бокера параметра KAFKA_OPTS=-Djava.security.auth.login.config=/kafka_xxxx/config/kafka-jaas.conf
, где kafka-jaas.conf
– стандартный файл конфигурации JAAS
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin_user"
password="admin_passwd"
user_user1=" passwd_user1";
};
И добавления в файл конфигурации брокера
listeners=SASL_PLAINTEXT://:9093
security.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
advertised.listeners=SASL_PLAINTEXT://:9093
При использовании библиотеки дополнительно к стандартной процедуре нужно:
- Поместить jar библиотеки в каталог
/kafka_xxxx/Libs
. -
В конфигурационном файле брокера KAFKA внести строку.
listener.name.sasl_plaintext.plain.sasl.server.callback.handler.class=org.little.broker.auth.authLocal1
sasl_plaintext - это имя листенера создаваемого записью в конфиге
listeners=SASL_PLAINTEXT://:хххх
и плюс при использовании KRAFT необходимо добавить записьlistener.name.controller.plain.sasl.server.callback.handler.class=org.little.broker.auth.authLocal1
controller - это имя листенера создаваемого записью в конфиге
listeners=CONTROLLER://:yyyy
Данная строка заменит стандартный модуль аутентификации на классorg.little.broker.auth.authLocal1
. или можно использовать другой парсерlistener.name.sasl_plaintext.plain.sasl.server.callback.handler.class=org.little.broker.auth.authLocal2 listener.name.controller.plain.sasl.server.callback.handler.class=org.little.broker.auth.authLocal2
Данная строка заменяет стандартный модуль аутентификации на класс
org.little.broker.auth.authLocal2
. КлассыauthLocal1
иauthLocal2
различаются способом парсинга файла конфигурации JAAS.При использовании KRAFT в файл описания в конфигурационном файле JASS, который задается определением
KAFKA_OPTS=-Djava.security.auth.login.config=/путь к файлу/kafka-jaas.conf)
необходимо в файле конфигурации JAAS заменить класс
org.apache.kafka.common.security.plain.PlainLoginModule
на классorg.little.broker.auth.PlainLoginModule
:KafkaServer { org.little.broker.auth.PlainLoginModule required username="admin_user" password="admin_passwd" user_user1="passwd_user1"; };
Библиотека позволяет
-
изменять файл конфигурации JAAS без перезагрузки брокера. Изменения применяются с периодом 1 минуту. Период можно изменить задав параметр в файле конфигурации брокера KAFKA
plain.sasl.server.callback.handler.timeout=60000
-
использовать файл конфигурации JAAS вида:
KafkaServer { org.little.broker.auth.PlainLoginModule required username="admin" password="{mds5}bdjbhqddnqMvUn2MGmV1YQ==" user_user1="{mds5}lDXazB27hDSFsUgOMs8MoA=="; };
-
позволяет для внесения изменений в распределенные системы сохранять в течении 10 минут значение старого пароля (старый файл конфигурации JAAS). Время можно изменить задав в файле конфигурации брокера KAFKA
plain.sasl.server.callback.handler.reset=600000
Преобразование паролей пользователей в не читаемый вид выполняется утилитой passwd_util.sh
(passwd_util.bat
) Пример запуска:
passwd_util.sh 123Passwd
original: 123Passwd
mask identifier: {mds5}d0llTpoUTaoJ+qUScwLm/g==
или
passwd_util.sh
enter key >>>
mask identifier: {mds5}d0llTpoUTaoJ+qUScwLm/g==
Второй модуль позволяет исправить недостаток при использовании стандартного SSL аутентификации Стандартные настройки конфигурации хранилища сертификатов
ssl.truststore.location=/kafka_xxxx/certs/kafka_traststore.jks
ssl.truststore.password=user_passwd_1
ssl.keystore.location=/kafka_ xxxx /certs/kafka_keystore.jks
ssl.keystore.password= user_passwd_2
ssl.key.password= user_passwd_3
содержит легко читаемые пароли для хранилища сертификатов
При использовании библиотеки дополнительно к стандартной процедуре нужно
- Поместить jar библиотеки в каталог
/kafka_xxxx/Libs
. - В конфигурационном файле брокера KAFKA внести строку
ssl.engine.factory.class= org.little.broker.ssl.NewSslEngineFactory
для замены стандартной фабрики SSL соединений.
Это позволит использовать в конфигурационном файле брокера KAFKA как стандартные строки приведенные выше, так и использовать хранение паролей хранилищ сертификатов в не читаемом виде
ssl.truststore.location=/kafka_xxxx/certs/kafka_traststore.jks
ssl.truststore.password={mds5}lDXazB27hDS5G1h898Xzug==
ssl.keystore.location=/kafka_ xxxx /certs/kafka_keystore.jks
ssl.keystore.password={mds5}lDXazB27hDRgeKokdfriSw==
ssl.key.password={mds5}lDXazB27hDRSqNyP9zkYTg==
Преобразование паролей пользователей в не читаемый вид выполняется утилитой passwd_util.sh
(passwd_util.bat
).