前文:
公司使用Ambari2.7平臺,需要自己搭測試環境,所以自己研究後,分享給大家。
目錄
1、配置客戶端JAAS的Kerberos權限配置文件(指定keytab和principal)
2、生產數據 (指定協議和安全機制的properties文件)
3、消費數據(指定協議和安全機制的properties文件)
2、Windows上配置了java也可以下載MIT Kerberos後使用kinit進行keytab認證
一、Ambari平臺上修改Kafka配置
1、修改協議
listeners = SASL_PLAINTEXT://hadoop122:9092
security.inter.broker.protocol = SASL_PLAINTEXT
2、修改機制
sasl.enabled.mechanisms = GSSAPI
sasl.mechanism.inter.broker.protocol = GSSAPI
二、創建Kerberos授權用戶
0、登錄管理者
kadmin.local
1、添加用戶權限
add_principal kafkauser
2、生成keytab文件並拷貝到各個主機
xst -norandkey -k /etc/security/keytabs/clientkafka.service.keytab [email protected]
scp /etc/security/keytabs/clientkafka.service.keytab root@hadoop123:/etc/security/keytabs/clientkafka.service.keytab
scp /etc/security/keytabs/clientkafka.service.keytab root@hadoop124:/etc/security/keytabs/clientkafka.service.keytab
三、配置認證
0、Kerberos客戶端認證
kinit -kt /etc/security/keytabs/clientkafka.service.keytab [email protected]
1、配置客戶端JAAS的Kerberos權限配置文件(指定keytab和principal)
vim kafkauser_client_jaas.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
client=true
serviceName="kafka"
keyTab="/etc/security/keytabs/clientkafka.service.keytab"
principal="kafkauser";
};
注:由於Ambari已把服務器JAAS配置好,使用其他平臺請參考服務器默認配好的示例
KafkaServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="{{kafka_keytab_path}}"
storeKey=true
useTicketCache=false
serviceName="{{kafka_bare_jaas_principal}}"
principal="{{kafka_jaas_principal}}";
};
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
renewTicket=true
serviceName="{{kafka_bare_jaas_principal}}";
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="{{kafka_keytab_path}}"
storeKey=true
useTicketCache=false
serviceName="zookeeper"
principal="{{kafka_jaas_principal}}";
};
2、配置服務器指定協議和安全機制配置文件
vim kafkauser.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
注:對應一開始設置的協議和安全機制
四、Kafka主題配置
1、創建主題
bin\kafka-topics.sh --create --zookeeper hadoop122:2181 --partitions 1 --replication-factor 1 --topic kerber_test
2、用戶授權
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=hadoop122:2181,hadoop123:2181,hadoop124:2181 --add --allow-principal User:kafkauser --operation All --topic kerber_test
3、生產者ACL授權
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=hadoop122:2181,hadoop123:2181,hadoop124:2181 --allow-principal User:kafkauser --producer --topic=* --add
4、消費者ACL授權
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=hadoop122:2181,hadoop123:2181,hadoop124:2181 --allow-principal User:kafkauser --consumer --topic=* --group=* --add
五、Kafka數據生產與消費
1、通知JVM配置JAAS文件和Krb文件,臨時有效
export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/3.1.0.0-78/kafka/bin/kafkauser_client_jaas.conf"
export KRB_OPTS="-Djava.security.krb5.conf = /etc/kafka/krb5.conf"
2、生產數據 (指定協議和安全機制的properties文件)
bin/kafka-console-producer.sh --broker-list hadoop122:9092,hadoop123:9092,hadoop124:9092 --topic kerber_test --producer.config /usr/hdp/3.1.0.0-78/kafka/bin/kafkauser.properties
3、消費數據(指定協議和安全機制的properties文件)
bin/kafka-console-consumer.sh --bootstrap-server hadoop122:9092,hadoop123:9092,hadoop124:9092 --topic kerber_test --consumer.config /usr/hdp/3.1.0.0-78/kafka/bin/kafkauser.properties
六、代碼案例
//Kerberos權限認證,指定JAAS權限配置文件
System.setProperty("java.security.auth.login.config", "./kafkauser_jaas.conf");
//Kerberos客戶端環境信息,指定krb5配置文件
System.setProperty("java.security.krb5.conf", "./krb5.conf");
Properties props = new Properties();
props.put("bootstrap.servers", "hadoop122:9092");//kafka集羣,broker-list
props.put("acks", "all");
props.put("retries", 1);//重試次數
props.put("batch.size", 16384);//批次大小
props.put("linger.ms", 1);//等待時間
props.put("buffer.memory", 33554432);//RecordAccumulator緩衝區大小
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
//服務器協議和安全機制的properties配置文件
props.put("sasl.mechanism", "GSSAPI ");
props.put("security.protocol", "SASL_PLAINTEXT");
props.put("sasl.kerberos.service.name", "kafka");
七、Linux和Window區別
1、Krb文件
Linux:/etc/krb5.conf
Windows:C:\ProgramData\MIT\Kerberos5\krb5.ini
2、Windows上配置了java也可以下載MIT Kerberos後使用kinit進行keytab認證