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

如何为Kafka加上账号密码(一)

Kafka认证基本概念

一直以来,我们公司内网的Kafka集群都是在裸奔,只要知道端口号,任何人都能连上集群操作一番。直到有个主题莫名消失,才引起我们的警觉,是时候该考虑为它添加一套认证策略了。
认证和授权就是一对孪生兄弟,不过本文只讨论认证,对授权感兴趣的朋友快献上赞赞,点赞越多,更新越快,哈哈。

该如何为Kafka添加认证策略呢,我们考察了Kafka支持的认证方式如下:

  • SASL/GSSAPI (Kerberos) - starting at version 0.9.0.0
  • SASL/PLAIN - starting at version 0.10.0.0
  • SASL/SCRAM-SHA-256 and SASL/SCRAM-SHA-512 - starting at version 0.10.2.0
  • SASL/OAUTHBEARER - starting at version 2.0

因为我们的集群采用的是kraft模式部署,因此无需考虑ZooKeeper的认证问题。上面四种方式分别在不同的版本引入Kafka,考量使用哪个认证方式请先确认好你们的Kafka集群版本是否支持。

我在之前的文章中提到过4种安全协议,不要与这里的认证方式混淆,安全协议是配置到监听器端口上,声明了经过端口的流量是否需要认证和加密。

回顾四种安全协议:

  1. PLAINTEXT => 不需要认证,非加密通道传输
  2. SSL => 无需认证,使用SSL加密通道
  3. SASL_PLAINTEXT => 使用SASL认证,非加密通道传输
  4. SASL_SSL => 使用SASL认证并且SSL加密通道传输

既然我们讨论认证,那么留给我们的选择只有SASL_PLAINTEXT、SASL_SSL,也就是使用SASL认证有关的协议,其次考虑是否要走加密通道。如果走加密通道性能肯定是有损耗,因此大部分情况下都会选择认证不加密的方式,那我们只能选择SASL_PLAINTEXT这种安全协议。如果对于加密通道感兴趣的朋友多,后续也发文介绍一下,不过目前我们内部没有这个需求,现在只介绍认证策略。

何为SASL?

SASL全称是简单验证和安全层 (Simple Authentication and Security Layer, SASL),是一种网络协议,正式规范可以查看RFC 2222。简单来说,它是专为解决客户端与服务端的身份认证的协议。既然SASL是协议,那么上面的GSSAPI、PLAIN、SCRAM、OAUTHBEARER就是对该协议的4种实现。

GSSAPI

要使用GSSAPI,前提是有一套Kerberos服务。Kerberos是大数据生态中身份认证的一个组件,如果你们公司有大数据相关的部门,并且已经依托Kerberos搭建了身份认证系统,那么在此基础上接入Kafka的认证。如果没有的话,不建议使用该方式认证,因为这样会增加系统运维的复杂程度。

PLAIN

PLAIN是最简单的一种认证方式,只需要在节点启动前配置好用户名和密码。缺点是要修改用户名或密码只能重启集群。

SCRAM

为了解决PLAIN修改密码需要重启的问题,0.10.2.0版本中加入了SCRAM认证方式。允许在集群启动后添加删除用户或修改用户名及密码。

OAUTHBEARER

OAuth 2是一个授权框架,通常用于第三方应用程序获得对HTTP服务的有限访问。SASL/OAUTHBEARER使得该框架可以在SASL环境下使用,这样就不局限于HTTP协议了。从Kafka文档中了解到,该认证方式目前不建议用于生产环境,因此我们就不再叙述。

经过调研,我们认为PLAIN、SCRAM比较符合我们目前的情况,后面我们就分别演示这两种认证方式的配置方法。

什么是JAAS?

SASL在配置用到了JAAS,那什么是JAAS,它有什么作用呢?

JAAS全称是Java认证和授权服务(Java Authentication and Authorization Service),因为Kafka使用Jvm系语言开发,采用Java平台的方案也是水到渠成的事情。
我们不是为Kafka开发登录插件,因此无需深入了解JAAS,只需知道jaas配置文件的格式如何使用它即可。

1. Jaas配置文件的格式

下面是一个配置文件的例子:

段名 { 
模块名1 控制标志 选项1=值1 选项2=值2; 
模块名2 控制标志 选项1=值1 选项2=值2; 
};
  • 段名:登录上下文或安全域的名称。
  • 模块名:登录模块的完全限定类名。
  • 控制标志:指定登录模块的行为。常见的控制标志包括 “required”、“requisite”、“sufficient” 和 “optional”。
  • 选项X:传递给登录模块的特定选项。

JAAS配置可以包含多个段,每个段代表不同的安全上下文或登录场景。可以在单个段中指定多个登录模块,JAAS会按照指定的顺序使用它们。

Kafka 示例:

