Как создать локальный экземпляр Kafka с настройкой авторизации пользователей через имя пользователя и пароль, используя протокол SASL_SSL и механизм SCRAM-SHA-512?

Добрый день! <br/> У меня уже второй день не получается реализовать задуманное. <br/> В моем файле compose.yaml прописаны сервисы для скрапинга (MySQL, Scrapy, RabbitMQ), а клиент хочет получать данные через Kafka на своей стороне. Моя цель заключается в том, чтобы расширить файл compose.yaml, добавив туда сервис Kafka с подходящими критериями авторизации, чтобы протестировать отправку сообщений из своей базы данных в Kafka. <br/> На данном этапе я пытаюсь создать модель этого сервера. <br/> <pre><code>kafka:
      image: bitnami/kafka:latest
      environment:
        - KAFKA_CFG_NODE_ID=0
        - KAFKA_CFG_PROCESS_ROLES=controller,broker
        - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
        - KAFKA_CFG_LISTENERS=SASL_SSL://:9092,CONTROLLER://:9093
        - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
        - KAFKA_CFG_ADVERTISED_LISTENERS=SASL_SSL://localhost:9092
        - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
        - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_SSL
        - KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL=SCRAM-SHA-512
        - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=SCRAM-SHA-512
        - KAFKA_CFG_SASL_SCRAM_USERS=user:my_pass
        - KAFKA_CFG_SASL_MECHANISM=SCRAM-SHA-512
        - KAFKA_CFG_SASL_ENABLED_MECHANISMS=SCRAM-SHA-512
        - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL=SASL_SSL
        - KAFKA_TLS_TYPE=JKS
        - KAFKA_ENABLE_KRAFT=yes
        - KAFKA_CLIENT_USERS=user
        - KAFKA_CLIENT_PASSWORDS=my_pass
        - KAFKA_CONTROLLER_USER=user
        - KAFKA_CONTROLLER_PASSWORD=my_pass
        - KAFKA_INTER_BROKER_USER=user
        - KAFKA_INTER_BROKER_PASSWORD=my_pass
        - KAFKA_CERTIFICATE_PASSWORD=my_pa
  • 26 апреля 2025 г. 5:55
Ответы на вопрос 1
Чтобы создать локальный экземпляр Kafka с настройкой авторизации через имя пользователя и пароль с использованием протокола `SASL_SSL` и механизма `SCRAM-SHA-512`, необходимо внести некоторые изменения в ваш файл `compose.yaml`. Вот пример корректной конфигурации:

```yaml
version: '3.7'

services:
  kafka:
    image: bitnami/kafka:latest
    environment:
      - KAFKA_CFG_NODE_ID=0
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
      - KAFKA_CFG_LISTENERS=SASL_SSL://:9092,CONTROLLER://:9093
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
      - KAFKA_CFG_ADVERTISED_LISTENERS=SASL_SSL://localhost:9092
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_SSL
      - KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL=SCRAM-SHA-512
      - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=SCRAM-SHA-512
      - KAFKA_CFG_SASL_ENABLED_MECHANISMS=SCRAM-SHA-512
      - KAFKA_CFG_SASL_SCRAM_USERS=user:my_pass
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL=SASL_SSL
      - KAFKA_ENABLE_KRAFT=yes  # Убедитесь, что используете KRAFT, если не используете ZooKeeper
      - KAFKA_CLIENT_USERS=user
      - KAFKA_CLIENT_PASSWORDS=my_pass
      - KAFKA_CONTROLLER_USER=user
      - KAFKA_CONTROLLER_PASSWORD=my_pass
      - KAFKA_INTER_BROKER_USER=user
      - KAFKA_INTER_BROKER_PASSWORD=my_pass
    ports:
      - "9092:9092"
      - "9093:9093"  # Хотя этот порт не обязательно открывать
    volumes:
      - kafka_data:/bitnami/kafka

volumes:
  kafka_data:
```

### Основные моменты, которые стоит учитывать:
1. **SCRAM Credentials**: Линия `KAFKA_CFG_SASL_SCRAM_USERS=user:my_pass` задает учетные данные для SCRAM, и они должны совпадать с другими переменными среды `KAFKA_CLIENT_USERS` и `KAFKA_CLIENT_PASSWORDS`.

2. **Ports**: Откройте порты, которые вам нужны, включая 9092 для клиента и 9093 для контроллера.

3. **TLS**: Убедитесь, что у вас есть правильные сертификаты, если используете `SASL_SSL`. Здесь требуется настроить TLS, если это необходимо (например, если вы хотите использовать SSL-сертификаты для дополнительной безопасности).

4. **KRAFT**: Параметр `KAFKA_ENABLE_KRAFT=yes` указывает на использование режима KRaft, который является нововведением для Kafka. Убедитесь, что вы используете версию Kafka, которая поддерживает KRaft.

### Запуск
Поднимите сервисы с помощью команды:
```bash
docker-compose up -d
```

После этого вы должны иметь работающий экземпляр Kafka, к которому можно подключаться через SASL с использованием SCRAM-SHA-512. Не забудьте протестировать соединение с помощью клиента Kafka, указав правильные учётные данные для аутентификации.
Похожие вопросы