数据包加密在Chef服务器上加密,但如何加密本地副本?

Moj*_*ojo 11 chef-infra

我在私有git存储库中有一组完整的Chef配置角色,cookbook,databags等.

我看到我可以使用--secret-file选项在数据库上传到Chef服务器时对其进行加密.

但我想存储在git存储库中加密的数据库.

我唯一想到的是在本地制作一个纯文本json文件,将其上传到带有加密的Chef,然后从Chef网页获取加密的JSON并将其粘贴到我的存储库副本中.

还有其他人解决了这个问题吗?

Dra*_*ter 15

我的主厨工作目录中有以下bash(称为encrypted-databag.sh):

#!/bin/bash -e

knife data bag $1 $2 $3 --secret-file ~/.chef/encrypted_data_bag_secret
if [ "$1" == "edit" ] ; then
    knife data bag show $2 $3 -Fj > "./data_bags/$2/$3.json"
fi
Run Code Online (Sandbox Code Playgroud)

每次我用刀给我看加密数据包时,它都会节省我的打字.当我编辑它时,它会自动更新/保存到存储库中.

更新于30.08.2013

上述脚本的缺点是您可以直接在chef-server上编辑数据包.但是当你还在处理一些食谱并且没有上传它时会出现问题,但数据包已经存在并且被旧版本的食谱使用.这样,当chef-client在某个节点上运行时,可能会导致一些错误.

所以我考虑在本地编辑加密数据包,没有厨师服务器,然后将新版本的菜单与新版本的cookbook一起上传(测试通过后).所以这是我现在用来编辑加密数据包的rake任务.

namespace 'databag' do
  desc 'Edit encrypted databag item.'
  task :edit, [:databag, :item, :secret_file] do |t, args|
    args.with_defaults :secret_file => "#{ENV['HOME']}/.chef/encrypted_data_bag_secret"
    secret = Chef::EncryptedDataBagItem.load_secret args.secret_file
    item_file = "data_bags/#{args.databag}/#{args.item}.json"
    tmp_item_file = "/tmp/#{args.databag}_#{args.item}.json"
    begin
      #decrypt data bag into tmp file
      raw_hash = Chef::JSONCompat.from_json IO.read item_file
      databag_item = Chef::EncryptedDataBagItem.new raw_hash, secret
      IO.write tmp_item_file, Chef::JSONCompat.to_json_pretty( databag_item.to_hash )
      #edit tmp file
      sh "#{ENV['EDITOR']} #{tmp_item_file}"
      #encrypt tmp file data bag into original file
      raw_hash = Chef::JSONCompat.from_json IO.read tmp_item_file
      databag_item = Chef::EncryptedDataBagItem.encrypt_data_bag_item raw_hash, secret
      IO.write item_file, Chef::JSONCompat.to_json_pretty( databag_item )
    ensure
      ::File.delete tmp_item_file #ensure tmp file deleted.
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

现在编辑我使用的加密数据包:

rake databag:edit[my_databag,item_in_databag]
Run Code Online (Sandbox Code Playgroud)