kafka 开启认证授权

news2024/11/18 12:15:28

前言

1、前面自己写了一篇关于各个环境各个模式的安装的文章,大家可以去看看 kafka各种环境安装(window,linux,docker,k8s),包含KRaft模式

2、使用版本 kafka_2.13-3.4.1

3、kafka验证方式,有两大类如下,文档内容在 kafka官方文档的 第七节 security,强烈建议大家去看下,不想看英文的可以翻译中文后看

  • SSL ( 官方3.4.x SSL 文档链接)
  • SASL ( 官方3.4.x SASL 文档链接)

在这里插入图片描述

4、而SASL 又细分如下 4 小类,这四种都可以使用

类型说明官方文档链接
SASL/GSSAPI (Kerberos)使用的Kerberos认证,可以集成目录服务,比如AD。从Kafka0.9版本开始支持Kerberos
SASL/PLAIN使用简单用户名和密码形式。从Kafka0.10版本开始支持,不支持动态增加账户和密码SASL/PLAIN
SASL/SCRAM-SHA-256主要解决PLAIN动态更新问题以及安全机制,从Kafka0.10.2开始支持SCRAM
SASL/SCRAM-SHA-512主要解决PLAIN动态更新问题以及安全机制,从Kafka0.10.2开始支持SCRAM
SASL/OAUTHBEARER基于OAuth 2认证框架,从Kafka2.0版本开始支持OAUTHBEARER

5、在后面指定java 实现的时候,可以去源码里面找对应的,如下
在这里插入图片描述

一、Linux 环境

1、采用 SASL/PLAIN 模式授权

2、在SASL/PLAIN 模式中 Kafka的SASL_SSL和SASL_PLAINTEXT是两种不同的安全协议,用于保护Kafka集群中的通信。它们提供了不同级别的安全性和身份验证选项:

  1. SASL_SSL (Simple Authentication and Security Layer over SSL/TLS):这是Kafka的高度安全的传输协议。它结合了SSL/TLS(用于加密通信)和SASL(用于身份验证)来提供强大的安全性。使用SASL_SSL,Kafka客户端和服务器之间的通信将是加密的,并且需要经过身份验证才能建立连接。常见的身份验证机制包括GSSAPI(Kerberos)、PLAIN(用户名和密码)等。SASL_SSL是Kafka中最安全的选项,适用于敏感数据和合规性要求高的场景。

  2. SASL_PLAINTEXT (Simple Authentication and Security Layer over plaintext):这是Kafka的另一种SASL支持方式,但不涉及加密。使用SASL_PLAINTEXT,身份验证是必需的,但通信不加密。这意味着数据在传输过程中是以明文形式传输的,因此对于保护数据隐私要求较低的场景或在内部网络中使用时,可以选择此选项。常见的身份验证机制也包括PLAIN(用户名和密码)等。

通常,SASL_SSL是更安全的选项,因为它不仅提供身份验证,还提供数据的加密,从而更好地保护了数据的隐私和完整性。但是,它的配置相对复杂,可能需要设置SSL/TLS证书和密钥以及身份验证机制。SASL_PLAINTEXT相对来说更容易配置,但数据在传输过程中不加密,可能不适用于对数据隐私有更高要求的场景。

你的选择应该根据你的具体安全需求来决定。在需要高度安全性的生产环境中,通常会选择SASL_SSL,而在开发和测试环境中,SASL_PLAINTEXT可能更为方便。无论选择哪种方式,都需要谨慎配置和管理Kafka的安全设置,以确保系统的安全性。

所以下面文章中的 SASL_PLAINTEXT 可以替换为 SASL_SSL,相应的配置可以改成如下(可以看官网的 SASL/PLAIN)这一节,采用的就是这种

在这里插入图片描述
在这里插入图片描述

3、下载后解压

tar -xzf kafka_2.13-3.4.1.tgz
cd kafka_2.13-3.4.1

1.1、Kafka with KRaft 单节点 授权配置

