可使用sensitive属性执行多行BASH代码的Chef资源及敏感输出屏蔽咨询
关于Chef中敏感BASH代码执行的问题解答
1. 支持sensitive属性执行多行BASH代码的Chef资源
你有两个适配性很强的选择:
bash资源:这是Chef专门为BASH脚本执行设计的资源,属于script资源家族成员,天生支持sensitive属性,对多行BASH代码的兼容性最好,语法处理也更贴合BASH特性。execute资源:作为通用命令执行资源,它也支持sensitive属性,并且可以通过HEREDOC语法传入多行BASH代码,适合需要灵活调用命令的场景。
给你举个贴合你MySQL用户创建场景的bash资源示例:
bash 'create_secured_mysql_user' do sensitive true # 开启敏感模式,压制所有敏感输出 code <<-EOH # 这里可以编写任意多行BASH逻辑 mysql -u root -p"#{encrypted_data_bag_item['root_pass']}" <<MYSQL_SCRIPT CREATE USER '#{node['mysql']['app_user']}'@'%' IDENTIFIED BY '#{encrypted_data_bag_item['app_pass']}'; GRANT ALL PRIVILEGES ON app_db.* TO '#{node['mysql']['app_user']}'@'%'; FLUSH PRIVILEGES; MYSQL_SCRIPT EOH end
2. 避免敏感数据输出的完整解决方案
针对你提到的模板和BASH代码都包含敏感数据的场景,需要从两个维度处理:
- BASH代码/命令执行层面:不管用
bash还是execute资源,一定要设置sensitive true。开启后Chef Client会完全屏蔽该资源的所有输出内容,包括命令本身和敏感变量(比如MySQL密码),只会在日志中显示「敏感资源输出已被抑制」的提示。 - 模板文件处理层面:如果你的模板(比如MySQL配置文件)包含敏感数据,同样要给
template资源加上sensitive true属性,防止Chef在日志中输出模板的原始内容或渲染后的敏感配置。示例:
template '/etc/mysql/conf.d/app_user.cnf' do source 'mysql_user.cnf.erb' owner 'root' group 'root' mode '0600' sensitive true # 保护模板中的敏感配置信息 variables( db_password: encrypted_data_bag_item['app_pass'] ) end
额外提醒:如果你手动执行的MySQL加固命令是通过Chef配方调用的,也要套在bash或execute资源里并开启sensitive模式,确保命令行中的敏感参数不会被记录到Chef日志中。
内容的提问来源于stack exchange,提问作者hobbes
相关产品推荐
相关产品推荐

