Kafka安全认证:SASL/GSSAPI (kerberos)

本文详细介绍了如何在CentOS7环境下,将Kafka (2.12-2.3.0) 和 Zookeeper (3.6.0) 集成Kerberos进行SASL/GSSAPI安全认证。内容包括创建Kerberos主体及keytab,配置jaas.conf、server.properties和zookeeper.properties,启动脚本以及客户端(producer和consumer)的使用。参考了多个来源以确保操作的准确性和安全性。
摘要由CSDN通过智能技术生成

1. 环境

kafka版本:2.12-2.3.0

zookeeper版本:3.6.0

操作系统:CentOS7

2. 创建主体并生成keytab

在kerberos中,用户和服务是平等的关系,都是以principal的形式存在

$ kadmin.local
# kafka broker,zookeeper,kafka client主体
# 其中stream.dt.local表示kafka broker所在主机的FQDN,Fully Qualified Domain Name的缩写, 含义是完整的域名
$ kadmin.local:  addprinc kafka/stream.dt.local@EXAMPLE.COM
$ kadmin.local:  addprinc zookeeper/stream.dt.local@EXAMPLE.COM
$ kadmin.local:  addprinc clients/stream.dt.local@EXAMPLE.COM

# 生成主体对应的keytab文件
$ kadmin.local:  xst -k /opt/third/kafka/kerberos/kafka_server.keytab
$ kadmin.local:  xst -k /opt/third/zookeeper/kerberos/kafka_zookeeper.keytab
$ kadmin.local:  xst -k /opt/third/kafka/kerberos/kafka_client.keytab

# 给keytab赋予可读权限
$ chmod -R 777 /opt/third/kafka/kerberos/kafka_server.keytab
$ chmod -R 777 /opt/third/zookeeper/kerberos/kafka_zookeeper.keytab
$ chmod -R 777 /opt/third/kafka/kerberos/kafka_client.keytab

设置FQDN的方式

$ cat /etc/hostname
demo-db
$ vim /etc/hosts
192.168.90.88  stream.dt.local demo-db
# 192.168.90.88是本机ip,stream.dt.local是要设置的FQDN,demo-db是主机名

3. 配置jaas.conf

/opt/third/kafka/kerberos/kafka_server_jaas.conf


                
在Java中实现Kafka SASL/GSSAPI principal,可以使用Kafka提供的Java客户端库来实现。以下是实现的步骤: 1. 在Java代码中配置Kafka客户端的SASL认证: ```java Properties props = new Properties(); props.put("bootstrap.servers", "kafka-broker1:9092,kafka-broker2:9092"); props.put("security.protocol", "SASL_PLAINTEXT"); props.put("sasl.kerberos.service.name", "kafka"); props.put("sasl.mechanism", "GSSAPI"); props.put("sasl.jaas.config", "com.sun.security.auth.module.Krb5LoginModule required " + "useKeyTab=true " + "storeKey=true " + "keyTab=\"/path/to/kafka.keytab\" " + "principal=\"kafka/kafka-broker1@EXAMPLE.COM\";"); ``` 其中,`bootstrap.servers`指定Kafka集群中的broker列表,`security.protocol`指定SASL认证协议,`sasl.kerberos.service.name`指定Kafka服务的Kerberos服务名称,`sasl.mechanism`指定SASL机制为GSSAPI,`sasl.jaas.config`指定使用Kerberos principal和keytab文件进行身份验证。 2. 创建Kafka生产者或消费者对象: ```java KafkaProducer<String, String> producer = new KafkaProducer<>(props); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); ``` 3. 使用Kafka客户端进行消息生产或消费: ```java ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key", "value"); producer.send(record); consumer.subscribe(Arrays.asList("my-topic")); ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(1)); for (ConsumerRecord<String, String> record : records) { System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()); } ``` 通过以上步骤,您可以在Java中实现Kafka SASL/GSSAPI principal,并使用Kafka客户端进行消息生产和消费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值