Kafka安全认证技术:SASL/SCRAM-ACL方案详解

#作者 :张桐瑞

文章目录

  • 1Kafka安全认证技术介绍
  • 2基础设置
  • 3 配置SASL/SCRAM认证
    • 3.1编写server.properties配置
    • 3.2编写kafka.conf密码文件
    • 3.3编写user.properties配置文件
    • 3.4编写kafka-run-class.sh脚本文件
    • 3.5Zk中增加kafka用户
    • 3.6启动kafka进程

1Kafka安全认证技术介绍

Kafka作为一款高吞吐量的分布式消息系统,在数据传输和存储过程中的安全性至关重要。目前,Kafka支持多种认证方式,每种方式都有其独特的特点和适用场景,在生产环境中常见应用的SASL相关认证方式如下:
SSL/TLS认证:基于SSL/TLS加密技术,通过SSL/TLS证书对客户端和服务器进行双向身份验证。在数据传输过程中,利用证书加密通道,确保数据在传输层的安全性和完整性,有效防止数据被窃取或篡改。这种认证方式广泛应用于对数据安全和隐私要求极高的场景,例如金融行业的数据传输。
SASL/PLAIN认证:简单身份验证和授权层应用程序接口(Simple Authentication and Security Layer Application Programming Interface)的PLAIN认证,是一种极为简单的用户名和密码认证方式。其优势在于配置和维护简单,易于在Kafka与其他应用程序之间建立认证机制,适用于对安全性要求相对较低、部署和维护希望简便的场景,如一些小型企业的内部系统。
SASL/SCRAM认证:包括SCRAM-SHA-256、SCRAM-SHA-512等认证方式。该认证过程需要客户端和服务器密切协同完成,涉及到多次交互验证。虽然使用和维护相对复杂,但它具备动态增加用户的显著优势,无需重启Kafka组件服务端即可完成用户的添加,为系统的用户管理提供了极大的灵活性,适合对用户管理灵活性要求较高的企业。
SASL/GSSAPI认证(Kerberos认证):主要适用于大型企业的生产环境,通常与Kerberos协议结合使用。通过集成目录服务(如Active Directory,AD),实现用户身份的统一管理和认证。这种认证机制不仅提供了卓越的安全性,还能为用户带来良好的体验,例如实现单点登录(SSO)功能,方便用户在多个相关系统间无缝切换。
Kafka自带ACL访问控制方式:Kafka提供的ACL(Access Control Lists,访问控制列表)功能,可针对特定的Topic或Topic Partition精细控制用户的访问权限,如读、写、删除等操作权限。通过合理配置ACL,可以有效保障业务数据的安全性,确保敏感数据仅被授权用户访问。
企业在选择认证方式时,需要综合考虑多方面因素。既要确保业务数据的安全性,又要权衡部署后的性能影响和部署复杂度。在实际生产部署过程中,应根据企业的安全政策、网络架构、对系统性能的要求等因素,谨慎选择最适合的认证方式,以确保所选的认证机制与企业的实际需求完美契合。

2基础设置

Zookeeper版本:apache-zookeeper-3.6.3-bin。
Kafka版本:kafka_2.13-3.5.1。

3 配置SASL/SCRAM认证

3.1编写server.properties配置

listeners=SASL_PLAINTEXT://kafkaip:9092
advertised.listeners=SASL_PLAINTEXT://kafkaip:9092
super.users=User:admin
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
security.inter.broker.protocol=SASL_PLAINTEXT
authorizer.class.name=kafka.security.authorizer.AclAuthorizer

配置说明:
listeners:指定Kafka服务器监听的地址和协议,这里使用SASL_PLAINTEXT协议,监听在kafkaip:9092地址上。
advertised.listeners:用于告知客户端连接Kafka服务器的地址和协议,确保客户端能够正确连接。
super.users:设置超级用户,这里定义了admin为超级用户,超级用户拥有更高的权限,可进行一些特殊操作。
sasl.enabled.mechanisms:启用SCRAM-SHA-512认证机制,确保Kafka服务器支持该认证方式。
sasl.mechanism.inter.broker.protocol:指定Kafka集群内部节点间通信使用的认证机制为SCRAM-SHA-512。
security.inter.broker.protocol:明确集群内部节点间通信的安全协议为SASL_PLAINTEXT。
authorizer.class.name:配置Kafka的访问控制授权器,这里使用kafka.security.authorizer.AclAuthorizer来实现基于ACL的访问控制。

3.2编写kafka.conf密码文件

KafkaServer {org.apache.kafka.common.security.scram.ScramLoginModule requiredusername="admin"password="admin";
};  #kafka用户名密码;
Client {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername="user1"password="user1";
};  #zookeeper连接;

配置说明:
KafkaServer部分:配置Kafka服务器认证所需的用户名和密码,这里设置用户名为admin,密码为admin,使用org.apache.kafka.common.security.scram.ScramLoginModule模块进行认证。
Client部分:用于配置连接Zookeeper时所需的用户名和密码,设置用户名为user1,密码为user1,使用org.apache.zookeeper.server.auth.DigestLoginModule模块进行认证。

3.3编写user.properties配置文件

properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin";

配置说明:
security.protocol:指定客户端与Kafka服务器通信的安全协议为SASL_PLAINTEXT。
sasl.mechanism:明确使用SCRAM-SHA-512作为认证机制。
sasl.jaas.config:配置JAAS(Java Authentication and Authorization Service)认证所需的参数,包括使用的认证模块、用户名和密码。

3.4编写kafka-run-class.sh脚本文件

if [ -z "$KAFKA_OPTS" ]; thenKAFKA_OPTS="-Djava.security.auth.login.config=/kafka/config/kafka.conf"
Fi
…

配置说明:
在kafka-run-class.sh脚本中,添加上述代码片段。这段代码用于检查KAFKA_OPTS环境变量是否为空,如果为空,则设置KAFKA_OPTS环境变量,指定Kafka服务器启动时使用的JAAS配置文件路径为/tmp/kafka/config/kafka.conf,确保Kafka服务器能够正确加载认证配置。

3.5Zk中增加kafka用户

./kafka/bin/kafka-configs.sh --zookeeper zookeeperip:/kafka --alter --add-config 'SCRAM-SHA-512=[password=admin]' --entity-type users --entity-name admin

命令说明:
上述命令用于在Zookeeper中为Kafka添加用户。通过kafka-configs.sh脚本,连接到指定的Zookeeper服务器,为名为admin的用户添加SCRAM-SHA-512认证方式的密码配置。
启动kafka后可使用kafka命令进行创建用户

./bin/kafka-configs.sh --bootstrap-server kafkaip:9092 --command-config config/user.properties --alter --add-config 'SCRAM-SHA-512=[password=exporter]' --entity-type users --entity-name expoter

命令说明:
在Kafka启动后,利用kafka-configs.sh脚本,通过指定的bootstrap-server,并依据config/user.properties配置文件中的认证信息,为名为exporter的用户添加SCRAM-SHA-512认证方式的密码配置。

3.6启动kafka进程

./bin/kafka-server-start.sh ./config/server.properties
4Kafka-exporter配置监控采集
Kafka-exporter是一个用于采集Kafka监控指标的工具,为了实现对所有topic的监控数据采集,需要为其配置具有describe所有topic权限的用户。
./kafka_exporter --kafka.server=kafkaip:9092 --sasl.enabled --sasl.mechanism=SCRAM-SHA-512 --sasl.username=exporter --sasl.password=exporter --topic.filter=topicname
–kafka.server:指定Kafka服务器的地址和端口
–sasl.enabled:启用SASL认证
–sasl.mechanism:设置认证机制为SCRAM-SHA-512
–sasl.username和–sasl.password:指定用于认证的用户名和密码
–topic.filter:设置监控的topic过滤规则

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP/IP和UDP协议的发展历程

TCP/IP和UDP协议的发展历程 引言 互联网的发展史是人类技术创新的辉煌篇章,而在这一发展过程中,通信协议发挥了奠基性的作用。TCP/IP(传输控制协议/互联网协议)和UDP(用户数据报协议)作为互联网通信的基础…

PhotoShop学习10

1.画板功能的使用 使用画板功能可以轻松针对不同的设备和屏幕尺寸设计网页和 APP。画板是一种容器,类似于特殊图层组。画板中的图层在图层面板中,按画板进行分组。 使用画板,一个文档中可以有多个设计版面,这样可以在画板之间轻…

X-AnyLabeling开源程序借助 Segment Anything 和其他出色模型的 AI 支持轻松进行数据标记。

一、软件介绍 文末提供源码和程序下载学习 使用 X-AnyLabeling开源程序可以 导入、管理和保存数据。用户可以通过多种方式导入图像和视频文件,包括快捷方式或菜单选项。此外,它还涵盖数据删除、图像切换以及标签和图像数据的保存,以确保高效…

【深度解析】PlatformIO多环境配置实践:ESP32/ESP32-S3/ESP32-C3适配指南

一、前言:为什么需要多环境配置? 在物联网开发中,我们经常需要适配不同型号的硬件平台(如ESP32系列),并且github上多数关于ESP32的都适配了多种开发板。传统开发方式需要为每个平台维护独立项目,而Platfor…

React 列表渲染基础示例

React 中最常见的一个需求就是「把一组数据渲染成一组 DOM 元素」,比如一个列表。下面是我写的一个最小示例,目的是搞清楚它到底是怎么工作的。 示例代码 // 定义一个静态数组,模拟后续要渲染的数据源 // 每个对象代表一个前端框架&#xf…

NHANES指标推荐:CMI

