如何在不覆盖MySQL模块配置文件的前提下用Hiera eyaml加密密码
实现加密MySQL用户密码且不修改模块自带Hiera文件的方法
核心原理
Puppet Hiera的查找优先级是环境级数据 > 模块级数据,直接在生产环境的data目录下定义加密变量,即可覆盖模块默认配置,无需修改MySQL模块自带的hiera.yaml和common.yaml。
步骤1:加密目标用户的密码
使用eyaml命令加密需要设置的MySQL用户密码(以创建dbuser@localhost为例):
eyaml encrypt -l 'mysql::server::users::dbuser@localhost::password' -s 'your_dbuser_password'
执行后会生成类似ENC[PKCS7,...==]格式的密文,复制保存该密文。
步骤2:在生产环境的data文件中添加加密用户配置
编辑生产环境的common.yaml(路径:/etc/puppetlabs/code/environments/production/data/common.yaml),添加MySQL用户的加密密码及相关配置,示例如下:
--- # 已有的root密码配置 mysql::server::root_password: > ENC[PKCS7,...==] # 新增加密的用户配置(按MySQL模块参数格式定义) mysql::server::users: dbuser@localhost: password: > ENC[PKCS7,...==] # 这里粘贴步骤1生成的密文 ensure: present privileges: 'mydb.*': 'ALL' # 按需配置用户权限
如果需要针对特定节点配置,可将上述内容写入对应节点的yaml文件(nodes/%{::trusted.certname}.yaml),优先级会高于common.yaml。
步骤3:验证配置生效
在Puppet Agent主机上执行:
puppet agent -t
执行完成后,登录MySQL验证用户是否创建成功,且密码为解密后的明文密码:
mysql -u root -p SELECT user, host FROM mysql.user;
内容的提问来源于stack exchange,提问作者Confounder
相关产品推荐
相关产品推荐

