基於HDP3.1的Kafka對Kerberos的SASL認證

前文:

           公司使用Ambari2.7平臺,需要自己搭測試環境,所以自己研究後,分享給大家。

目錄

一、Ambari平臺上修改Kafka配置

1、修改協議

2、修改機制

二、創建Kerberos授權用戶

0、登錄管理者

1、添加用戶權限

2、生成keytab文件並拷貝到各個主機

三、配置認證

0、Kerberos客戶端認證

1、配置客戶端JAAS的Kerberos權限配置文件(指定keytab和principal)

2、配置服務器指定協議和安全機制配置文件

四、Kafka主題配置

1、創建主題

2、用戶授權

3、生產者ACL授權                                                      

 4、消費者ACL授權

五、Kafka數據生產與消費

1、通知JVM配置JAAS文件和Krb文件,臨時有效

2、生產數據 (指定協議和安全機制的properties文件)

3、消費數據(指定協議和安全機制的properties文件)

六、代碼案例

七、Linux和Window區別

1、Krb文件

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認證

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章