原文地址: 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”
}
请参阅教程示例的自述文件以获取完整说明。
猜你喜欢
- 14天前(鄂尔多斯航空公司客服电话)架起“北方之路” ,中国联合航空带您飞向鄂尔多斯重回1倍速
- 14天前(郭富城热舞劲歌演唱会)郭富城年度压轴《新濠尊属系列郭富城梦幻舞林演唱会2023》
- 14天前(东北地区全域旅游)东北三省一区宣传贯彻研学旅游行业标准
- 14天前(2025年“文化和自然遗产日”广东主会场活动举办)2025年“文化和自然遗产日”广东主会场活动举办
- 14天前(071 圣安东尼奥)秋季 圣安东尼奥交出了私藏活动清单
- 14天前(当科学邂逅喜剧:科技馆喜剧嘉年华背后的"文旅破壁者")当科学邂逅喜剧:科技馆喜剧嘉年华背后的"文旅破壁者"
- 14天前(夏日纵享 邂逅双面姑苏是哪一集)夏日纵享 邂逅双面姑苏
- 14天前(“三天跨两城”催生租车新需求,神州租车清明跨城订单同比增长416%)“三天跨两城”催生租车新需求,神州租车清明跨城订单同比增长416%
- 14天前(冬日生活还没安排?上抖音一键打包北方花式过冬精彩)冬日生活还没安排?上抖音一键打包北方花式过冬精彩
- 14天前(阿斯塔纳航空属于哪个联盟)阿斯塔纳航空荣获Skytrax世界航空公司大奖,将继续助力中哈交流往来
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章