前文:
公司使用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 kafkauser@HADOOP.COM
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 kafkauser@HADOOP.COM
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认证