1.1.1、服务端

1.1.1.1、编写服务端授权文件

1、编写授权文件 kafka_server_jaas.conf,此配置定义了两个用户(admin 和 client )。代理使用 KafkaServer 部分中的属性用户名和密码来启动与其他代理的连接。在此示例中,admin 是代理间通信的用户。属性集 user_用户名定义 是连接到代理的所有用户的密码,代理验证所有客户端连接。

# 因为我这里是使用 kraft 模式启动,所以,就把服务端的配置都放在这里了
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft

# 创建文件内容如下
vim kafka_server_jaas.conf

### 末尾 分号一定不能忘记
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="admin-secret"
    user_admin="admin-secret"
    user_client="client-secret";
};

在这里插入图片描述

1.1.1.2、编写服务端启动脚本

1、复制kafka服务端启动脚本

cd /opt/kafka/kafka_2.13-3.4.1/bin/
cp kafka-server-start.sh kafka-server-start-sasl.sh

在这里插入图片描述

2、修改我们copy的启动脚本,将我们前面将要创建的配置文件(kafka_jaas.conf),给指定进去

cd /opt/kafka/kafka_2.13-3.4.1/bin
vim kafka-server-start-sasl.sh

# 将export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"修改为:
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_server_jaas.conf"

在这里插入图片描述

1.1.1.3、修改服务端 配置文件 server.properties

1、我这边是启动的 kraft 模式,所以我就修改对应的 kraft 目录下的配置文件即可

# 进入kraft/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft

# copy并编辑server.properties文件
cp server.properties  server-sasl.properties

# 修改
vim server-sasl.properties

# 修改以下内容
###
listeners=SASL_PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=SASL_PLAINTEXT
advertised.listeners=SASL_PLAINTEXT://192.168.173.129:9092
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
###

在这里插入图片描述

在这里插入图片描述

1.1.2、客户端

1.1.2.1、编写客户端授权文件
# 因为我这里是使用 kraft 模式启动,所以,就把客户端的配置都放在这里了
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft

# 创建文件内容如下
vim kafka_client_jaas.conf

### 末尾 分号一定不能忘记
KafkaClient {
  org.apache.kafka.common.security.plain.PlainLoginModule required
    username="client"
    password="client-secret";
};

在这里插入图片描述

1.1.2.2、编写消费者启动脚本
cd /opt/kafka/kafka_2.13-3.4.1/bin

# copy 并修改 
cp kafka-console-consumer.sh kafka-console-consumer-sasl.sh

# 修改,指定我们前面写的客户端配置文件
vim kafka-console-consumer-sasl.sh

# ★ 将export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"修改为:
export KAFKA_HEAP_OPTS="-Xmx512M -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_client_jaas.conf"

在这里插入图片描述

1.1.2.3、编写消费者启动脚本的配置文件 consumer.properties
# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config

# copy编辑consumer-sasl.properties内容
cp consumer.properties  consumer-sasl.properties
vim consumer-sasl.properties

###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
###

在这里插入图片描述

1.1.2.4、编写生产者启动脚本
cd /opt/kafka/kafka_2.13-3.4.1/bin

# copy 并修改 
cp kafka-console-producer.sh kafka-console-producer-sasl.sh

# 修改,指定我们前面写的客户端配置文件
vim kafka-console-producer-sasl.sh

# ★ 将export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"修改为:
export KAFKA_HEAP_OPTS="-Xmx512M  -Djava.security.auth.login.config=/opt/kafka/kafka_2.13-3.4.1/config/kraft/kafka_client_jaas.conf"

在这里插入图片描述

1.1.2.3、编写生产者启动脚本的配置文件 producer.properties
# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config

# copy编辑consumer-sasl.properties内容
cp producer.properties  producer-sasl.properties
vim producer-sasl.properties

###
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
###

在这里插入图片描述

1.1.1.5、修改通用命令脚本的配置文件

