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