当前位置: 首页 > news >正文

Kafka安全认证机制详解之SASL_PLAIN

一、概述

官方文档:
https://kafka.apache.org/documentation/#security
在官方文档中,kafka有五种加密认证方式,分别如下:

  • SSL:用于测试环境
  • SASL/GSSAPI (Kerberos) :使用kerberos认证,密码是加密的,也是当前企业中使用最多的,最小支持版本0.9
  • SASL/PLAIN :使用简单用户名和密码形式,生产环境中一般不使用,主要用于测试,最小支持版本0.10
  • SASL/SCRAM:主要解决PLAIN动态更新问题以及安全机制,最小支持版本0.10.2
  • SASL/OAUTHBEARER:基于OAuth2认证框架,最小支持版本2.0

几种认证方式的详细比较

  • SASL/GSSAPI 主要是给 Kerberos 使用的。GSSAPI 适用于本身已经做了 Kerberos 认证的场景,这样的话,SASL/GSSAPI 可以实现无缝集成。
  • SASL/PLAIN 是一个简单的用户名 / 密码认证机制,通常与 SSL 加密搭配使用。对于一些小公司而言,搭建公司级的 Kerberos 可能并没有什么必要,他们的用户系统也不复杂,特别是访问 Kafka 集群的用户可能不是很多。对于 SASL/PLAIN 而言,这就是一个非常合适的应用场景。总体来说,SASL/PLAIN 的配置和运维成本相对较小,适合于小型公司中的 Kafka 集群。SASL/PLAIN 有这样一个弊端:它不能动态地增减认证用户,必须重启 Kafka 集群才能令变更生效。因为所有认证用户信息全部保存在静态文件中,所以只能重启 Broker,才能重新加载变更后的静态文件。
  • SASL/SCRAM 通过将认证用户信息保存在 ZooKeeper 的方式,避免了动态修改需要重启 Broker 的弊端。在实际使用过程中,可以使用 Kafka 提供的命令动态地创建和删除用户,无需重启整个集群。因此,如果打算使用 SASL/PLAIN,不妨改用 SASL/SCRAM 试试。不过要注意的是,后者是 0.10.2 版本引入的。
  • SASL/OAUTHBEARER 是 2.0 版本引入的新认证机制,主要是为了实现与 OAuth 2 框架的集成。 Kafka 不提倡单纯使用 OAUTHBEARER,因为它生成的不安全的 JSON Web Token,必须配以 SSL 加密才能用在生产环境中。
  • Delegation Token 是在 1.1 版本引入的,它是一种轻量级的认证机制,主要目的是补充现有的 SASL 或 SSL 认证。 如果要使用 Delegation Token,需要先配置好 SASL 认证,然后再利用 Kafka 提供的 API 去获取对应的 Delegation Token。这样,Broker 和客户端在做认证的时候,可以直接使用这个 token,不用每次都去 KDC 获取对应的 ticket(Kerberos 认证)或传输 Keystore 文件(SSL 认证)。

二、SASL/PLAIN

SASL/PLAIN是基于用户名密码的认证方式,是比较常用的一种认证,通常与TLS一起用于加密以实现安全认证。

增加kafka配置

vim /opt/kafka_2.13-2.6.0/config/server.properties# 增加以下配置,每台节点都要配置
listeners=SASL_PLAINTEXT://host.name:port
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN# 分发配置,需要注意用户名和路径
scp /opt/kafka_2.13-2.6.0/config/server.properties root@kafka2-73085:/opt/kafka_2.13-2.6.0/config/scp /opt/kafka_2.13-2.6.0/config/server.properties root@kafka3-73085:/opt/kafka_2.13-2.6.0/config/

增加kafka的权限配置信息

# 编辑配置文件
vim /opt/kafka_2.13-2.6.0/config/kafka_server_jaas.conf# 增加以下配置
# 增加了两个用户 admin用户和tly用户,配置文件中间不能有注释
KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="admin"password="123456"user_admin="123456"user_tly="123456";};# 分发配置文件
scp kafka_server_jaas.conf root@kafka2-73085:/opt/kafka_2.13-2.6.0/config/scp kafka_server_jaas.conf root@kafka3-73085:/opt/kafka_2.13-2.6.0/config/

