我的 Kafka 旅程 - 基于账号密码的 SASL+PLAIN 认证授权 · 配置 · 创建账号 · 用户授权 · .NET接入
本文基于 Kafka 3.0+ 的 KRaft 模式来阐述
默认的 Kafka 不受认证约束,可不用账号就可以连接到服务,也就是默认的 PLAIN 方式,不需要认证;配置了 SASL 认证之后,连接Kafka只能用凭证连接登录。
SASL 支持的认证方式有多种:GSSAPI,PLAIN,SCRAM-SHA-256,SCRAM-SHA-512,OAUTHBEARER
本文讲述的是比较简单的 SASL_PLAINTEXT 方式,认证机制统一为:SCRAM-SHA-512。
那么基于 SASL+PLAINTEXT+SCRAM 的认证模式,本文涵盖的内容为:
- 配置服务端的认证模式
- 命令行创建新账号
- 授权账号到Topic的生产/消费权限
- 命令行凭证接入样例
- 客户端凭证接入样例
作者:[Sol·wang] - 博客园,原文出处:https://www.cnblogs.com/Sol-wang/
一、创建新用户
所以在不受认证约束的默认情况下,使用 kafka-configs.sh,可以在 Kafka 中创建新用户:
# 创建用户
bin/kafka-configs.sh --bootstrap-server {host}:9092 --alter \
--entity-type users --entity-name {u-name} --add-config 'SCRAM-SHA-512=[password={user-password}]'
# 查看用户
bin/kafka-configs.sh --bootstrap-server {host}:9092 --describe --entity-type users --entity-name {u-name}
为什么要先创建一个账号
默认在没有账号的情况下,后续的认证授权生效后,用谁来连接到Kafka创建用户呢??
当然是先有一个管理员账号的存在,如上创建的账号,就假设以上创建的账号为管理员 admin。
用户的分类
- 超级管理员:对 KAFKA 的管理
- 管理员: 用于第三方UI的接入
- 写入Topic:用于生产端的接入
- 读取Topic:用于消费端的接入
二、认证授权配置
接下来,让创建的用户起作用,就要配置认证授权机制(SASL_PLAINTEXT)
来编辑 config/kraft/server.properties 配置文件吧,如下:
# 认证方式(内/外) 配置
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093 # 对外认证方式 SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://localhost:9092 # Client(生产/消费)认证方式(不配置就用上一行代替)
inter.broker.listener.name=SASL_PLAINTEXT # 内部节点之间的通讯认证方式
security.inter.broker.protocol=SASL_PLAINTEXT # 内部通讯安全协议(不配置就用上一行代替)
# 认证机制 配置
sasl.enabled.mechanisms=SCRAM-SHA-512 # SASL 定义支持的认证机制
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512 # SASL 的内部认证机制(必须是上一行包含的值)
# 账号限制 配置
super.users=User:{user-name};User:{user-name} # 定义超级管理员
allow.everyone.if.no.acl.found=true # 生产/消费/等等,超级管理员之外的用户是否可以访问
# 授权方式(类名) 配置
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
重启 Kafka 服务,使其配置生效。此时,只能用定义了的超级管理员来连接操作 Kafka。那么需要的用户凭证如下节内容。
三、命令行中的凭证
假设之前已经创建了用户 admin/*****,并且已配置为超级管理员。
为命令行模式创建此用户的凭证文件,把它命名为 admin-user-jaas,admin用户凭证内容如下:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="*****";
命令行模式,用凭证连接 Kafka 服务:
之后的每一步操作,都要带上用户凭证,假设用超级用户 admin 继续创建新用户:
bin/kafka-configs.sh --bootstrap-server {host}:9092 \
--alter --add-config 'SCRAM-SHA-512=[password={user-password}]' \
--entity-type users --entity-name {new-user-name} --command-config admin-user-jaas
与之前不同的是多了个--command-config admin-user-jaas 也就是admin用户的凭证信息。这时若不带凭证信息会提示 disconnected。
四、用户授权到TOPIC
用户创建好了,接下来要为用户授权到指定的 Topic 了,并指定写入/读取权限。
通常写入权限等同于生产端的授权,那么读取权限等同于消费端的授权。
# 授权用户到指定 topic 的生产端(写入)权限
# --allow-principal:指定用户
# --topic {topic-name}:指定某个主题
# --producer:指定为(生产端的)写入权限
bin/kafka-acls.sh --bootstrap-server {host}:9092 --add --producer \
--allow-principal User:{user-name} --topic {topic-name} --command-config {admin-jaas}
#
# 授权用户到指定 topic 的消费端(读取)权限
# --allow-principal:指定用户
# --topic {topic-name}:指定某个主题
# --consumer:指定为(消费端的)读取权限
# --group {topic-group-name}:必须的消费组归属
bin/kafka-acls.sh --bootstrap-server {host}:9092 --add --consumer \
--allow-principal User:{user-name} --topic {topic-name} --group {topic-group-name} --command-config {jaas-name}
随着业务不断的增长,创建更多的账号并授权使用。
五、使用凭证接入
所用的用户凭证JAAS文件都相同,只不过账号密码不同,同样的为客户端用户创建一个凭证文件。
跟 admin-user-jaas 文件一样,创建一个新的JAAS凭证文件,这里是生产端/消费端的命令行接入案例:
# 生产端 用户凭证 连接到 Kafka
# --producer.config {用户凭证文件}
bin/kafka-console-producer.sh --bootstrap-server {host}:9092 --topic {topic-name} --producer.config upro-jaas
#
# 消费端 用户凭证 连接到 Kafka
# --consumer.config {用户凭证文件}
bin/kafka-console-consumer.sh --bootstrap-server {host}:9092 --topic {topic-name} --consumer.config ucsm-jaas --from-beginning
六、.NET用凭证接入
也就是把凭证文件JAAS中的内容,移到配置类中:
var conf = new ConsumerConfig {
GroupId = "test-cons-group",
BootstrapServers = "192.168.56.101:9092",
SaslUsername = "user-name",
SaslPassword = "*********",
SaslMechanism = SaslMechanism.ScramSha512,
SecurityProtocol = SecurityProtocol.SaslPlaintext,
SaslOauthbearerConfig = "org.apache.kafka.common.security.scram.ScramLoginModule"
};
我的 Kafka 旅程 - 基于账号密码的 SASL+PLAIN 认证授权 · 配置 · 创建账号 · 用户授权 · .NET接入的更多相关文章
- 802.1X 账号密码+设备信息双重认证
名词解释 802.1X: IEEE802 LAN/WAN 委员会为解决无线局域网网络安全问题,提出了 802.1X 协议.后来,802.1X协议作为局域网端口的一个普通接入控制机制在以太网中被广泛应用 ...
- kafka SASL认证介绍及自定义SASL PLAIN认证功能
目录 kafka 2.x用户认证方式小结 SASL/PLAIN实例(配置及客户端) broker配置 客户端配置 自定义SASL/PLAIN认证(二次开发) kafka2新的callback接口介绍 ...
- Kafka认证权限配置(动态添加用户)
之前写过一篇Kafka ACL使用实战,里面演示了如何配置SASL PLAINTEXT + ACL来为Kafka集群提供认证/权限安全保障,但有一个问题经常被问到:这种方案下是否支持动态增加/移除认证 ...
- 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数
通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...
- 通过游戏学python 3.6 第一季 第七章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误 ...
- 通过游戏学python 3.6 第一季 第六章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 可复制直接使用 娱乐 可封装 函数
#猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优 ...
- 谈谈基于OAuth 2.0的第三方认证 [中篇]
虽然我们在<上篇>分别讨论了4种预定义的Authorization Grant类型以及它们各自的适用场景的获取Access Token的方式,我想很多之前没有接触过OAuth 2.0的读者 ...
- day01 mysql认识 安装 配置 起服务 密码 字符集 用户授权
day01 mysql 一.认识mysql 关系型数据库: 最流行的关系型数据库管理系统,支持大型数据库,处理上千万条记录 关系型: oracle, ...
- 谈谈基于OAuth 2.0的第三方认证 [下篇]
从安全的角度来讲,<中篇>介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获取Access Token的 ...
- 基于Linux系统的MariaDB数据库的安装配置
数据库是指长期存储在计算机内.有组织的和可共享的数据集合.表是数据库存储数据的基本单位,一个表由若干个字段组成 MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 G ...
随机推荐
- (亲测有效-专门解决Mac环境)Pycharm 解决无法打开的问题
前提是Mac 安装了PyCharm.app 1.第一步:先输入: cd /Applications/PyCharm.app/Contents/MacOS 2.第二步:查看无法打开pycharm的原因, ...
- 曲线艺术编程 coding curves 第二章 三角函数曲线(TRIG CURVES)
第二章 三角函数曲线(TRIG CURVES) 原作:Keith Peters 原文:https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中 ...
- RT_Device
以上图片来自网页,非原创
- 解决github无法打开问题
在国内访问国外服务器(如github)会有卡顿.无法加载等问题,提供两种解决方案: 1.查看github的IP地址并修改Hosts windows键+R,打开cmd(或windows键+X,打开Win ...
- 3 大数据实战系列-spark shell分析日志
1 准备数据源 文件格式: 访问时间\t用户ID\t[查询词]\t该URL在返回结果中的排名\t用户点击的顺序号\t用户点击URL 数据文件越大越好,至少100万行 2 启动任务 ./spark-sh ...
- 从2PC和容错共识算法讨论zookeeper中的Create请求
最近在读<数据密集型应用系统设计>,其中谈到了zookeeper对容错共识算法的应用.这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以 ...
- ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器
一.概要 先看图 京豆多的离谱,你的第一想法肯定是:按F12修改了网页元素 没那么简单,你看支持刷新的 肯定还是假的,通过 Fiddler 或 Wireshark 等抓包工具修改了响应包:或者干脆改了 ...
- 动态SQL与静态SQL使用场景
静态SQL 和动态SQL 的区别 静态SQL(或嵌入式SQL) 是应用程序中的 SQL 语句,它们在运行时不会更改,因此可以硬编码到应用程序中. 动态 SQL是在运行时构造的 SQL 语句:例如,应用 ...
- CF1794B Not Dividing题解
如果 \(a_i\) 可以整除 \(a_{i - 1}\),只要在 \(a_i\) 上 \(+1\) 即可,这样 \(a_i \bmod a_{i - 1} = 1\) 就满足题目要求了,如果这样算来 ...
- 面由 AI 生|ZegoAvatar 捏脸技术解析
一.AI"卷"进实时互动 2021年,元宇宙概念席卷全球,国内各大厂加速赛道布局,通过元宇宙为不同的应用场景的相关内容生态进行赋能.针对"身份"."沉 ...