KafkaClient { 
org.apache.kafka.common.security.plain.PlainLoginModule required username="your_kafka_username" password="your_kafka_password"; 
};

这个 JAAS 配置文件定义了一个名为 KafkaClient 的登录上下文。它使用了 Kafka 提供的 PlainLoginModule,这是一种简单的用户名密码认证方式。在这个例子中,需要提供 Kafka 集群中的有效用户名和密码。

一般来说,Kafka JAAS 配置包括以下几个主要部分:

  1. 登录上下文名称:
    • 在上述例子中,登录上下文的名称为 KafkaClient。可以根据需要命名不同的登录上下文。
  2. 登录模块和选项:
    • org.apache.kafka.common.security.plain.PlainLoginModule 是 Kafka 提供的一个用于用户名密码认证的登录模块。
    • required 表示该模块是必需的,登录将失败(并且将不会尝试其他模块)如果它不成功。
  3. 模块特定选项:
    • 在这个例子中,usernamepasswordPlainLoginModule 的特定选项,用于指定 Kafka 集群中的用户名和密码。

2. 指定读取Jaas配置文件路径

Java程序通过JVM参数的指定Jaas配置文件:

KAFKA_OPTS=-Djava.security.auth.login.config==/opt/bitnami/kafka/config/kafka-server-jaas.conf

如果你是一个Java程序员,那么对于如何指定JVM参数就是小意思,即便不是Java程序员那也是小意思~

下面解释一下这段配置:

  1. Kafka提供了一个指定jvm参数的环境变量KAFKA_OPTS,Kafka启动脚本会把该参数传递给Kafka程序。
  2. -D是在命令行中指定jvm参数的前缀。
  3. java.security.auth.login.config 是具体参数。
  4. /opt/bitnami/kafka/config/kafka-server-jaas.conf jaas配置文件的绝对路径。
  5. == 用于覆盖JVM默认的参数。

下篇文章我们采用SASL/PLAIN认证方式实战搭建Kafka集群。

相关文章:

如何为Kafka加上账号密码(一)

Kafka认证基本概念 一直以来,我们公司内网的Kafka集群都是在裸奔,只要知道端口号,任何人都能连上集群操作一番。直到有个主题莫名消失,才引起我们的警觉,是时候该考虑为它添加一套认证策略了。 认证和授权就是一对孪生…...

Elasticsearch的Index Lifecycle Management(ILM)

Elasticsearch的Index Lifecycle Management(ILM)功能提供了一种自动化管理索引生命周期的方式。ILM使得用户可以基于特定的条件(如索引的年龄、大小等)来自动执行如回滚、删除等操作,进而优化存储和提高查询性能。ILM…...

2、学习 Nacos 注册中心

学习 Nacos 注册中心 一、使用Nacos作为注册中心1、父pom.xml文件配置SpringCloudAlibaba的dependency-management依赖2、在微服务中添加Nacos客户端依赖3、配置Nacos服务地址 二、服务的分级存储模型1、配置实例的集群属性2、权重配置 三、命名空间 一、使用Nacos作为注册中心…...

Java 如何操作 nginx 服务器上的文件?

随着Java技术的不断发展,越来越多的开发人员开始使用Java来操作服务器上的文件。其中,如何操作nginx服务器上的文件也是许多Java开发人员所关注的重点之一。本文将介绍Java操作nginx服务器上文件的基本方法。 一、使用Java的File类 Java的File类可以用…...

时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-GRU-AdaBoost卷积门控循环单元结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-GRU-AdaBo…...

中创ET4410 台式LCR数字电桥 简单开箱测评

最近买了一台LCR电桥,完善一下自己实验室的设备,选了中创ET4410,这款性价比高一点。 1199元在PDD买的,好像胜利的VC4090C也是找中创代工的。 ET4410介绍 本系列LCR数字电桥是采用自动平衡电桥原理设计的元件参数分析仪&#xf…...

格式化dingo返回内容

dingo api返回的内容中添加code 和 message ,保持与异常返回的内容格式相一致。 失败会存在code 和 message ,我们只需要关注成功的情况 非分页返回,可以创建一个父类controller,通过调用sucess方法来返回 class Controller ext…...

QGIS编译(跨平台编译)之四十六:minizip编译(Windows、Linux、MacOS环境下编译)

文章目录 一、minizip介绍二、minizip下载三、Linux下编译四、MacOS下编译五、Windows下编译一、minizip介绍 Minizip 是一个用于处理 ZIP 文件的开源库,它基于 zlib 库构建。zlib 是一个广泛使用的、免费的、开源的压缩库,提供数据压缩和解压缩功能。Minizip 扩展了 zlib 的…...

MySQL进阶查询篇(1)-索引的类型与创建

