Использование SASL PLAINTEXT в Kafka

ПРИМЕЧАНИЕ
Включение аутентификации SASL PLAINTEXT осуществляется в соответствии со статьей SASL PLAINTEXT.

Проверка включения аутентификации SASL PLAINTEXT

  1. Проверьте конфигурацию безопасности и аутентификации брокеров Kafka.

    На каждом хосте с брокером Kafka введите команду:

    $ vim /etc/kafka/conf/server.properties

    Убедитесь, что в файле server.properties для каждого брокера Kafka строки, определяющие протокол безопасности, изменены на SASL_PLAINTEXT; строки, определяющие механизм аутентификации — на PLAIN, а также сгенерированы пароли для всех сервисов кластера ADS:

    security.inter.broker.protocol=SASL_PLAINTEXT
    
    
    sasl.mechanism.inter.broker.protocol=PLAIN
    sasl.enabled.mechanisms=PLAIN
    
    listener.name.sasl_plaintext.plain.sasl.jaas.config=org.apache.kafka.common$
      username=kafka \
      password="kafka-password" \
      user_kafka="kafka-password" \
      user_ksql-server="ksql-server-password" \
      user_kafka-rest="kafka-rest-password" \
      user_schema-registry="schema-registry-password" \
      user_kafka-connect="kafka-connect-password";
  2. Проверьте, что после установки SASL PLAINTEXT в настройках сервиса Kafka изменился параметр listeners с PLAINTEXT://:9092 на SASL_PLAINTEXT://:9092.

    Настройки сервиса Kafka
    Настройки сервиса Kafka

Управление пользователями с аутентификацией SASL PLAINTEXT в Kafka

Создание пользователя

Для того чтобы создать пользователя:

  1. На вкладке конфигурирования кластера в дереве конфигурационных настроек раскройте узел SASL_PLAINTEXT Authentication, далее узел SASL_PLAINTEXT Auth username:password map и нажмите + Add property для создания нового пользователя.

    Создание нового пользователя
    Создание нового пользователя
  2. В открывшемся окне введите имя пользователя (field name), пароль (secret), подтвердите пароль и нажмите Apply.

    В имени пользователя допускается использовать строчные буквы, цифры, точку, подчеркивание и/или дефис.

    Имя и пароль для нового пользователя
    Имя и пароль для нового пользователя
  3. После ввода данных сохраните конфигурацию, кликнув Save.

  4. Перезагрузите сервис Kafka. Для этого примените действие Restart, нажав на иконку actions default dark actions default light в столбце Actions.

  5. Убедитесь, что в файле server.properties для каждого брокера Kafka появилась запись о новом пользователе:

    listener.name.sasl_plaintext.plain.sasl.jaas.config=org.apache.kafka.common$
      username=kafka \
      password="kafka-password" \
      user_kafka="kafka-password" \
      user_ksql-server="ksql-server-password" \
      user_kafka-rest="kafka-rest-password" \
      user_schema-registry="schema-registry-password" \
      user_kafka-connect="kafka-connect-password" \
      user_new_user="password";

    где:

    • new_user — имя, введенное при создании пользователя;

    • password — заданный пароль для пользователя.

Удаление и изменение данных пользователя

Для того чтобы удалить пользователя, на вкладке конфигурирования кластера в дереве конфигурационных настроек раскройте узел SASL_PLAINTEXT Authentication, далее узел SASL_PLAINTEXT Auth username:password map и нажмите delete напротив пользователя, которого необходимо удалить.

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

После удаления пользователя или изменения данных:

  1. Сохраните конфигурацию, кликнув Save.

  2. Перезагрузите сервис Kafka. Для этого примените действие Restart, нажав на иконку actions default dark actions default light в столбце Actions.

Аутентификация пользователя в среде Kafka

Для аутентификации каждого пользователя, в том числе автоматически созданного системой пользователя kafka, требуется создать специальный файл конфигурации client.properties. Для этого выполните шаги:

  1. Откройте файл-заглушку, выполнив команду:

    $ sudo vim /etc/kafka/conf/client.properties
  2. Внесите изменения в файл, раскомментировав строку с параметром sasl.jaas.config и внеся данные о пользователе и пароле пользователя, как указано ниже:

    security.protocol=SASL_PLAINTEXT
    sasl.mechanism=PLAIN
    # Uncomment and set necessary username/password
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
     username="new_user" \
     password="password";

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

Работа с .sh файлами (скриптами) с участием созданного пользователя

  1. Создайте топик, указав при помощи опции --command-config путь к файлу конфигурации пользователя client.properties, описанному выше:

    $ /usr/lib/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --command-config /etc/kafka/conf/client.properties

    В случае успешного создания топика выводится сообщение:

    Created topic test-topic.
  2. Запишите сообщения в топик, указав при помощи опции --producer.config путь к файлу конфигурации пользователя client.properties, описанному выше:

    $ /usr/lib/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092 --producer.config /etc/kafka/conf/client.properties
  3. Считайте сообщения из топика, указав при помощи опции --consumer.config путь к файлу конфигурации пользователя client.properties, описанному выше:

    $/usr/lib/kafka/bin/kafka-console-consumer.sh --topic test-topic --from-beginning  --bootstrap-server sov-ads-test-4.ru-central1.internal:9092 --consumer.config /etc/kafka/conf/client.properties

    Убедитесь в корректности считанных сообщений.

Попытка запуска любого скрипта от имени пользователя, не внесенного в файл server.properties, вызовет ошибку аутентификации, например:

[2022-12-01 13:42:25,572] ERROR [AdminClient clientId=adminclient-1] Connection to node -1 (sov-ads-test-4.ru-central1.internal/10.92.16.223:9092) failed authentication due to: Authentication failed: Invalid username or password (org.apache.kafka.clients.NetworkClient)
[2022-12-01 13:42:25,574] WARN [AdminClient clientId=adminclient-1] Metadata update failed due to authentication error (org.apache.kafka.clients.admin.internals.AdminMetadataManager)
org.apache.kafka.common.errors.SaslAuthenticationException: Authentication failed: Invalid username or password
Error while executing topic command : Authentication failed: Invalid username or password
[2022-12-01 13:42:25,579] ERROR org.apache.kafka.common.errors.SaslAuthenticationException: Authentication failed: Invalid username or password
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней