本文基于 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 的认证模式,本文涵盖的内容为:

  1. 配置服务端的认证模式
  2. 命令行创建新账号
  3. 授权账号到Topic的生产/消费权限
  4. 命令行凭证接入样例
  5. 客户端凭证接入样例

作者:[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接入的更多相关文章

  1. 802.1X 账号密码+设备信息双重认证

    名词解释 802.1X: IEEE802 LAN/WAN 委员会为解决无线局域网网络安全问题,提出了 802.1X 协议.后来,802.1X协议作为局域网端口的一个普通接入控制机制在以太网中被广泛应用 ...

  2. kafka SASL认证介绍及自定义SASL PLAIN认证功能

    目录 kafka 2.x用户认证方式小结 SASL/PLAIN实例(配置及客户端) broker配置 客户端配置 自定义SASL/PLAIN认证(二次开发) kafka2新的callback接口介绍 ...

  3. Kafka认证权限配置(动态添加用户)

    之前写过一篇Kafka ACL使用实战,里面演示了如何配置SASL PLAINTEXT + ACL来为Kafka集群提供认证/权限安全保障,但有一个问题经常被问到:这种方案下是否支持动态增加/移除认证 ...

  4. 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数

    通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...

  5. 通过游戏学python 3.6 第一季 第七章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号

    #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误 ...

  6. 通过游戏学python 3.6 第一季 第六章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 可复制直接使用 娱乐 可封装 函数

    #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改 #猜数字--核心代码--猜测次数--随机函数和屏蔽错误代码---优 ...

  7. 谈谈基于OAuth 2.0的第三方认证 [中篇]

    虽然我们在<上篇>分别讨论了4种预定义的Authorization Grant类型以及它们各自的适用场景的获取Access Token的方式,我想很多之前没有接触过OAuth 2.0的读者 ...

  8. day01 mysql认识 安装 配置 起服务 密码 字符集 用户授权

    day01 mysql      一.认识mysql     关系型数据库:         最流行的关系型数据库管理系统,支持大型数据库,处理上千万条记录         关系型: oracle,  ...

  9. 谈谈基于OAuth 2.0的第三方认证 [下篇]

    从安全的角度来讲,<中篇>介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获取Access Token的 ...

  10. 基于Linux系统的MariaDB数据库的安装配置

    数据库是指长期存储在计算机内.有组织的和可共享的数据集合.表是数据库存储数据的基本单位,一个表由若干个字段组成 MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 G ...

随机推荐

  1. 一文读懂面试官都在问的Fastjson漏洞

    Fastjson1.2.24-RCE漏洞 漏洞简介 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符 ...

  2. How to use the shell command to get the version of Linux Distributions All In One

    How to use the shell command to get the version of Linux Distributions All In One 如何使用 shell 命令获取 Li ...

  3. CANoe学习笔记(一):创建第一个仿真工程(基于CAN):点灯

    目录 内容: ①创建两个节点,Switch和Light节点 ②创建两个Panel界面 ③capl代码实现Switch控制Light亮灭 事先准备: 养成良好的习惯,将不同文件放入不同文件夹,创建如下几 ...

  4. 闺蜜机 StanbyME 产品随想

    今天媳妇告诉我,现在小度这边推出一款叫 "闺蜜机"的可用移动的IPAD设备,我点开链接一看,就感觉兴趣不大,不就是一款把屏幕做的更大些的IPAD了吗? 有哪些更多创新呢?为什么会需 ...

  5. 1 大数据实战系列-spark+hadoop集成环境搭建

    1 准备环境 192.168.0.251 shulaibao1 192.168.0.252 shulaibao2 hadoop-2.8.0-bin spark-2.1.1-bin-hadoop2.7  ...

  6. Windows/DOS与Unix文件格式之间的相互转换(/r/n问题)

    PS:今天遇到一个文件转换问题,现在将网上搜索到资料贴出来.. 第一个资料 Windows/DOS与Unix文件格式是不同的,问题一般就是出在/r/n问题上. 回车(CR)和换行(LF)符都是用来表示 ...

  7.  Python + unittest + ddt + HTMLTestRunner + log + excel + mysql + 企业微信通知, 接口自动化框架V2.0,支持多业务处理,仅需维护 excel 用例,无需要编写代码

    Python + unittest + ddt + HTMLTestRunner + log + excel + mysql + 企业微信通知 + Jenkins 实现的接口自动化框架. 项目介绍 接 ...

  8. Centos安装ELK

    目录 安装Elastic Search 安装 Java 安装Elastic Search 修改配置 开放端口 访问地址 相关命令 安装elasticsearch-head插件 安装Git 安装node ...

  9. 【Flyway】初识Flyway,将Flyway集成于Spring项目

    什么是Flyway Flyway官方网站:点击这里 官方描述: Flyway extends DevOps to your databases to accelerate software deliv ...

  10. Mysql基础5-用户及权限管理

    一.介绍 DCL:Data Control Language(数据控制语言),用来管理数据库用户,控制数据库的访问,权限. 二.用户管理 1.查询用户 语法: 1.use mysql; 2.selec ...