kafka的ACL配置的sasl.kerberos.principal.to.local.rules配置解释
kafka配置acl认证的用户名转换规则
- 1、Kerberos中的介绍
- 2、自定义sasl user name
- 3、自定义ssl 的用户名
- 4、关于kafka配置kerberos以及开启acl的实践
1、Kerberos中的介绍
Kerberos 关于此配置项的解释
https://web.mit.edu/Kerberos/krb5-latest/doc/admin/conf_files/krb5_conf.html 中的 auth_to_local
2、自定义sasl user name
https://kafka.apache.org/documentation/#security_authz
规则模板:
RULE:[n:string](regexp)s/pattern/replacement/g/L
官网规则示例:
sasl.kerberos.principal.to.local.rules=RULE:[1:$1@$0](.*@MYDOMAIN.COM)s/@.*//,DEFAULT
详见kafka的源码 org.apache.kafka.common.security.kerberos.KerberosRule#apply
String apply(String[] params) throws IOException {String result = null;if (isDefault) {if (defaultRealm.equals(params[0])) {result = params[1];}} else if (params.length - 1 == numOfComponents) {String base = replaceParameters(format, params);if (match == null || match.matcher(base).matches()) {if (fromPattern == null) {result = base;} else {result = replaceSubstitution(base, fromPattern, toPattern, repeat);}}}if (result != null && NON_SIMPLE_PATTERN.matcher(result).find()) {throw new NoMatchingRule("Non-simple name " + result + " after auth_to_local rule " + this);}if (toLowerCase && result != null) {result = result.toLowerCase(Locale.ENGLISH);} else if (toUpperCase && result != null) {result = result.toUpperCase(Locale.ENGLISH);}return result;
}
传入参数为:
if (kerberosName.hostName() == null) {// if it is already simple, just return itif (kerberosName.realm() == null)return kerberosName.serviceName();params = new String[]{kerberosName.realm(), kerberosName.serviceName()};
} else {params = new String[]{kerberosName.realm(), kerberosName.serviceName(), kerberosName.hostName()};
}
其中realm为域名,serviceName为用户名,hostName为主机名
通过源码可以看到其中的$0 $1 $2 并不是后面regexp正则匹配后的反引用,而是配置的 Kerberos 主体(principal)
整个规则理解为将 Kerberos 主体(principal)映射到本地用户名(local principal)的转换规则
其中解释顺序为:
- 组装string
- 验证组装的string是否匹配regexp
- 将组装的string进行正则替换,将pattern替换为replacement,根据是否配置/g确定是替换1次还是替换所有
- 将最终结果转换为大写或者小写
综上,regexp仅用于了开始组装结果的校验,并没有进行值的提取(建立引用)
示例结果
servicename=tkgup
realm=qq.com
经过RULE:[1:$1@$0](.*@qq.com)s/@.*//后,得到string为tkgup@qq.com,验证符合regexp,再经过后面正则查找替换得到:tkgup
3、自定义ssl 的用户名
规则模板:
RULE:pattern/replacement/[LU]
规则示例:
RULE:^.*[Cc][Nn]=([a-zA-Z0-9.]*).*$/$1/L,DEFAULT
具体解析见:
org.apache.kafka.common.security.ssl.SslPrincipalMapper.Rule#apply
解释顺序为:
- 将distinguishedName:principal.getName()正则pattern替换为replacement,会解析反引用,如$1、$2
- 将最终结果转换为大写或者小写
在此规则下:
tkgup.cn=tkgup666@qq.com => tkgup666
4、关于kafka配置kerberos以及开启acl的实践
参考:Kafka配置Kerberos安全认证及与Java程序集成
参考:kafka 配置kerberos校验以及开启acl实践 https://cloud.tencent.com/developer/article/1593946
参考:Kafka配置kerberos安全认证
相关文章:
kafka的ACL配置的sasl.kerberos.principal.to.local.rules配置解释
kafka配置acl认证的用户名转换规则 1、Kerberos中的介绍2、自定义sasl user name3、自定义ssl 的用户名4、关于kafka配置kerberos以及开启acl的实践 1、Kerberos中的介绍 Kerberos 关于此配置项的解释 https://web.mit.edu/Kerberos/krb5-latest/doc/admin/conf_files/krb5_co…...
山东大学软件学院nosql实验三
实验题目: 用Java做简单查询(2学时) 实验内容 用API方式,做简单查询。 实验要求 在以下要求中选择至少2个,使用Java语言实现数据查询,最终把数据输出到前端界面。 (1)找出年龄小于20岁的所有学生 &…...
Feign 类型转换问题解析:如何正确处理 `ResponseEntity<byte[]>` 返回值
在微服务架构中,Feign 是一种常见的用于服务间调用的客户端,它允许我们通过声明式接口来调用远程服务。使用 Feign 时,我们通常通过接口方法的返回类型来接收服务的响应体。然而,某些情况下,我们会遇到 Feign 无法正确解析响应体类型的问题,尤其是当服务返回一个如 Respo…...
零样本学习 zero-shot
1 是什么 2 如何利用零样本学习进行跨模态迁移? demo代码 安装clip pip install ftfy regex tqdm pip install githttps://github.com/openai/CLIP.git import torch import clip from PIL import Image# 加载 CLIP 模型 device "cuda" if torch.cuda.i…...
《深度学习实战》第3集:循环神经网络(RNN)与序列建模
第3集:循环神经网络(RNN)与序列建模 引言 在深度学习领域,处理序列数据(如文本、语音、时间序列等)是一个重要的研究方向。传统的全连接网络和卷积神经网络(CNN)难以直接捕捉序列中…...
mac下载MAMP6.8.1
因为mac的小皮面板没有php7.4了 链接:c9cc270e6961c17c.dmg官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 鹅选一 附上大佬写的教程:MAMP PRO教程 - 牛奔 - 博客园...
动态表头导出EasyExcel
在 Spring Boot 中结合 EasyExcel 实现动态表头导出(无实体类,表头和字段(前端传表名,字段值动态查询,返回List<Map<String,Object>>)由前端传递)可以通过以下步骤实现。以下是完整…...
Python常见面试题的详解16
1. 如何强行关闭客户端和服务器之间的连接? 在网络编程中,有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接,由于其面向连接的特性,需要采取特定的步骤来确保连接被正确关闭;而 UDP 是无连接协议&a…...
BUU41 [GYCTF2020]FlaskApp1【SSTI】
题目: 加密处没啥事,但是解密的地方提交{{7*7}}就会返回报错界面,顺便把代码也爆出来了 text_decode base64.b64decode(text.encode()) 先将字符串 text编码为字节对象,然后使用 base64.b64decode 函数对这个字节对象进行 Base…...
今日运维之-Mac笔记本python环境问题
1. 问题:MAC升级系统后git报错? Error: Cant create update lock in /usr/local/var/homebrew/locks! Fix permissions by running:sudo chown -R $(whoami) /usr/local/var/homebrew Traceback (most recent call last):11: from /usr/local/Homebrew/…...
Vue进阶之AI智能助手项目(五)——ChatGPT的调用和开发
AI智能助手项目 前端页面Layout布局页面-viewssrc/views/chat/layout/Permission.vuesrc/views/chat/layout/sider/index.vuesrc/views/chat/layout/sider/List.vuesrc/views/chat/layout/sider/Footer.vueComponents 组件Header/index.vueMessage/index.vue前端页面 Layout布…...
PYTHONPATH
PYTHONPATH是一个环境变量,用于告诉Python解释器在哪里查找模块和包。它是一个目录的搜索路径,用于导入Python代码。 PYTHONPATH的作用 导入自定义模块:如果您有自己的Python模块,可以将它们添加到PYTHONPATH中&#…...
运维Ansible面试题及参考答案
目录 简述 Ansible 的工作原理,它是如何实现对远程主机管理的? Ansible 是基于什么语言开发的?这门语言的特性对 Ansible 的功能实现有哪些帮助? 解释 Agentless 在 Ansible 中的含义,与基于 Agent 的自动化工具相比,优势体现在哪? Ansible 中的 Inventory 文件是什…...
01.Zabbix 概述
Zabbix 概述 Zabbix 概述1. Zabbix 功能2. Zabbix 架构3. Zabbix Server 启动进程4. Zabbix 术语 Zabbix 概述 运维行业有句话: “无监控、不运维”,监控俗称“第三只眼”。没了监控,基础运维,业务运维都是“瞎子”。 所以说监控是运维这个职…...
MongoDB 数据库简介
MongoDB 数据库简介 引言 随着互联网技术的飞速发展,数据已经成为企业的重要资产。为了高效地管理和处理这些数据,数据库技术应运而生。MongoDB作为一种流行的NoSQL数据库,因其灵活的数据模型和高效的数据处理能力,受到了广泛的关注。本文将为您详细介绍MongoDB的基本概念…...
易基因:RNA甲基化修饰和R-loop的交叉调控:从分子机制到临床意义|深度综述
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 R-loop(RNA-DNA杂合结构)是转录调控、DNA复制和修复等关键细胞过程的重要组成部分。但R-loop异常积累可能会破坏基因组完整性,从而导致多种疾病的发生…...
八、Spring Boot:RESTful API 应用
创建第一个 Spring Boot RESTful API 应用 在现代 Web 开发中,RESTful API 是一种非常流行的设计风格,它基于 HTTP 协议,提供了简单、灵活的方式来构建网络应用。Spring Boot 作为一款强大的微服务框架,提供了丰富的工具和支持&a…...
NLP的预处理数据
处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字,然后转换为张量,成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型,重要的是使用与之关联的…...
取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票
在做航班智能客服问答系统时会遇到取消票证的场景,这里涉及数据库的操作时会把指定的票证从数据库中删除,同时也会把票证和航班等相关表中的关联关系一起删除。但在删除之前,需要先检查当前用户是否拥有这张票,只有票主才有权限取…...
Linux相关知识(文件系统、目录树、权限管理)和Shell相关知识(字符串、数组)
仅供自学,请去支持javaGuide原版书籍。 1.Linux 1.1.概述 Linux是一种类Unix系统。 严格来讲,Linux 这个词本身只表示 Linux内核,单独的 Linux 内核并不能成为一个可以正常工作的操作系统。所以,就有了各种 Linux 发行版&#…...
7种内外网数据交换方案全解析 哪种安全、高效、合规?
内外网数据交换方案主要解决了企业跨网络数据传输中的安全、效率与合规性问题。通过采用先进的加密技术、高效的数据传输协议以及严格的审批和审计机制,该方案确保了数据在内外网之间的安全交换,同时提高了传输效率,并满足了企业对数据合规性…...
深入解析React useEffect与useLayoutEffect:区别、原理与实践
🌌 深入解析React useEffect与useLayoutEffect:区别、原理与实践 在React函数组件中,useEffect和useLayoutEffect是处理副作用的两个核心Hook。它们看似相似,但在执行时机和应用场景上有本质区别。本文将通过原理剖析、对…...
VMware中的linux常用指令
常用 Linux 基础命令 文件与目录操作 ls:查看当前目录的文件和子目录,ls -a显示所有文件,包括隐藏文件。cd:切换目录,如 **cd ~** 切换到个人家目录。pwd:查看当前目录。mkdir:创建文件夹&#…...
基于 Python 的项目管理系统开发
基于 Python 的项目管理系统开发 一、引言 在当今快节奏的工作环境中,有效的项目管理对于项目的成功至关重要。借助信息技术手段开发项目管理系统,能够显著提升项目管理的效率和质量。Python 作为一种功能强大、易于学习且具有丰富库支持的编程语言&…...
【论文学习】DeepSeek-R1 总结
文章目录 Abstract1. Introduction2. Approach2.1. Overview2.2. DeepSeek-R1-Zero: Reinforcement Learning on the Base Model2.3. DeepSeek-R1: Reinforcement Learning with Cold Start2.4. Distillation: Empower Small Models with Reasoning Capability 3. Experiment3.…...
在linux中利用conda安装blast
在 Linux 中使用 conda 安装 BLAST 非常简单。conda 是一个流行的包管理工具,可以轻松安装和管理生物信息学工具,包括 BLAST。以下是具体步骤: 1. 确保已安装 Conda 如果你还没有安装 conda,可以参考以下步骤安装 Miniconda&…...
Siddon算法参数说明及通俗解释
Siddon算法是一种用于快速精确计算三维CT数组中射线路径的算法。以下是该算法中每个参数的含义说明以及整个过程的通俗解释。 一、参数说明 参数含义X1,Y1,Z1射线的起点坐标。X2,Y2,Z2射线的终点坐标。X(a), Y(a), Z(a)射线的参数化表示,其中a是参数&…...
在 Windows 下的 Docker 中安装 R语言
以下是在 Windows 系统的 Docker 中安装 R 语言的详细教程,包括 Docker 的安装、配置以及如何在容器中运行 R 语言的步骤。 步骤 1:安装 Docker 下载 Docker Desktop 访问 Docker 官方网站:Docker Desktop: The #1 Containerization Tool for…...
电子科技大学考研复习经验分享
电子科技大学考研复习经验分享 本人情况:本科就读于电科软院,24年2月开始了解考研,24年3月开始数学,9月决定考本院(开始全天候图书馆学习)并开始专业课学习,11月底开始政治学习,最后…...
python 引用父目录:层级的模块
from pathlib import Path import sys 获取 project 目录 project_dir Path(file).resolve().parent.parent 将 project 目录添加到 sys.path 中 sys.path.append(str(project_dir)) 导入 support 模块 import support support.print_func(“Runoob”)...
