kafka如何开启kerberos认证

参考:        https://www.cnblogs.com/wuyongyin/p/15624452.html kerberos基本原理     

     https://www.cnblogs.com/wuyongyin/p/15634397.html kerberos安装及使用     

     https://www.jianshu.com/p/c7d3051ca075     kafka开启kerberos认证

 

修改主机配置,新增 centos-01,注意:以下操作的前提是,kerberos服务端和客户端都已成功安装,  可参考上述引用

1、创建keytab

kadmin.local:  add_principal -randkey kafka-server/centos-01@ABC.COM

kadmin.local:  add_principal -randkey kafka-client@ABC.COM

kadmin.local:  xst -k /root/kafka-server.keytab kafka-server/centos-01@ABC.COM 生成服务端的密码本

kadmin.local:  xst -k /root/kafka-client.keytab kafka-client@ABC.COM  生成客户端的密码本

  kdc数据库中添加的server principal 中使用了域名centos-01, 那么kafka服务端配置监听地址也要使用centos-1, 客户端服务器也要加上centos-01的域名解析,在/etc/hosts中加入 kafka服务器ip   centos-1

  客户端需要安装krb5客户端krb5-workstation, 然后可以测试下客户端的认证: kinit -t kafka-client.keytab -k kafka-client@ABC.COM ,执行后,如果认证成功,klist可以看到缓存的认证信息

2、服务端配置

a) 创建目录kafka/config/kerberos拷贝etc/krb5.confkeytab文件到此文件夹,

            注意:注释renew_lifetime = 7d行,否则后续会报错

b) 复制kafka/config/server.properties文件到kafka/config/server-sasl.properties,新增

listeners=SASL_PLAINTEXT://centos-01:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka-server

c) 新建文件kafka/config/kerberos/kafka-server-jaas.conf,内容如下

KafkaServer {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="/root/kafka/config/kerberos/kafka-server.keytab"
   storeKey=true
   useTicketCache=false
   principal="kafka-server/centos-01@ABC.COM";
};

 

d) 复制/kafka/bin/kafka-server-start.sh/kafka/bin/kafka-server-start-sasl.sh, 最后exec命令之前加上环境变量声明

 export KAFKA_OPTS="-Djava.security.krb5.conf=/root/kafka/config/kerberos/krb5.conf -Djava.security.auth.login.config=/root/kafka/config/kerberos/kafka-server-jaas.conf"

 

3、客户端配置

a) 创建目录kafka/config/kerberos,拷贝etc/krb5.confkeytab文件到此文件夹

  注释renew_lifetime = 7d行,否则后续会报错

b) 新建文件kafka/config/kerberos/kafka-client-jaas.conf,内容如下

KafkaClient {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="/root/kafka/config/kerberos/kafka-client.keytab"
   storeKey=true
   useTicketCache=false
   principal="kafka-client@ABC.COM";
};

c) 新建文件/kafka/config/client-sasl.properties,内容如下

security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka-server

d) 复制 /kafka/bin/kafka-console-producer.sh /kafka/bin/kafka-console-producer-sasl.sh, 并在最后一行exec之前添加,同理,消费者也一样

export KAFKA_OPTS="-Djava.security.krb5.conf=/root/kafka/config/kerberos/krb5.conf -Djava.security.auth.login.config=/root/kafka/config/kerberos/kafka-client-jaas.conf"

4、启动测试

服务端启动kafka

./bin/kafka-server-start-sasl.sh -daemon config/server-sasl.properties

如果启动失败,报错

ERROR [KafkaServer id=0] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)

at jdk.security.auth/com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:754)

注意检查krb5kdc服务有没有开启,没有开启,执行systemctrl start krb5kdc

客户端启动生产者连接

 ./kafka-console-producer-sasl.sh --topic test-topics --bootstrap-server 127.0.0.1:9092 --producer.config /root/kafka/config/client-sasl.properties

 客户端启动消费者连接

./kafka-console-consumer-sasl.sh --bootstrap-server 127.0.0.1:9092 --topic test-topics --consumer.config /root/kafka/config/client-sasl.properties

 

 

 

posted @ 2023-02-12 23:20  ho966  阅读(391)  评论(0编辑  收藏  举报