当Debezi开云体育官方注册网址um连接器部署到Kafka Connect实例时,有时需要对Connect API的其他用户隐藏数据库凭据。开云体育电动老虎机
让我们回顾一下MySQL Debezium连接器的连接器注册请求是怎样的:开云体育官方注册网址
{"的名字":"inventory-connector","配置": {"connector.class":"io.开云体育官方注册网址debezium.connector.mysql.MySqlConnector","tasks.max":"1","开云体育电动老虎机database.hostname":"mysql","开云体育电动老虎机database.port":"3306","开云体育电动老虎机database.user":"开云体育官方注册网址","开云体育电动老虎机database.password":"dbz","开云体育电动老虎机database.server.id":"184054","开云体育电动老虎机database.server.name":"dbserver1","开云体育电动老虎机database.whitelist":"库存","开云体育电动老虎机database.history.kafka.bootstrap.servers":"卡夫卡:9092","开云体育电动老虎机database.history.kafka.topic":"schema-changes.inventory"}}
的用户名
而且密码
作为普通字符串传递给API。更糟糕的是,任何能够访问Kafka Connect集群及其REST API的人都可以发出一个得到
请求获取连接器的配置,包括数据库凭据:开云体育电动老虎机
Curl -s http://localhost:8083/connectors/inventory-connector | jq。
{"的名字":"inventory-connector","配置": {"connector.class":"io.开云体育官方注册网址debezium.connector.mysql.MySqlConnector","开云体育电动老虎机database.user":"开云体育官方注册网址","开云体育电动老虎机database.server.id":"184054","tasks.max":"1","开云体育电动老虎机database.hostname":"mysql","开云体育电动老虎机database.password":"dbz","开云体育电动老虎机database.history.kafka.bootstrap.servers":"卡夫卡:9092","开云体育电动老虎机database.history.kafka.topic":"schema-changes.inventory","的名字":"inventory-connector","开云体育电动老虎机database.server.name":"dbserver1","开云体育电动老虎机database.whitelist":"库存","开云体育电动老虎机database.port":"3306"},"任务": [{"连接器":"inventory-connector","任务":0}),"类型":"源"}
如果一个Kafka Connect集群被多个连接器/团队共享,那么出于安全原因,这种行为是不可取的。
解决问题kip - 297(“Externalizing Secrets for Connect Configurations”)在Kafka 2.0中实现。
类的至少一个实现类org.apache.kafka.common.config.provider.ConfigProvider
接口。Kafka Connect提供了参考实现org.apache.kafka.common.config.provider.FileConfigProvider
从文件中读取机密。可用的配置提供程序是在Kafka Connect工作者级别配置的connect-distributed.properties
),并从连接器配置中引用。
worker配置的一个例子是:
配置。供应商=文件config.providers.file.class = org.apache.kafka.common.config.provider.FileConfigProvider
连接器注册请求将像这样引用它:
{"的名字":"inventory-connector","配置": {"connector.class":"io.开云体育官方注册网址debezium.connector.mysql.MySqlConnector","tasks.max":"1","开云体育电动老虎机database.hostname":"mysql","开云体育电动老虎机database.port":"3306","开云体育电动老虎机database.user":"${文件:/机密/ mysql.properties:用户}","开云体育电动老虎机database.password":"${}文件:/机密/ mysql.properties:密码","开云体育电动老虎机database.server.id":"184054","开云体育电动老虎机database.server.name":"dbserver1","开云体育电动老虎机database.whitelist":"库存","开云体育电动老虎机database.history.kafka.bootstrap.servers":"卡夫卡:9092","开云体育电动老虎机database.history.kafka.topic":"schema-changes.inventory"}}
这里,占位符${文件:/机密/ mysql.properties:用户}
表示应该使用文件配置提供程序,读取属性文件/机密/ mysql.properties
然后提取用户
属性。
文件配置提供程序可能是最简单的实现,可以预期还会出现与秘密存储库或身份管理系统集成的其他提供程序。值得注意的是,文件配置提供程序在Kubernetes/OpenShift部署中是令人满意的秘密
对象可以作为文件注入到集群吊舱中,从而被它消耗。
我们创造了Debezium的一个版本开云体育官方注册网址教程的例子,它演示了外部化秘密的部署。请注意Docker Compose中的两个环境变量连接
服务:
-CONNECT_CONFIG_PROVIDERS =文件-CONNECT_CONFIG_PROVIDERS_FILE_CLASS = org.apache.kafka.common.config.provider.FileConfigProvider
这些环境变量直接映射到Kafka Connect工作者属性中,作为开云体育官方注册网址debezium /连接
的形象。
当您发出REST调用以获取连接器配置时,您将看到敏感信息被外部化并屏蔽了未经授权的用户:
Curl -s http://localhost:8083/connectors/inventory-connector | jq。
{"的名字":"inventory-connector","配置": {"connector.class":"io.开云体育官方注册网址debezium.connector.mysql.MySqlConnector","开云体育电动老虎机database.user":"${文件:/机密/ mysql.properties:用户}","开云体育电动老虎机database.server.id":"184054","tasks.max":"1","开云体育电动老虎机database.hostname":"mysql","开云体育电动老虎机database.password":"${}文件:/机密/ mysql.properties:密码","开云体育电动老虎机database.history.kafka.bootstrap.servers":"卡夫卡:9092","开云体育电动老虎机database.history.kafka.topic":"schema-changes.inventory","的名字":"inventory-connector","开云体育电动老虎机database.server.name":"dbserver1","开云体育电动老虎机database.whitelist":"库存","开云体育电动老虎机database.port":"3306"},"任务": [{"连接器":"inventory-connector","任务":0}),"类型":"源"}
详情请参阅自述教程示例的完整说明。
关于Debe开云体育官方注册网址zium
开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源下Apache许可证,版本2.0.
参与
我们希望您觉得Debezium有趣开云体育官方注册网址且有用,并愿意尝试一下。在Twitter上关注我们@开云体育官方注册网址debezium,在Zulip上和我们聊天,或加入我们的邮件列表与社区对话。所有的代码都是开源的GitHub上,因此在本地构建代码并帮助我们改进现有连接器并添加更多连接器。如果您发现了问题或对我们如何改进Debezium有想法,请告诉我们开云体育官方注册网址记录问题.