上面配置是新增了两个用户,admin和tly,这两个用户都是普通用户,KafkaServer中的username、password配置的用户和密码,是用来broker和broker连接认证。在本例中,admin是代理broker间通信的用户。user_userName配置为连接到broker的所有用户定义密码,broker使用这些验证所有客户端连接,包括来自其他broker的连接。

将JAAS位置作为JVM参数传递给broker

# 编辑 kafka-run-class.sh
vim /opt/kafka_2.13-2.6.0/bin/kafka-run-class.sh# 更改第219行
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka_2.13-2.6.0/config/kafka_server_jaas.conf"# 分发脚本
scp kafka-run-class.sh root@kafka2-73085:/opt/kafka_2.13-2.6.0/bin/kafka-run-class.sh       
scp kafka-run-class.sh root@kafka2-73085:/opt/kafka_2.13-2.6.0/bin/kafka-run-class.sh    

启动kafka集群

kafka-server-start.sh -daemon /opt/kafka_2.13-2.6.0/config/server.properties 

这个时候集群启动完毕已经带有权限

客户端连接

查看topic列表

kafka-topics.sh --bootstrap-server kafka1-73085:9092 --list

迟迟不出结果,卡住了,实际上是没有权限
image.png
查看日志如下:
image.png

配置权限信息

# 编辑权限文件
vim /root/auth.conf# 输入如下内容
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="tly" password="123456";

username和password必须是kafka_server_jaas.conf中配置的。

使用带账号密码配置文件连接

kafka-topics.sh --bootstrap-server kafka1-73085:9092 --list --command-config /root/auth.conf

已经可以正常返回了,说明有权限认证通过了:
image.png

创建topic

kafka-topics.sh --bootstrap-server kafka1-73085:9092 --create --topic topic_1 --partitions 3 --replication-factor 3 --command-config /root/auth.conf

生产消息

kafka-console-producer.sh  --bootstrap-server \
kafka1-73085:9092 --topic topic_1 --producer.config /root/auth.conf 

消费消息

kafka-console-consumer.sh --bootstrap-server kafka1-73085:9092 \
--topic topic_1 --consumer.config /root/auth.conf

权限配置

# 修改server.properties 增加如下配置
# 指定通过ACL来控制权限
authorizer.class.name=kafka.security.authorizer.AclAuthorizer# 指定超级管理员
super.users=User:admin

使用权限配置并且超级用户是admin,这个用户和我们上面配置的列表中的admin用户相互映射,每个机器都需要配置然后重启所有节点

# 配置用户认证文件信息
vim /root/admin.conf
# 输入如下内容
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="123456";# 重启所有节点,每个节点都要执行
# 停止节点
kafka-server-stop.sh# 启动节点
kafka-server-start.sh -daemon /opt/kafka_2.13-2.6.0/config/server.properties 

此时每个节点都有了权限认证

# 配置用户认证文件
vim /root/admin.conf# 输入以下内容
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="123456";

创建topic

这个时候使用auth.conf已经不能创建topic了,使用admin.conf可以创建,因为admin账号和配置的超级管理员一致;而auth.conf配置的是tly账号;

kafka-topics.sh --bootstrap-server kafka1-73085:9092 --create --topic topic_2 --partitions 3 --replication-factor 3 --command-conf /root/auth.conf

image.png
不使用认证创建会一直卡主不动,其实也是没权限的,时间久了就会报timeout异常

kafka-topics.sh --bootstrap-server kafka1-73085:9092 --create --topic topic_3 --partitions 3 --replication-factor 3 

image.png

kafka-acls控制权限

命令为:kafka-acls.sh
参数如下:

  • –add 增加权限 --remove 删除权限
  • –allow-host 允许操作的主机 --deny-host 拒绝的主机
  • –allow-principal 允许操作的用户 --deny-principal 拒绝用户
  • –bootstrap-server 集群地址
  • –command-config 认证文件信息
  • –group 可以消费topic的消费者组
  • –list 查询所有权限
  • –operation 增加操作权限
    • describe
    • describeConfigs
    • alter
    • read
    • delete
    • create
    • all
    • write
    • alterconfig
  • –topic 指定topic
查询topic所有权限
kafka-acls.sh --bootstrap-server kafka1-73085:9092 --list  --command-config /root/admin.conf
删除所有权限
kafka-acls.sh --bootstrap-server  kafka1-73085:9092 --topic topic_1 --remove  --command-config /root/admin.conf
给用户增加权限

