Конфигурация Spring Boot + Kafka + Kerberos - PullRequest
0 голосов
/ 20 февраля 2019

Я использую Spring Boot 1.5.6.RELEASE для подключения к Kafka 0.11 с использованием аутентификации Kerberos.Вот зависимости, которые я использую для Kafka:

        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-kafka</artifactId>
            <version>3.0.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>2.0.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>

Я должен отправлять сообщения на сервер Kafka, который не находится под нашим управлением, и мне дали имя пользователя Kafka, файл keytab и krb5.conf файл.

Это свойства, используемые для тестирования без Kerberos:

spring:
  kafka:
    bootstrap-servers: "10.10.20.185:9092"
    producer:
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer

Работает нормально.

Как внедрить Kerberos в конфигурацию моего приложения?Поскольку я новичок в Kafka и Kerberos, любая помощь будет оценена.

1 Ответ

0 голосов
/ 20 февраля 2019

См. документацию kafka «Аутентификация с использованием SASL / Kerberos» .

Чтобы настроить аутентификацию SASL на клиентах: Клиенты (производители, потребители, подключают работников и т. Д.) Будутпроходите проверку подлинности в кластере со своим собственным участником (обычно с тем же именем, что и пользователь, запускающий клиент), поэтому получите или создайте эти участники по мере необходимости.Затем настройте свойство конфигурации JAAS для каждого клиента.Разные клиенты в JVM могут работать как разные пользователи, указывая разные принципалы.Свойство sasl.jaas.config в produmer.properties или consumer.properties описывает, как такие клиенты, как производитель и потребитель, могут подключаться к брокеру Kafka.Ниже приведен пример конфигурации для клиента, использующего таблицу ключей (рекомендуется для длительных процессов):

sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
    useKeyTab=true \
    storeKey=true  \
    keyTab="/etc/security/keytabs/kafka_client.keytab" \
    principal="kafka-client-1@EXAMPLE.COM";

Для служебных программ командной строки, таких как kafka-console-consumer или kafka-Консоль-производитель, kinit может использоваться вместе с «useTicketCache = true», как в:

sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
    useTicketCache=true;

Конфигурация JAAS для клиентов может альтернативно указываться как параметр JVM, аналогично описанным брокерам, как описаноВот.Клиенты используют раздел входа в систему с именем KafkaClient.Этот параметр позволяет использовать только одного пользователя для всех клиентских подключений из JVM.

Убедитесь, что ключевые таблицы, настроенные в конфигурации JAAS, доступны для чтения пользователю операционной системы, который запускает клиент kafka.При желании передайте местоположения файла krb5 в качестве параметров JVM для каждой клиентской JVM (см. здесь для получения более подробной информации):

-Djava.security.krb5.conf=/etc/kafka/krb5.conf

Настройте следующие свойства в generator.properties или customer.свойства:

security.protocol=SASL_PLAINTEXT (or SASL_SSL)
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
...