Spring Boot + Kafka + Kerberos配置

时间:2019-02-20 17:54:48

标签: spring-boot apache-kafka kerberos spring-kafka

我正在使用 Spring Boot 1.5.6.RELEASE 通过Kerberos身份验证连接到 Kafka 0.11 。这些是我用于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 :(得分:0)

请参见the kafka documentation "Authentication using SASL/Kerberos"

  

要在客户端上配置SASL身份验证,请执行以下操作:   客户端(生产者,消费者,连接工作者等)将使用其自己的主体(通常与运行客户端的用户名称相同)对集群进行身份验证,因此需要获取或创建这些主体。然后为每个客户端配置JAAS配置属性。通过指定不同的主体,JVM中的不同客户端可以作为不同用户运行。 producer.properties或consumer.properties中的sasl.jaas.config属性描述了生产者和消费者之类的客户端如何连接到Kafka Broker。以下是使用密钥表的客户端的示例配置(建议长时间运行的进程):

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-console-producer之类的命令行实用程序,可以将kinit与“ useTicketCache = true”一起使用,如下所示:

sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
    useTicketCache=true;
  可以将客户端的

JAAS配置指定为类似于此处所述的代理的JVM参数。客户端使用名为KafkaClient的登录部分。此选项仅允许一个用户通过JVM进行所有客户端连接。

     

确保启动kafka客户端的操作系统用户可以读取JAAS配置中配置的密钥表。   (可选)将krb5文件位置作为JVM参数传递给每个客户端JVM(有关更多详细信息,请参见here):

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

在producer.properties或Consumer.properties中配置以下属性:

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