给之前的用户tly授权

kafka-acls.sh --bootstrap-server  kafka1-73085:9092  --add --allow-principal User:tly --topic topic_1 --operation all --command-config /root/admin.conf

使用tly用户查看当前topic

kafka-topics.sh --bootstrap-server kafka1-73085:9092  --list --command-config /root/auth.conf
回收权限
kafka-acls.sh --bootstrap-server kafka1-73085:9092 --remove --allow-principal user:tly --topic topic_1 --operation all --command-config /root/admin.conf
增加权限并且增加IP限制
kafka-acls.sh --bootstrap-server kafka1-73085:9092 --add  --deny-principal User:tly --topic topic_1 --operation all --deny-host 127.0.0.1 --command-config admin.conf
生产者和消费者的权限设置
# 删除所有权限信息
kafka-acls.sh --bootstrap-server kafka1-73085:9092  --topic topic_1 --remove --command-config /root/admin.conf# 添加生产者权限
kafka-acls.sh --bootstrap-server kafka1-73085:9092 --add --allow-principal User:tly --operation Write --topic topic_1 --command-config /root/admin.conf# 添加消费权限
kafka-acls.sh --bootstrap-server kafka1-73085:9092 --add --allow-principal User:tly --operation Read --topic topic_1 --command-config /root/admin.conf# 消费消息
kafka-console-consumer.sh --bootstrap-server kafka1-73085:9092 --topic topic_1 --from-beginning --consumer.config /root/auth.conf# 发现消费不到,原因是消费者组没有权限
# 增加消费者组权限
kafka-acls.sh --bootstrap-server kafka1-73085:9092 --add --allow-principal User:tly --operation Read --topic topic_1 --group group_1 --command-config /root/admin.conf# 再次执行消费消息命令并增加分组信息即可以消费到数据
kafka-console-consumer.sh --bootstrap-server kafka1-73085:9092 --topic topic_1 --from-beginning --consumer.config /root/auth.conf --group group_1

相关文章:

Kafka安全认证机制详解之SASL_PLAIN

一、概述 官方文档: https://kafka.apache.org/documentation/#security 在官方文档中,kafka有五种加密认证方式,分别如下: SSL:用于测试环境SASL/GSSAPI (Kerberos) :使用kerberos认证,密码是…...

2023南京理工大学通信工程818信号系统及数电考试大纲

注:(Δ)表示重点内容。具体内容详见博睿泽信息通信考研论坛 参考书目: [1] 钱玲,谷亚林,王海青. 信号与系统(第五版). 北京:电子工业出版社 [2] 郑君里,应…...

wsl(ubuntu)创建用户

我们打卡ubuntu窗口,如果没有创建用户,那么默认是root用户 用户的增删改查 查 查询所有的用户列表 cat /etc/passwd | cut -d: -f1cat /etc/passwd: 这个命令用于显示 /etc/passwd 文件的内容。/etc/passwd 文件包含了系统上所有用户的基本信息。每一…...

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-8Lag Compensator滞后补偿器

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-8Lag Compensator滞后补偿器 从稳态误差入手(steady state Error) 误差 Error : E ( s ) R ( s ) − X ( s ) R ( s ) − E ( s ) ⋅ K G …...

swift-碰到的问题

如何让工程不使用storyboard和scene 删除info.plist里面的Application Scene mainifest 删除SceneDelegate.swift 删除AppDelegate.swift里面的这两个方法 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession…...

安全与认证Week4

目录 目录 Web Security (TLS/SSL) 各层安全协议 Transport Layer Security (TLS)传输层安全性(TLS) SSL和TLS的联系与区别 TLS connection&session 连接与会话 题目2答案点 TLS ArchitectureTLS架构(5个协议) 题目1答案点 Handshake Proto…...

Golang高质量编程与性能调优实战

1.1 简介 高质量:编写的代码能否达到正确可靠、简洁清晰的目标 各种边界条件是否考虑完备异常情况处理,稳定性保证易读易维护编程原则 简单性 消除多余的重复性,以简单清晰的逻辑编写代码不理解的代码无法修复改进可读性 代码是写给人看的,并不是机器编写可维护代码的第一…...

vite 如何打包 dist 文件到 zip 使用插件 vite-plugin-zip-pack,vue3 ts

