Debezium发布历史77

原文地址: https://debezium.io/blog/2019/12/13/externalized-secrets/

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

使用 Debezium 连接器实现秘密外部化
十二月 13, 2019 作者: Jiri Pechanec
mysql 的 秘密示例
当 Debezium 连接器部署到 Kafka Connect 实例时,有时需要对 Connect API 的其他用户隐藏数据库凭据。

让我们回顾一下 MySQL Debezium 连接器的连接器注册请求:

{
“name”: “inventory-connector”,
“config”: {
“connector.class”: “io.debezium.connector.mysql.MySqlConnector”,
“tasks.max”: “1”,
“database.hostname”: “mysql”,
“database.port”: “3306”,
“database.user”: “debezium”,
“database.password”: “dbz”,
“database.server.id”: “184054”,
“database.server.name”: “dbserver1”,
“database.whitelist”: “inventory”,
“database.history.kafka.bootstrap.servers”: “kafka:9092”,
“database.history.kafka.topic”: “schema-changes.inventory”
}
}
和作为纯字符串传递给 API username。password更糟糕的是,任何有权访问 Kafka Connect 集群及其 REST API 的人都可以发出请求GET来获取连接器的配置,包括数据库凭据:

curl -s http://localhost:8083/connectors/inventory-connector | jq .
{
“name”: “inventory-connector”,
“config”: {
“connector.class”: “io.debezium.connector.mysql.MySqlConnector”,
“database.user”: “debezium”,
“database.server.id”: “184054”,
“tasks.max”: “1”,
“database.hostname”: “mysql”,
“database.password”: “dbz”,
“database.history.kafka.bootstrap.servers”: “kafka:9092”,
“database.history.kafka.topic”: “schema-changes.inventory”,
“name”: “inventory-connector”,
“database.server.name”: “dbserver1”,
“database.whitelist”: “inventory”,
“database.port”: “3306”
},
“tasks”: [
{
“connector”: “inventory-connector”,
“task”: 0
}
],
“type”: “source”
}
如果一个 Kafka Connect 集群由多个连接器/团队共享,那么出于安全原因,这种行为可能是不可取的。

为了解决这个问题,Kafka 2.0 中实现了KIP-297 (“连接配置的外部化秘密”)。

外部化期望至少有一个org.apache.kafka.common.config.provider.ConfigProvider接口的实现类。org.apache.kafka.common.config.provider.FileConfigProviderKafka Connect 提供了从文件读取机密的参考实现。可用的配置提供程序在 Kafka Connect 工作线程级别进行配置(例如在 中connect-distributed.properties),并从连接器配置中引用。

工作人员配置的一个示例如下:

config.providers=file
config.providers.file.class=org.apache.kafka.common.config.provider.FileConfigProvider
连接器注册请求将像这样引用它:

{
“name”: “inventory-connector”,
“config”: {
“connector.class”: “io.debezium.connector.mysql.MySqlConnector”,
“tasks.max”: “1”,
“database.hostname”: “mysql”,
“database.port”: “3306”,
“database.user”: “ f i l e : / s e c r e t s / m y s q l . p r o p e r t i e s : u s e r " , " d a t a b a s e . p a s s w o r d " : " {file:/secrets/mysql.properties:user}", "database.password": " file:/secrets/mysql.properties:user","database.password":"{file:/secrets/mysql.properties:password}”,
“database.server.id”: “184054”,
“database.server.name”: “dbserver1”,
“database.whitelist”: “inventory”,
“database.history.kafka.bootstrap.servers”: “kafka:9092”,
“database.history.kafka.topic”: “schema-changes.inventory”
}
}
在这里,占位符${file:/secrets/mysql.properties:user}表示应该使用文件配置提供程序,读取属性文件并从中/secrets/mysql.properties提取属性。user

文件配置提供程序可能是最简单的实现,并且可以预期将会出现与秘密存储库或身份管理系统集成的其他提供程序。应该注意的是,文件配置提供程序在 Kubernetes/OpenShift 部署中是令人满意的,因为secrets对象可以作为文件注入到集群 pod 中,从而被集群 pod 消耗。

