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.conf和keytab文件到此文件夹,
注意:注释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.conf和keytab文件到此文件夹
注释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