【问题标题】:Chef - How to store encrypted data bags in Git?Chef - 如何在 Git 中存储加密的数据包?
【发布时间】:2017-12-14 17:01:36
【问题描述】:

我们使用 Github 将所有内容保存在源代码控制中,因此我们的说明书、环境和角色在本地处理,然后在适当的情况下使用 from fileupload 上传。我知道加密的数据包是在服务器上加密的,但是我们如何在 Git 中保持它们的加密呢?

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    我们也将加密的数据包保存在我们的存储库中,并使用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?

    【讨论】:

    • 作为 Chef 的维护者,我们不对此安全性做出任何承诺,如果它破坏了您可以保留所有部分。
    • 值得注意的是,我认为这使用了已知不安全的版本 0 加密。
    • 看起来像这样:"gid": { "encrypted_data": "1JGCDlZkGluVIvWpN56/4Zgk8geHaMGF57FZNvTKupL5FYj/lAbhz4DHXeK2\nTApJ\n", "iv": "VbVd91VXkjCZYN5OCGQlmA==\n", "version": 1, "cipher": "aes-256-cbc" } 所以我认为版本是“1”。
    • 仍然不安全,版本 2 是第一个使用任何形式的身份验证加密的版本,而版本 3 是您应该使用的版本。
    【解决方案2】:

    你没有。加密数据包不是为存储在版本控制中而设计的。

    【讨论】:

    • 好吧...那么我将如何共享数据包?我是否应该使用厨师服务器上的远程命令在服务器上与他们一起工作,而不是在本地保存文件?
    • 加密数据包的目标只是将它们“安全”地存储在 Chef 服务器上。我们确实提供任何用于保护代码存储的系统。我建议根本不要使用它们,看看更现代的系统,比如 Hashicorp Vault 和 Keywhiz,它们有自己的存储层,或者像 ecfg 或 sops 这样的文件存储。
    • 知道了。我未来的一个项目是看看我们如何利用 Vault。
    猜你喜欢
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多