kerberos+kafka(2.13)认证(单节点ubuntu)

一:搭建kerberos。

1. 运行安装命令

复制代码
apt-get install krb5-admin-server krb5-kdc krb5-user krb5-config

2. 检查服务是否启动。

复制代码
systemctl status krb5-admin-server
systemctl status krb5-kdc

systemctl start krb5-admin-server
systemctl startkrb5-kdc

3. 修改配置

vi /etc/krb5.conf

查看服务器名称

复制代码
default_realm = CECGW.CN
# The following krb5.conf variables are only for MIT Kerberos.
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
 [realms]
          CECGW.CN = {
               kdc = ubuntu
               admin_server = ubuntu
       }

4. 创建数据库和principal,使用kdb5_util创建数据库,存放principal相关的信息。

创建数据库

复制代码
cd /etc/krb5kdc
kdb5_util create -r CECGW.CN -s
输入俩次数据库密码

创建用户principal

复制代码
kadmin.local
add_principal oneandonly/kerberos@CECGW.CN
输入俩次密码 oneandonly/kerberos@CECGW.CN

导出文件

复制代码
xst -k oneandonly.keytab -norandkey oneandonly/kerberos@CECGW.CN

验证登录,使用密钥登录.

复制代码
root@ubuntu:/opt/kafka/kafka_2.13-3.6.1# kinit -kt oneandonly.keytab oneandonly/kerberos
root@ubuntu:/opt/kafka/kafka_2.13-3.6.1# klist

退出登录

复制代码
root@ubuntu:/opt/kafka/kafka_2.13-3.6.1# kdestroy
root@ubuntu:/opt/kafka/kafka_2.13-3.6.1# klist

二:配置kafka认证

1. 注册用户principal,导出密钥文件。

复制代码
kadmin.local

kadmin.local:  add_principal -randkey kafka-server/ubuntu@CECGW.CN
kadmin.local:  add_principal -randkey kafka-client@CECGW.CN
kadmin.local:  xst -k /root/kafka-server.keytab kafka-server/ubuntu@CECGW.CN
kadmin.local:  xst -k /root/kafka-client.keytab kafka-client@CECGW.CN

2. Kerberos 相关配置

2.1.拷贝 krb5.conf 及 keytab 文件到所有安装 Kafka 的机器,把文件都放到 Kafka 的 config/kerberos 目录下(kerberos 目录需新建)。

3. kafka服务端配置。

3.1 复制 config/server.properties(复制动作能帮助我们在 认证/非认证 模式自由切换)重命名为 config/server-sasl.properties,增加如下配置:

复制代码
listeners=SASL_PLAINTEXT://ubuntu:9092
advertised.listeners=SASL_PLAINTEXT://ubuntu:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=GSSAPI
sasl.enabled.mechanisms=GSSAPI
sasl.kerberos.service.name=kafka-server

3.2新建 kafka-server-jaas.conf 文件,该文件也放到 Kafka 的 config/kerberos 目录下:

复制代码
KafkaServer {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="/opt/kafka/kafka_2.13-3.6.1/config/kerberos/kafka-server.keytab"
   storeKey=true
   useTicketCache=false
   principal="kafka-server/ubuntu@CECGW.CN";
};

3.3 修改启动命令。

复制 bin/kafka-server-start.sh 脚本重命名为 bin/kafka-server-start-sasl.sh,倒数第二行增加如下配置

复制代码
export KAFKA_OPTS="-Dzookeeper.sasl.client=false -Dzookeeper.sasl.client.username=zk-server -Djava.security.krb5.conf=/opt/kafka/kafka_2.13-3.6.1/config/kerberos/krb5.conf -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.6.1/config/kerberos/kafka-server-jaas.conf"

4.Kafka 客户端配置

.新建 kafka-client-jaas.conf 文件,该文件也放到 Kafka 的 config/kerberos 目录下。

4.1 新建 client.properties 文件,该文件也放到 Kafka 的 config/kerberos 目录下。

复制代码
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka-server

4.2 新建 kafka-client-jaas.conf 文件,该文件也放到 Kafka 的 config/kerberos 目录下

复制代码
KafkaClient {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   keyTab="/opt/kafka/kafka_2.13-3.6.1/config/kerberos/kafka-client.keytab"
   storeKey=true
   useTicketCache=false
   principal="kafka-client@CECGW.CN";
};

4.3 复制 bin/kafka-topics.sh、kafka-console-producer.sh、bin/kafka-console-consumer.sh 脚本,分别重命名为 bin/kafka-topics-sasl.sh、kafka-console-producer-sasl.sh、bin/kafka-console-consumer-sasl.sh,倒数第二行增加如下配置

复制代码
export KAFKA_OPTS="-Djava.security.krb5.conf=/opt/kafka/kafka_2.13-3.6.1/config/kerberos/krb5.conf -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.6.1/config/kerberos/kafka-client-jaas.conf"

三:启动测试

1. 启动zk

复制代码
cd /opt/kafka/kafka_2.13-3.6.1
nohup bin/zookeeper-server-start.sh config/zookeeper.properties > /dev/null 2>&1 &

2. 运行 bin/kafka-server-start-sasl.s 启动 Kafka 集群:

复制代码
./bin/kafka-server-start-sasl.sh -daemon config/server-sasl.properties

3. 运行 bin/kafka-topics-sasl.sh 查看 topic 列表信息:

复制代码
./bin/kafka-topics-sasl.sh --list --bootstrap-server ubuntu:9092 --command-config config/kerberos/client.pr
operties

4. 创建topic

复制代码
bin/kafka-topics-sasl.sh --create --bootstrap-server ubuntu:9092 --replication-factor 1 --partitions 1 --topic your_topic_name --command-config config/kerberos/client.properties

5. 运行 kafka-console-producer-sasl.sh 生产消息:

复制代码
./bin/kafka-console-producer-sasl.sh --broker-list ubuntu:9092 --topic your_topic_name --producer.config config/kerberos/client.properties

6. 运行 bin/kafka-console-consumer-sasl.sh 消费消息:

复制代码
./bin/kafka-console-consumer-sasl.sh --bootstrap-server ubuntu:9092 --topic your_topic_name --from-beginning --consumer.config config/kerberos/client.properties
相关推荐
笃行3503 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具
数据库
非优秀程序员5 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》
数据库·node.js·代码规范
SelectDB10 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系
数据库
这个DBA有点耶10 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql
这个DBA有点耶12 小时前
函数索引的“完全一致”有多苛刻:写法、字符集、类型,差一处就失效
数据库·mysql·代码规范
星恒随风12 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio13 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
数据库急诊室_阿哲16 小时前
一次加索引建议的复核记录:从报告到签字
数据库·ai数据库
青瓦梦滋17 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
慧都小妮子18 小时前
Wyn商业智能国产数据库适配:数据接入、分析缓存与审计日志验证清单
数据库·数据分析·数据可视化·审计日志·商业智能