MySQL数据库索引是提高查询效率的重要手段之一。索引是一种特殊的数据结构,用于快速定位数据。通过创建索引,可以大大提高查询性能,减少数据库的IO操作。 MySQL数据库支持多种不同类型的索引,常用的索引类型包括: B-…...

【STL】list模拟实现

vector模拟实现 一、接口大框架函数声明速览二、结点类的模拟实现1、构造函数 三、迭代器类的模拟实现1、迭代器类存在的意义2、迭代器类的模板参数说明3、构造函数4、运算符的重载(前置和后置)(1)前置(2)后…...

常用的文件系统、存储类型小整理

最近接触到了五花八门的文件系统、存储类型,名词听得头大,趁假期整理学习一番~ 名称OSSFastDFSJuiceFSCIFSCephFSEFSNFS全称Object Storage Service (对象存储服务)Fast Distributed File System (快速分布式文件系统)Juice File System (Juice 文件系统…...

Java写标准输出进度条

学Java这么久了,突发奇想写一个 进度条 玩玩,下面展示一下成功吧! Java代码实现如下 public class ProcessBar {public static void main(String[] args) {//进度条StringBuilder processBarnew StringBuilder();//进度条长度int total100;/…...

leetcode 算法 69.x的平方根(python版)

需求 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1&#…...

【golang】24、go get 和 go mod:indrect 与 go mod tidy

文章目录 go get 会执行如下操作: 操作 go.mod 文件(add、update、remove)下载依赖到 $GOPATH/pkg/mod 中若已安装,则更新该包,到最新版本 试验前置准备:首先删除已下载的依赖,rm -rf $GOPATH…...

AI算法工程师-非leetcode题目总结

AI算法工程师-非leetcode题目总结 除了Leetcode你还需要这些实现nms旋转矩形IOU手动实现BN手动实现CONV实现CrossEntropyLoss 除了Leetcode你还需要这些 希望大家留言,我可以进行补充。持续更新~~~ 实现nms import numpy as np def nms(dets, threshold):x1 dets…...

2.6:冒泡、简选、直插、快排,递归,宏

1.冒泡排序、简单选择排序、直接插入排序、快速排序(升序) 程序代码&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 #include<stdlib.h>4 void Bubble(int arr[],int len);5 void simple_sort(int arr[],int len);6 void insert_sort(int arr[],in…...

FastDFS安装并整合Openresty

FastDFS安装并整合Openresty 一、安装环境准备【CentOS7.9】二、FastDFS--tracker安装2.1.下载fastdfs2.2.FastDFS安装环境2.3.安装FastDFS依赖libevent库2.4.安装libfastcommon2.5.安装 libserverframe 网络框架2.6.tracker编译安装2.7.安装之后文件目录介绍2.8.错误处理2.9.配…...

93 log4j-slf4j-impl 搭配上 log4j-to-slf4j 导致的 StackOverflow

前言 呵呵 最近想要 做一个 mongo 低版本的客户端读取高版本的服务端传递过来的数据造成的一个错误的时候, 出现了这样的问题 引入了 mongo-java-driver 之后, 使用相关 api 的时候会触发 com.mongo.internal.connection.BaseCluser 的初始化, 其依赖的 Loggers 间接的依赖…...

客户端会话技术-Cookie

一、会话技术 1.1 概述 会话&#xff1a;一次会话中包含多次**请求和响应** 一次会话&#xff1a;浏览器第一次给服务器资源发送请求&#xff0c;此时会话建立&#xff0c;直到有一方断开为止 会话的功能&#xff1a;在一次会话的范围内的多次请求间&#xff0c;共享数据 …...

rsa加密登录解决方案

1.问题 账密登录方式中用户输入密码后&#xff0c;把账号、密码通过http传输到后端进行校验&#xff0c;然而密码属于敏感信息&#xff0c;不能以明文传输&#xff0c;否则容易被拦截窃取&#xff0c;因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式&#xff0c;r…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

旋量理论:刚体运动的几何描述与机器人应用

旋量理论为描述刚体在三维空间中的运动提供了强大而优雅的数学框架。与传统的欧拉角或方向余弦矩阵相比&#xff0c;旋量理论通过螺旋运动的概念统一了旋转和平移&#xff0c;在机器人学、计算机图形学和多体动力学领域具有显著优势。这种描述不仅几何直观&#xff0c;而且计算…...

Jmeter(四) - 如何在jmeter中创建网络测试计划

1.简介 如何创建基本的 测试计划来测试网站。您将创建五个用户&#xff0c;这些用户将请求发送到JMeter网站上的两个页面。另外&#xff0c;您将告诉用户两次运行测试。 因此&#xff0c;请求总数为&#xff08;5个用户&#xff09;x&#xff08;2个请求&#xff09;x&#xff…...

Server - 使用 Docker 配置 PyTorch 研发环境

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/148421901 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 建议使…...