chef-infra - 我可以使用 Chef 的 sensitive 属性执行多行 BASH 代码的哪个 Chef 资源?
问题描述
在运行带有模板的 BASH 代码和可能包含敏感数据变量的食谱时,我想防止向厨师客户端输出任何输出。
就我而言,我正在自动化创建的 MySQL 用户,该用户从加密的数据包中获取一个变量,以及手动保护/强化 MySQL 安装(通过命令行)。当我运行 chef-client 时,它会向用户显示变量输出,包括 MySQL 密码。
'execute' 允许敏感属性,但此问题涉及多次使用变量的 bash 脚本,而不仅仅是单行。我可以使用与符号“&&”的延续来做到这一点,但是脚本越长,这看起来就越混乱。
'script' 和 'bash' 不允许将 'sensitive' 用作属性,并返回 'uninitialized constant' 错误。这种很糟糕,因为这将是一个很棒的功能。
关于如何将脚本变量隐藏在厨师客户端输出中的想法?
dbag = data_bag_item('pass', 'mysql')
db_pass = dbag["mysqlpass"]
bash 'install_mysql' do
sensitive True
code <<-EOC
systemctl start mysqld.service && systemctl enable mysqld.service
mysqladmin -u root password #{db_pass}
# automate secure mysql install
mysql -u root -p#{db_pass} -e "UPDATE mysql.user SET Password=PASSWORD('#{db_pass}') WHERE User='root'"
mysql -u root -p#{db_pass} -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
mysql -u root -p#{db_pass} -e "DELETE FROM mysql.user WHERE User=''"
mysql -u root -p#{db_pass} -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
mysql -u root -p#{db_pass} -e "FLUSH PRIVILEGES"
# create mysql user, and pass
mysql -e "CREATE DATABASE mysqldb;" -u root -p#{db_pass}
mysql -e "GRANT ALL PRIVILEGES ON mysqldb.* TO "mysqluser"@"localhost" IDENTIFIED BY '#{db_pass}';" -u root -p#{db_pass}
mysql -e 'FLUSH PRIVILEGES;' -u root -p#{db_pass}
EOC
end
我也试过:
script 'install_mysql' do
sensitive True
...
end
和
cookbook_file '/tmp/install_mysql.sh'
source install_mysql.sh
...
end
execute 'install_mysql' do
sensitive True
command "/tmp/install_mysql.sh"
end
解决方案
在评论中回答,在 Rubytrue
中false
是小写的。UsingTrue
使 Ruby 尝试查找不存在的 const。
推荐阅读
- c - 扩展的 ASCII 字符在 int 10h 中不起作用
- android - onItemClick() 接收布局而不是 TextView
- intellij-idea - 错误 C:\...\.sbt\0.13\plugins\idea.sbt:1: 非法字符 '\u0000
- android - ExoPlayer 无法播放某些音频流
- prolog - Prolog中的二叉搜索树
- sql - 显示具有相同 MGR 的员工的 DNAME、LOC、DEPTNO 仅使用 JOINS
- acumatica - 如何以编程方式将 Acumatica 报告的 PDF 版本的多页保存到文件中?
- angular - 在 Angular 应用程序的 ngb-datepicker (ng Bootstrap) 中获取选定日期的“日”
- macos - 确定哪个应用程序正在从 Mac OS 过滤器方案驱动程序中读取或写入数据
- node.js - 列出租户中的用户