vite 如何打包 dist 文件到 zip 使用插件 vite-plugin-zip-pack,vue3 ts 开发过程中一个经常做的事就是将 ./dist 文件夹打包成 zip 分发。 每次手动打包还是很费劲的, vite 同样也有能把 ./dist 文件夹打包成 .zip 的插件,当然这个打包的文…...

jdbc源码研究

JDBC介绍 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。 开发者不必为每家数据通信协议的不同而疲于奔命&#…...

挠性及刚挠结合印制电路技术

1.1挠性印制电路板概述 20世纪70年代末期,以日本厂商为主导,逐渐将挠性印制电路板(flexible printedcircuit board,FPCB,简称为FPC)广泛应用于计算机、照相机、打印机、汽车音响、硬盘驱动器等电子信息产品中。20世纪90年代初期&…...

Python+OpenGL绘制3D模型(七)制作3dsmax导出插件

系列文章 一、逆向工程 Sketchup 逆向工程(一)破解.skp文件数据结构 Sketchup 逆向工程(二)分析三维模型数据结构 Sketchup 逆向工程(三)软件逆向工程从何处入手 Sketchup 逆向工程(四&#xf…...

MediaPipeUnityPlugin Win10环境搭建(22年3月的记录,新版本已完全不同,这里只做记录)

https://github.com/homuler/MediaPipeUnityPlugin You cannot build libraries for Android with the following steps. 1、安装msys2配置系统环境变量Path添加 C:\msys64\usr\bin 执行 pacman -Su 执行 pacman -S git patch unzip 2、安装Python3.9.10 勾选系统环境变量 …...

Nginx - location块中的alias和try_files重定向

nginx.conf片段: location /logo/general/ {autoindex_localtime on;alias /opt/config/;try_files /logo/logo.png /www/html/logo.png 404;} 意为:访问/logo/general/地址时, 如:访问http://127.0.0.1/logo/general/logo.png…...

二刷Laravel 教程(用户模型)总结Ⅲ

一、数据库迁移 当我们运行迁移时,up 方法会被调用;(创建表) 当我们回滚迁移时,down 方法会被调用。(删除表) public function up() { //create 方法会接收两个参数:一个是数据…...

安装PyTorch及环境配置(应用于Python上的YOLO)

这个基本都是Bilibili网站里面叫“小手丫子”up的视频教程,此前自己需要装了好几次又卸载了好几次,现在根据视频教学整理出来自己所理解的文档。 注意事项 1.安装的pycharm版本和anaconda版本无要求。 2.运行pycharm尽量以管理员身份运行。 3.Cuda是独…...

【194】PostgreSQL 14.5 编写SQL从身份证号中查找性别,并且更新性别字段。

假设有一张用户表 t_user ,该表设计如下: id: character varying 主键 name: character varying 姓名 idcard: character varying 身份证号 gender: smallint 性别,女是0,男是1根据身份证号查找所有未填写…...

微服务管家:NestJS 如何使用服务发现 Consul 实现高效的微服务节点管理

前言 在微服务架构中,服务发现是一项基础且关键的功能,它允许服务实例在网络中被动态发现。Consul 是一种服务网格解决方案,提供了服务发现、运行状况检查,过去和现代应用程序的连接等功能。 本教程将向您展示如何在 NestJS 框架…...

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现相机图像转换为Mat图像格式(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机掉线自动重连(C) Baumer工业相机Baumer工业相机的图像转换为OpenCV的Mat图像的技术背景在NEOAPI SDK里实现相机图像转换为Mat图像格式联合OpenCV实现相机图像转换为Mat图像格式测试演示图 工业相机…...

铁塔基站数字化管理监测解决方案

截至2023年10月,我国5G基站总数达321.5万个,占全国通信基站总数的28.1%。然而,随着5G基站数量的快速增长,基站的能耗问题也逐渐日益凸显,基站的用电给运营商带来了巨大的电费开支压力,降低5G基站的能耗成为…...

如何使用Python3 Boto3删除AWS CloudFormation的栈(Stacks)

文章目录 小结问题及解决有关Json文件的输入和输出使用Python3及正则表达式查找字符串包含某个子字符串使用Python3 Boto3删除AWS CloudFormation的栈(Stacks) 参考 小结 本文记录了使用Python3的Boto3包删除AWS CloudFormation的栈(Stacks&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...