1、什么是通用命令脚本,比如说,创建topic的脚本,它链接kafka也是需要认证的,所以,我们为这一类没有指定配置的脚本,创建一个通用的

# 进入kafka/config目录
cd /opt/kafka/kafka_2.13-3.4.1/config/kraft
# 创建command_config文件
touch command_config
# 编辑command_config内容
vim command_config

###  千万注意 最后的分号 不能忘记了
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="client" password="client-secret";
###

在这里插入图片描述

1.1.3、启动

1、完成上面的配置,那么我们就可以启动了,就是正常的 kraft 模式启动流程。

1.1.3.1、生成集群 UUID
# 进入到文件夹
cd /opt/kafka/kafka_2.13-3.4.1
# 创建 集群id
KAFKA_CLUSTER_ID="$(bin/kafka-storage.sh random-uuid)"
# 查看集群id是多少
echo $KAFKA_CLUSTER_ID

在这里插入图片描述

1.1.3.2、格式化日志目录

1、使用上面的 KAFKA_CLUSTER_ID 参数,默认存储目录是/tmp/kraft-combined-logs,你可以修改配置文件的值

注意这里使用的是 config/kraft/sasl.properties, 你可以点进去看下配置,可以看到,当前的这个配置的角色是 broker,controller了,就不再需要zookeeper了.
在这里插入图片描述

cd /opt/kafka/kafka_2.13-3.4.1
bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server-sasl.properties

在这里插入图片描述

2、可以看到了 /tmp/kraft-combined-logs 文件夹也存在了

在这里插入图片描述

1.1.3.3、启动kafka 服务

1、为了方便观察启动状态,这里就直接前台启动了

记得这里一定要用我们修改过后的脚本来启动 kafka-server-start-sasl.sh,这个脚本里面指定认证文件

cd /opt/kafka/kafka_2.13-3.4.1
# 启动
bin/kafka-server-start-sasl.sh config/kraft/server-sasl.properties

# 后台启动 如下 加上 -daemon 即可
#bin/kafka-server-start-sasl.sh -daemon config/kraft/server-sasl.properties

在这里插入图片描述

1.1.4、链接测试

1.1.3.1、不使用认证的方式脚本命令行(服务端会提示无法链接)

1、我们先不使用认证授权的文件链接试一下,会发现下面这三个都是无法访问的,可以看到对应的服务端输出的日志

2、通用脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 查看当前服务器中的所有 topic
bin/kafka-topics.sh --list --bootstrap-server localhost:9092

在这里插入图片描述

3、消费者脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 消费者链接
bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning 

在这里插入图片描述

4、生产者脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 生产者链接
bin/kafka-console-producer.sh --bootstrap-server 127.0.0.1:9092 --topic test 

在这里插入图片描述

5、springBoot 项目,具体配置这里就不再细说了,链接之后,只要对kafak执行操作,就会如下错误,超时

在这里插入图片描述

在这里插入图片描述

1.1.3.2、使用认证的方式脚本命令行(链接成功)

1、通用脚本,第一开始因为这里还未创建过topic ,所以没有数据,后面可以再运行一下。

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 查看当前服务器中的所有 topic
bin/kafka-topics.sh --list --bootstrap-server localhost:9092 --command-config /opt/kafka/kafka_2.13-3.4.1/config/kraft/command_config

# 创建topic 
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --partitions 1 --replication-factor 1 --topic test  --command-config /opt/kafka/kafka_2.13-3.4.1/config/kraft/command_config

在这里插入图片描述

3、消费者脚本,执行完成后,页面会等待队列消息

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 消费者链接  --consumer.config 指定消费者配置文件
bin/kafka-console-consumer-sasl.sh --bootstrap-server 127.0.0.1:9092 --topic test --from-beginning --consumer.config config/consumer-sasl.properties

在这里插入图片描述

4、生产者脚本

# 进入目录
cd /opt/kafka/kafka_2.13-3.4.1
# 生产者链接  --producer.config  指定消费者配置文件
bin/kafka-console-producer-sasl.sh --bootstrap-server 127.0.0.1:9092 --topic test --producer.config config/producer-sasl.properties

在这里插入图片描述
此刻,消费者控制台也收到消息了

在这里插入图片描述

5、springBoot 项目,增加账号密码,如下,后面的分号一定不能忘记,加上如下配置之后就可以了

    properties:
      security:
        protocol: SASL_PLAINTEXT
      sasl:
        mechanism: PLAIN
        jaas:
          config: 'org.apache.kafka.common.security.scram.ScramLoginModule required username="client" password="client-secret";'

在这里插入图片描述

结尾

1、kafka配置个账号密码… 确实有些麻烦

参考文章:

  • Authentication using SASL/PLAIN

  • 【保姆式通关宝典】使用Kraft快速搭建Kafka集群(含服务鉴权)

  • kafka服务端设置用户和密码登录及springboot访问实现

  • Kafka配置用户名密码访问

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

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

相关文章

竞赛选题 深度学习 大数据 股票预测系统 - python lstm

文章目录 0 前言1 课题意义1.1 股票预测主流方法 2 什么是LSTM2.1 循环神经网络2.1 LSTM诞生 2 如何用LSTM做股票预测2.1 算法构建流程2.2 部分代码 3 实现效果3.1 数据3.2 预测结果项目运行展示开发环境数据获取 最后 0 前言 🔥 优质竞赛项目系列,今天…

新手请进,来看看Java if else分支结构精讲

java 支持两种选择语句:if 语句和 switch 语句。其中 if 语句使用布尔表达式或布尔值作为分支条件来进行分支控制,而 switch 语句则用于对多个整型值进行匹配,从而实现分支控制。这些语句允许你只有在程序运行时才能知道其状态的情况下&#…

Java架构师技术选型

目录 1 技术选型原则1.1 使用成熟的技术这个大家很好理解。1.2 选用最少的技术。1.3 选用能够掌控的技术。1.4 选用最合适的技术1.5 选成熟的价格低廉的商业技术或服务1.6 选主流的开源技术2 技术选型方法2.1 用户提出的对软件技术的约束2.2 团队最熟的技术栈来作为技术选型的基…

2024年pmp考试还有多久啊?怎么备考?

2024年将有4次PMP考试,分别在3月、5月、8月和11月进行。最近一次考试是3月份,虽然可能有些人觉得时间还很早,但实际备考时间要根据个人情况而定。如果你有一定的经验基础,备考一个半月左右的时间应该没有问题。但如果你是一个没有…

如何设计自动化测试框架?

一、什么是自动化测试框架 自动化测试框架是一个基于软件工程原则和最佳实践的结构化系统,可以帮助测试人员更有效地编写、维护和执行自动化测试脚本。它通常包括多个模块和组件,如测试用例管理、测试数据管理、测试脚本编写、测试报告生成等。 自动化…

【80%测试员被骗,关于jmeter 的一个弥天大谎!】

jmeter是目前大家都喜欢用的一款性能测试工具,因为它小巧、简单易上手,所以很多人都愿意用它来做接口测试或者性能测试,因此,在目前企业中,使用各个jmeter的版本都有,其中以jmeter3.x、4.x的应该居多 但是…

【Spring篇】讲解Bean的三种配置和实例化方法

🎊专栏【Spring】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🌺bean基本配置🌺bean别名配置&#x1f33a…

初创公司低预算,如何做好品牌宣传?

品牌宣传对于企业十分重要,假如企业在毫无知名度,消费者是很难选择其产品的,只有通过品牌宣传建立良好的企业形象,消费者才会对公司产品产生信赖感,但是初创公司预算低,应该如何做好品牌宣传呢,…

程序化广告平台如何让app广告变现收益最大化?

