基于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 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认证

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值