如何为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…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
