使用io.confluent的kafka-schema-registry-maven-plugin时如何加密userInfoConfig参数
方案1:复用Maven原生加密体系,配合properties-maven-plugin主动读取解密凭证
你可以继续沿用Maven官方的密码加密规则,把Schema Registry的账号和加密后的密码存在settings.xml的servers节点下,通过properties-maven-plugin在构建初始化阶段读取该节点的账号密码,Maven会自动完成解密,之后拼接成userInfoConfig要求的用户名:密码格式传给Confluent插件即可。
示例配置如下:
首先在pom.xml中添加properties-maven-plugin配置:<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.2.1</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>read-project-properties</goal> </goals> <configuration> <servers> <server> <!-- 和settings.xml中server节点的id对应 --> <id>schema-registry</id> <usernameProperty>schema.reg.username</usernameProperty> <passwordProperty>schema.reg.password</passwordProperty> </server> </servers> </configuration> </execution> </executions> </plugin>再修改Confluent插件的
userInfoConfig配置:<userInfoConfig>${schema.reg.username}:${schema.reg.password}</userInfoConfig>该方案完全复用Maven现有加密能力,无需修改插件逻辑,也不会出现明文凭证泄露问题。
方案2:环境变量注入凭证
把Schema Registry的账号密码存储在本地环境变量,或者CI/CD平台的保密变量中,pom.xml直接读取环境变量值即可:<userInfoConfig>${env.SCHEMA_REG_USER}:${env.SCHEMA_REG_PWD}</userInfoConfig>本地开发时可以在终端配置文件(.bashrc/.zshrc等)中添加对应环境变量,也可以在IDE的运行配置中单独配置,CI环境直接配置平台提供的保密变量,全程不会有明文出现在代码仓库中。
方案3:本地忽略文件存储凭证
在项目根目录创建local-maven.properties文件,将其加入.gitignore,文件内存储明文凭证:schema.reg.user=你的账号 schema.reg.pwd=你的密码之后用
properties-maven-plugin读取该文件的属性,注入到Confluent插件的配置中即可,适合团队本地开发统一配置,避免凭证提交到代码仓库。方案4:自定义扩展插件
如果以上方案都不符合使用要求,可以fork官方kafka-schema-registry-maven-plugin的源码,参考sql-maven-plugin的实现逻辑新增settingsKey参数支持,读取settings.xml的server节点完成解密后拼接userInfoConfig,自行打包使用即可,也可以提交PR到官方仓库合并功能。
内容的提问来源于stack exchange,提问作者creationk