我们创建了 Debezium教程示例的一个版本,它演示了外部化机密的部署。请注意 Docker Compose 服务中的两个环境变量connect:

  • CONNECT_CONFIG_PROVIDERS=file
  • CONNECT_CONFIG_PROVIDERS_FILE_CLASS=org.apache.kafka.common.config.provider.FileConfigProvider
    这些环境变量作为图像的功能直接映射到 Kafka Connect 工作线程属性中debezium/connect。

当您发出 REST 调用来获取连接器配置时,您将看到敏感信息已被外部化并且对未经授权的用户屏蔽:

curl -s http://localhost:8083/connectors/inventory-connector | jq .
{
“name”: “inventory-connector”,
“config”: {
“connector.class”: “io.debezium.connector.mysql.MySqlConnector”,
“database.user”: “ f i l e : / s e c r e t s / m y s q l . p r o p e r t i e s : u s e r " , " d a t a b a s e . s e r v e r . i d " : " 184054 " , " t a s k s . m a x " : " 1 " , " d a t a b a s e . h o s t n a m e " : " m y s q l " , " d a t a b a s e . p a s s w o r d " : " {file:/secrets/mysql.properties:user}", "database.server.id": "184054", "tasks.max": "1", "database.hostname": "mysql", "database.password": " file:/secrets/mysql.properties:user","database.server.id":"184054","tasks.max":"1","database.hostname":"mysql","database.password":"{file:/secrets/mysql.properties:password}”,
“database.history.kafka.bootstrap.servers”: “kafka:9092”,
“database.history.kafka.topic”: “schema-changes.inventory”,
“name”: “inventory-connector”,
“database.server.name”: “dbserver1”,
“database.whitelist”: “inventory”,
“database.port”: “3306”
},
“tasks”: [
{
“connector”: “inventory-connector”,
“task”: 0
}
],
“type”: “source”
}
请参阅教程示例的自述文件以获取完整说明。

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

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

相关文章

Docker项目部署()

1.创建文件夹tools mkdir tools 配置阿里云 Docker Yum 源 : yum install - y yum - utils device - mapper - persistent - data lvm2 yum - config - manager -- add - repo http://mirrors.aliyun.com/docker- ce/linux/centos/docker - ce.repo 更新 yum 缓存 yum makec…

【机器学习理论】2023 Spring Homework 1

Please login to Gradescope via your CUHK account and use the entry code: 6ZWGYD Problem 1 (Gaussian Distribution as an Exponential Family): We showed Gaussian distribution N ( μ , σ 2 ) \mathcal{N}\left(\mu, \sigma^{2}\right) N

军事课堂MR情景仿真实训教学

一、课堂应用场景 1、战术模拟:MR系统可以模拟各种战场环境,让学生在实际操作中了解和掌握各种战术技巧。通过模拟实战场景,学生可以在短时间内获得丰富的实战经验,提高他们的应变能力和团队协作能力。 2、武器操作训练&#xf…

Kafka-消费者-KafkaConsumer分析-PartitionAssignor

Leader消费者在收到JoinGroupResponse后,会按照其中指定的分区分配策略进行分区分配,每个分区分配策略就是一个PartitionAssignor接口的实现。图是PartitionAssignor的继承结构及其中的组件。 PartitionAssignor接口中定义了Assignment和Subscription两个…

三国游戏(寒假每日一题+贪心、枚举)

题目 小蓝正在玩一款游戏。 游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 0)。 游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分别让 X,Y,Z 增加 Ai,Bi…

什么是低代码(Low-Code)?低代码平台的适用人群

低代码平台是一种革命性的工具,它让非专业的开发人员也能轻松创建应用程序。通过直观的可视化界面和拖放功能,开发人员能够轻松地构建和部署应用程序,无需专业的编程知识。低代码平台的出现,降低了应用程序开发的门槛,…

Layout_marginTop与Layout_marginBottom详解

Layout_marginTop与Layout_marginBottom详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们深入研究Android开发中两个不可忽视的布局属性—…

100天精通鸿蒙从入门到跳槽——第8天:TypeScript 知识储备:泛型

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

【java常用接口】Comparator学习

