如何为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种安全协议,不要与这里的认证方式混淆,安全协议是配置到监听器端口上,声明了经过端口的流量是否需要认证和加密。
回顾四种安全协议:
- PLAINTEXT => 不需要认证,非加密通道传输
- SSL => 无需认证,使用SSL加密通道
- SASL_PLAINTEXT => 使用SASL认证,非加密通道传输
- 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 配置包括以下几个主要部分:
- 登录上下文名称:
- 在上述例子中,登录上下文的名称为
KafkaClient。可以根据需要命名不同的登录上下文。
- 在上述例子中,登录上下文的名称为
- 登录模块和选项:
org.apache.kafka.common.security.plain.PlainLoginModule是 Kafka 提供的一个用于用户名密码认证的登录模块。required表示该模块是必需的,登录将失败(并且将不会尝试其他模块)如果它不成功。
- 模块特定选项:
- 在这个例子中,
username和password是PlainLoginModule的特定选项,用于指定 Kafka 集群中的用户名和密码。
- 在这个例子中,
2. 指定读取Jaas配置文件路径
Java程序通过JVM参数的指定Jaas配置文件:
KAFKA_OPTS=-Djava.security.auth.login.config==/opt/bitnami/kafka/config/kafka-server-jaas.conf
如果你是一个Java程序员,那么对于如何指定JVM参数就是小意思,即便不是Java程序员那也是小意思~
下面解释一下这段配置:
- Kafka提供了一个指定jvm参数的环境变量
KAFKA_OPTS,Kafka启动脚本会把该参数传递给Kafka程序。 -D是在命令行中指定jvm参数的前缀。java.security.auth.login.config是具体参数。/opt/bitnami/kafka/config/kafka-server-jaas.confjaas配置文件的绝对路径。==用于覆盖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数字电桥是采用自动平衡电桥原理设计的元件参数分析仪…...
格式化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.冒泡排序、简单选择排序、直接插入排序、快速排序(升序) 程序代码: 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 概述 会话:一次会话中包含多次**请求和响应** 一次会话:浏览器第一次给服务器资源发送请求,此时会话建立,直到有一方断开为止 会话的功能:在一次会话的范围内的多次请求间,共享数据 …...
rsa加密登录解决方案
1.问题 账密登录方式中用户输入密码后,把账号、密码通过http传输到后端进行校验,然而密码属于敏感信息,不能以明文传输,否则容易被拦截窃取,因此需要考虑如何安全传输密码 2.解决方案 使用rsa加密方式,r…...
Escrcpy终极指南:简单高效的Android图形化投屏完整方案
Escrcpy终极指南:简单高效的Android图形化投屏完整方案 【免费下载链接】escrcpy 📱 Display and control your Android device graphically with scrcpy. 项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy 你是否厌倦了复杂的命令行操…...
Nginx、Tengine、OpenRestry的http和tcp后端健康检查【20260520-004篇】
文章目录 企业级生产环境 Nginx/Tengine/OpenResty 健康检查 完整部署+配置+压测+故障演练+验收交付文档 一、环境基线与生产规范 1. 版本选型(生产强制) 2. 生产统一参数规范(全局通用) 3. 生产前置约束 二、三大组件 生产完整配置 2.1 开源Nginx 生产配置(仅被动检查,无…...
别再只会复制代码了!STM32F103 HAL库驱动RC522 RFID模块的底层SPI通信原理解析
深入解析STM32F103 HAL库驱动RC522的SPI通信机制 当开发者第一次接触RFID模块时,往往会被各种现成的驱动库所吸引——复制粘贴几行代码,模块就能工作,这确实很诱人。但当你遇到通信不稳定、数据错误或者需要优化性能时,仅靠"…...
淄博性价比高的别墅开发哪家强
淄博这几年改善置业需求越来越旺,不少攒了钱想换带院子的别墅,却普遍犯难:要么主城核心区的别墅单价破两万,一套下来几百万,门槛太高;要么远郊的小开发商别墅,要么产权不清、品质缩水࿰…...
别再手动忽略.git和.svn了!WinMerge过滤器保姆级配置指南(附常用正则模板)
WinMerge高效过滤指南:彻底告别版本控制与构建文件干扰 接手新项目时,你是否曾被满屏的.git、.svn和.class文件对比结果淹没?WinMerge的过滤器功能正是解决这一痛点的利器。本文将带你从零开始配置专属过滤规则,让文件对比回归核心…...
新手也能搞定的12V转5V Buck电源:手把手教你用Multisim仿真验证设计
从零开始设计12V转5V Buck电源:Multisim仿真全流程指南 第一次接触DC-DC电源设计时,面对各种参数计算和仿真验证,很多新手都会感到无从下手。本文将带你一步步完成12V转5V的Buck电源设计,从理论计算到Multisim仿真验证,…...
Oryx 2部署与运维手册:生产环境配置完全解析
Oryx 2部署与运维手册:生产环境配置完全解析 【免费下载链接】oryx Oryx 2: Lambda architecture on Apache Spark, Apache Kafka for real-time large scale machine learning 项目地址: https://gitcode.com/gh_mirrors/or/oryx 想要在生产环境中稳定运行大…...
C#上位机开发工业机器人:从零搭建第一个机器人控制程序
作为一名在工控行业摸爬滚打了十年的老工程师,我见过太多自动化工程师卡在"机器人上位机开发"这一关。很多人C#基础不错,也懂机器人原理,但就是不知道怎么把两者结合起来,写出一个能在生产环境运行的控制程序。 今天这篇文章,我会带着你从零开始,搭建一个完整…...
在微服务架构中利用 Taotoken 实现多模型 API 的动态切换与调用
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在微服务架构中利用 Taotoken 实现多模型 API 的动态切换与调用 面向后端架构师或开发负责人,当微服务系统需要集成多种…...
伊犁盛夏赴花海,霍城紫浪漫卷天山脚下
在新疆伊犁哈萨克自治州霍城县,天山北麓的缓坡地带铺展着国内规模最大的薰衣草种植区。每年夏季,这片土地被大面积的薰衣草覆盖,呈现出连绵的紫色景观。霍城与法国普罗旺斯、日本北海道富良野地处相近纬度,气候条件适宜薰衣草生长…...