文章题目:Association between cardiometabolic index and biological ageing among adults: a population-based study DOI:10.1186/s12889-025-22053-3 中文标题:成年人心脏代谢指数与生物衰老之间的关系:一项基于人群的研究 发…

QT调用ffmpeg库实现视频录制

可以通过QProcess调用ffmpeg命令行,也可以直接调用ffmpeg库,方便。 调用库 安装ffmpeg ffmpeg -version 没装就装 sudo apt-get update sudo apt-get install ffmpeg sudo apt-get install ffmpeg libavdevice-dev .pro引入库路径,引入库 LIBS += -L/usr/lib/aarch64-l…

消息中间件——RocketMQ(二)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 RocketMQ(一) 接上期内容:上期完成了RocketMQ单机部署知识。下面学习RocketMQ集群相关知识&#xf…

pyqt环境配置

文章目录 1 概述2 PyQt6和PySide6区别3 环境配置4 配置PySide65 配置PyQt66 配置外部工具7 添加模板8 使用pyside6-project构建工程9 常见错误10 相关地址 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 &#x1…

金融数据库转型实战读后感

荣幸收到老友太保科技有限公司数智研究院首席专家林春的签名赠书。 这是国内第一本关于OceanBase数据库实际替换过程总结的的实战书。打个比方可以说是从战场上下来分享战斗经验。读后感受颇深。我在这里讲讲我的感受。 第三章中提到的应用改造如何降本。应用改造是国产化替换…

旅游资源网站登录(jsp+ssm+mysql5.x)

旅游资源网站登录(jspssmmysql5.x) 旅游资源网站是一个为旅游爱好者提供全面服务的平台。网站登录界面简洁明了,用户可以选择以管理员或普通用户身份登录。成功登录后,用户可以访问个人中心,进行修改密码和个人信息管理。用户管理模块允许管…

STM32 HAL库之WDG示例代码

独立看门狗(IWDG) 在规定时间内按按键喂狗并将LED关闭,若产生看门狗复位则LED打开 初始化独立看门狗,在main.c中的 MX_IWDG_Init();,也就是iwdg.c中的初始化代码 void MX_IWDG_Init(void) {/* USER CODE BEGIN IWDG…

【第47节】windows程序的其他反调试手段下篇

目录 一、利用Hardware Breakpoints Detection 二、PatchingDetection - CodeChecksumCalculation 补丁检测,代码检验和 三、block input 封锁键盘、鼠标输入 四、使用EnableWindow 禁用窗口 五、利用ThreadHideFromDebugger 六、使用Disabling Breakpoints 禁…

【笔记ing】AI大模型-03深度学习基础理论

神经网络:A neural network is a network or circuit of neurons,or in a modern sense,an artificial neural network,composed of artificial neurons or nodes.神经网络是神经元的网络或回路,或者在现在意义上来说,是一个由人工神经元或节…

基于Djiango实现中药材数据分析与可视化系统

中药材数据分析与可视化系统 项目截图 登录 注册 首页 药材Top20 药材价格 产地占比 历史价格 新闻资讯 后台管理 一、项目概述 中药材数据分析与可视化系统是一个基于Django框架开发的专业Web应用,致力于对各类中药材数据进行全面、系统的采集、分析和可视化展示…

【AI飞】AutoIT入门七(实战):python操控autoit解决csf视频批量转换(有点难,AI都不会)

背景: 终极目标:通过python调用大模型,获得结果,然后根据返回信息,控制AutoIT操作电脑软件,执行具体工作。让AI更具有执行力。 已完成部分: 关于python调用大模型的,可以参考之前的…

leetcode 188. Best Time to Buy and Sell Stock IV

目录 题目描述 第一步,明确并理解dp数组及下标的含义 第二步,分析明确并理解递推公式 1.求dp[i][j].holding 2.求dp[i][j].sold 第三步,理解dp数组如何初始化 第四步,理解遍历顺序 代码 题目描述 这道题把第123题推广为一…

【笔记】【C++】【基础语法】作用域(scope)、持续时间(duration)和链接(linkage)

【笔记】【C】【基础语法】作用域(scope)、持续时间(duration)和链接(linkage) 最近正在复习学习C(查漏补缺ing)。记录一下学习所得。希望能将所学都整理成一系列的笔记和博客。优先…

Yarn的安装及环境配置

### Yarn 安装教程及环境配置步骤 #### 1. 检查 Node.js 是否已安装 在安装 Yarn 前,需确认系统中已经安装了 Node.js。可以通过以下命令验证其是否存在并获取版本号: bash node -v 如果未安装,则需要先完成 Node.js 的安装。 --- #### 2…

day2-小白学习JAVA---java第一个程序

java第一个程序 1、新建一个文件,以.java为结尾2、用编辑器打开后写入代码(本人写前端,所以用vscode,也可用其他)3、编译文件4、运行文件5、HelloWorld代码解释6、文档注释 1、新建一个文件,以.java为结尾 …