文章目录 1. 常见的应用场景2. 基本使用3. 常见用法4. 高级用法5. 示例代码及解析 Comparator 是 Java 中的一个接口,用于定义对象之间的排序规则。它可以用于对集合中的对象进行排序,或者用于自定义排序算法。 1. 常见的应用场景 对集合中的对象进行排…

火速收藏!2024 新年微信红包封面领取全攻略

2024“龙”重登场!今年有哪些令人期待的红包封面? 前方大批精美红包封面来袭,全新品牌氛围红包封面上线,支持品牌定制特色氛围元素,沉浸感受浓浓年味儿,收获满满惊喜! 新年开好运,微…

C# .NET读取Excel文件并将数据导出到DataTable、数据库及文本

Excel文件是存储表格数据的普遍格式,因此能够高效地读取和提取信息对于我们来说至关重要。C#语言借助.NET Framework和各种库的广泛功能,能够进行高效的数据操作。利用C#读取Excel文件并将数据写入数据库和DataTable,或者将数据用于其他目的&…

终于懂了!医师资格证和医师执业证有啥区别

医师资格证和医师执业证的区别(总结篇) 1、发证单位不一样: 《医师资格证》是由国家卫生部统一发放的。 《医师执业证书》是你获得了医师资格证书后申请由当地卫生局发的。 2、意义不一样: 《医师资格证》属于医疗技术方面的认可,证明持证人具…

【Linux】信号量基于环形队列的生产消费模型

信号量 信号量的本质是一个计数器,可以用来衡量临界资源中资源数量多少 信号量的PV操作 P操作:申请信号量称为P操作,P操作的本质就是让计数器减1。 V操作:释放信号量称为V操作,V操作的本质就是让计数器加1 POSIX信号量…

[C#]winform部署官方yolov8-obb旋转框检测的onnx模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 Yolov8-obb(You Only Look Once version 8 with Oriented Bounding Boxes)是一种先进的对象检测算法,它在传统的Yolov3和Yolov4基础上进行了优化,加…

尝试着在Stable Diffusion里边使用SadTalker进行数字人制作

首先需要标明的是,我这里是图片说话类型,而且是看了知识星球AI破局俱乐部大航海数字人手册进行操作的。写下这篇文章是防止我以后遗忘。 我使用的基础软件是Stable Diffusion,SadTalker是作为插件放进来的,需要注意的是这对自己的…

RockerMQ发送消息流程

引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.1.1</version></dependency> 1. 定义RocketMQTemplateService工具类 Service public clas…

【温故而知新】HTML5 应用程序缓存

文章目录 一、HTML5二、应用程序缓存三、浏览器支持四、案例代码五、更新缓存六、热门文章 一、HTML5 HTML5是HTML的最新版本&#xff0c;它引入了许多新的元素和功能&#xff0c;以适应现代网页开发的需求。以下是HTML5的一些主要特点&#xff1a; 新增语义元素&#xff1a;…

Maven(五)如何只打包项目某个模块及其依赖模块?

目录 一、背景二、解决方案三、补充3.1 提出疑问3.2 解答 一、背景 在 SpringCloud 微服务框架下&#xff0c;会存在多个模块。当我们需要对其中某一个服务打包的时候&#xff0c;需要将该服务依赖的模块一起打包更新&#xff0c;如果项目比较小的话我们可以直接将项目中的所有…

阿里云ECS使用docker搭建mysql服务

目录 1.确保正确安装好docker 2.安装mysql镜像 3.创建容器&#xff08;设置端口映射、目录映射&#xff09; 1.确保正确安装好docker 安装教程&#xff1a; 阿里云ECS(CentOS镜像)安装docker-CSDN博客https://blog.csdn.net/qq_62262918/article/details/135686614?spm10…

【笔记】Helm-3 主题-7 使用基于OCI的注册中心

使用基于OCI的注册中心 从Helm 3开始&#xff0c;可以使用具有 OCI 支持的容器注册中心来存储和共享chart包。从Helm v3.8.0开始&#xff0c;默认启用OCI支持。 Open Container Initiative - Open Container Initiative v3.8.0版本之前对OCI的支持 OCI支持在Helm v3.8.0版本从…