zookeeper添加kerberos认证
一个3节点的zk集群,3个节点的hostname分别是node01,node02,node03,zk版本3.5.4.java
- 建立3个节点的principle和keytab。
addprinc -randkey zookeeper/node01 addprinc -randkey zookeeper/node02 addprinc -randkey zookeeper/node03 ktadd -k zookeeper.node01.keytab zookeeper/node01 ktadd -k zookeeper.node02.keytab zookeeper/node02 ktadd -k zookeeper.node03.keytab zookeeper/node03
将zookeeper.nodeX.keytab文件分别放置在3个节点上,例如分别放置在zk的conf/目录下。 2. 编辑zoo.cfg。 在zoo.cfg文件下增长下面的配置:node
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider jaasLoginRenew=3600000
- 编写jaas.conf 分别在3个节点的jaas.conf添加zk server的entry。例如node01的:
Server { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/home/jungle/libs/zookeeper-3.5.4-beta/conf/zookeeper.node01.keytab" storeKey=true useTicketCache=false principal="zookeeper/node01"; };
- 在zk的conf/目录下添加一个java.env文件,配置jaas.conf地址,内容以下:
export JVMFLAGS="-Djava.security.auth.login.config=/home/jungle/keytab/jaas.conf"
kafka添加kerberos认证
一个3节点的kafka集群,3个节点分别是node01,node02,node03,kafka版本2.0.1.apache
- 建立3个节点的principle和keytab。
addprinc -randkey kafka/node01 addprinc -randkey kafka/node02 addprinc -randkey kafka/node03 ktadd -k kafka.node01.keytab kafka/node01 ktadd -k kafka.node02.keytab kafka/node02 ktadd -k kafka.node03.keytab kafka/node03
将kafka.nodeX.keytab文件分别放置在3个节点上,例如分别放置在kafka的config/目录下 2. 编辑server.properties并增长:bootstrap
listeners=SASL_PLAINTEXT://:9092 security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI sasl.enabled.mechanisms=GSSAPI sasl.kerberos.service.name=kafka
sasl.kerberos.service.name就是kafka/node01中的kafka zookeeper.connect=node01:2181,node02:2181,node03:2181要用hostname主机名 3. 编写jaas.conf 分别在3个节点的jaas.conf添加kafka server和zk client的entry。例如node02的:ide
KafkaServer { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/home/jungle/libs/kafka_2.11-2.0.1/config/kafka.node02.keytab" storeKey=true useTicketCache=false principal="kafka/node02"; }; Client { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/home/jungle/libs/kafka_2.11-2.0.1/config/kafka.node02.keytab" storeKey=true useTicketCache=false principal="kafka/node02"; };
- 在环境变量中添加
export KAFKA_OPTS=-Djava.security.krb5.conf=/etc/krb5.conf -Djava.security.auth.login.config=/home/jungle/keytab/jaas.conf
- 如何使用console-consumer和console-producer 在kafka/config目录下建立Client.Properties,并添加内容:
security.protocol=SASL_PLAINTEXT sasl.kerberos.service.name=kafka
使用脚本时用—consumer.config指定该配置,例如:ui
./kafka-console-consumer.sh --bootstrap-server node02:9092 --topic test --consumer.config ../config/Client.properties
在jaas.conf下添加code
KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true keyTab="/home/jungle/libs/kafka_2.11-2.0.1/config/kafka.node02.keytab" storeKey=true useTicketCache=false principal="kafka/node02"; };
console-producer同理。 6. 如何在ide中发送 在consumer properties中添加一下2个配置:server
security.protocol: SASL_PLAINTEXT sasl.kerberos.service.name: kafka
在启动程序的时候指定krb.conf和jaas,例如:-Djava.security.krb5.conf=E:\krb5.conf -Djava.security.auth.login.config=E:\jaas.confip