程序化广告可以解决开发者的关心的“广告变现收益增长难”、“广告质量是否会影响用户体验”等问题,想要app广告变现的收益最大化,接入程序化广告平台是必不可少的一环。 https://www.shenshiads.comhttps://www.shenshiads.com 什么是程序化广告平台&…

针对FTP的SSRF攻击

前言 ssrf中常用的协议有http,gopher等。但http协议在ssrf中的用处也仅限于访问内网页面,在可以crlf的情况下才有可能扩大攻击范围。gopher协议比较特殊,在部分环境下支持此协议,如:curl。但还有一些环境就不支持了&a…

【复古数码】轻律U1头戴式耳机,让你感受音乐的魔力!

品牌介绍 根据惯例,了解一款产品先从了解其品牌入手吧,UMELODY(Undertone Melody),中文名轻律,创始团队深耕音频行业,2009年至今,品牌将复古潮流文化结合与音频设备之中。 从复古到…

Speeded-Up Robust Features (SURF)全文翻译

Speeded-Up Robust Features (SURF) 摘要 这篇文章提出了一种尺度和旋转不变的检测子和描述子,称为SURF(Speeded-Up Robust Features)。SURF在可重复性、鉴别性和鲁棒性方面都接近甚至超过了以往的方案,同时计算和比较的速度更快。 这依赖于使…

C# excel操作

使用库 Spire.Xls 下载 示例数据 代码示例 1.删除列 代码 private static void DeleteExcelColumns1(string excelPath) {if (excelPath.Length 0) {Console.WriteLine("excel文件路径为空");}else{Console.WriteLine("删除列方法1:保留第一列&…

日报系统:优化能源行业管理与决策的利器

日报系统:优化能源行业管理与决策的利器 引言: 随着能源行业的快速发展和复杂性增加,管理各个部门的数据变得至关重要。为了提高运营效率和决策的准确性,能源行业普遍采用日报系统作为综合数据汇报和分析的工具。本文将探讨日报系…

centos7 配置coreboot编译环境 以及编译问题解决

需要的配置 (有的资源在国外可能需要翻墙) 操作系统: centos7.9 参考文章 coreboot源码分析之编译和运行coreboot - 知乎 //coreboot编译总说明 https://www.coreboot.org/Build_HOWTO#Requirements https://poe.com/ChatGPT 注意: 因为github不稳定 所以gitee为主 1. 下载…

yolov5训练加速

问题记录及解决 1、使用ddp训练,生成标签的cache报错,等待时间过长。 方法:先使用dp训练,生成标签的cache,停掉再使用ddp方式训练。 2、 [E ProcessGroupNCC L.cpp:828] [Rank 6] Watchdog caught collective operat…

VR全景技术打造“智慧亚运”,实现720度自由视角

亚运会已然闭幕,亚运盛会不仅仅是体育健儿的竞技舞台,也是新技术的展示窗口,通过5G技术打造“智慧亚运”,VR技术在亚运会上的呈现比比皆是。有人可能会觉得非常新奇,其实VR全景技术早在几年前开始融入我们的生活。 VR全…

暴力递归转动态规划(八)

棋盘问题 将棋盘最左下角当作是平面直角坐标系的原点(0,0)位置,那么这个棋盘横坐标上就是9条线,纵坐标就是10条线,给定三个参数a、b、k,返回“马”从(0,0)位置…

BUUCTF reverse3 1

先运行下 看来是输入正确的flag 使用DIE查看文件 看起来没有壳,直接IDA打开 shift F12查找字符串 一路跟踪 到汇编窗口后F5 这里对Destination和Str2进行比较,Str2有值那么Str2就是经过上面一系列处理之后得到的内容了 继续分析上面的代码 根据…

企业电子杂志如何制作与分享

企业电子杂志相比传统纸质杂志具有更多的多媒体展示方式。在制作过程中,可以添加视频、音频、动画等多媒体元素来丰富电子杂志的内容,给人以独特的阅读体验。 如何制作企业电子杂志并分享出去?推荐用FLBOOK,可以快速做出漂亮的翻…