【发布时间】:2017-12-14 17:01:36
【问题描述】:
我们使用 Github 将所有内容保存在源代码控制中,因此我们的说明书、环境和角色在本地处理,然后在适当的情况下使用 from file 和 upload 上传。我知道加密的数据包是在服务器上加密的,但是我们如何在 Git 中保持它们的加密呢?
【问题讨论】:
标签: chef-infra
我们使用 Github 将所有内容保存在源代码控制中,因此我们的说明书、环境和角色在本地处理,然后在适当的情况下使用 from file 和 upload 上传。我知道加密的数据包是在服务器上加密的,但是我们如何在 Git 中保持它们的加密呢?
【问题讨论】:
标签: chef-infra
我们也将加密的数据包保存在我们的存储库中,并使用from file 将它们上传到 Chef Server。为了在本地处理数据包,我们编写了一些 rake 任务。他们就地加密和解密数据包 json 文件。
namespace 'databag' do
def decrypt_data_bag_item( json_file, secret_file, write=false )
secret = Chef::EncryptedDataBagItem.load_secret secret_file
raw_hash = Chef::JSONCompat.from_json IO.read json_file
result = Chef::EncryptedDataBagItem.new( raw_hash, secret ).to_hash
IO.write( json_file, Chef::JSONCompat.to_json_pretty( result ) ) if write
result
end
def encrypt_data_bag_item( json_file, secret_file )
secret = Chef::EncryptedDataBagItem.load_secret secret_file
raw_hash = Chef::JSONCompat.from_json IO.read json_file
databag_item = Chef::EncryptedDataBagItem.encrypt_data_bag_item raw_hash, secret
IO.write json_file, Chef::JSONCompat.to_json_pretty( databag_item )
end
desc 'Decrypt encrypted data bag item inplace.'
task :decrypt, [:item_file, :secret_file] do |t, args|
args.with_defaults :secret_file => ".chef/encrypted_data_bag_secret"
decrypt_data_bag_item( args.item_file, args.secret_file, true )
end
desc 'Encrypt databag item inplace.'
task :encrypt, [:item_file, :secret_file] do |t, args|
args.with_defaults :secret_file => ".chef/encrypted_data_bag_secret"
encrypt_data_bag_item( args.item_file, args.secret_file )
end
end
工作流程如下:
你也可以在这个问题中找到一些想法:Data bag encryption encrypts on Chef server, but how to encrypt local copy?
【讨论】:
"gid": { "encrypted_data": "1JGCDlZkGluVIvWpN56/4Zgk8geHaMGF57FZNvTKupL5FYj/lAbhz4DHXeK2\nTApJ\n", "iv": "VbVd91VXkjCZYN5OCGQlmA==\n", "version": 1, "cipher": "aes-256-cbc" } 所以我认为版本是“1”。
你没有。加密数据包不是为存储在版本控制中而设计的。
【讨论】: