【问题标题】:how to create\edit encrypted data bag item from a chef recipe如何从厨师食谱创建\编辑加密数据包项目
【发布时间】:2016-09-18 11:46:39
【问题描述】:

动机:节点会尝试从数据包中获取一个key,如果key不存在则生成一个。当您扩展集群并且必须为其共享密码时,这很方便。

请注意,不会同时创建任何节点,因此将避免竞争条件。

厨师文档中有一部分与配方中的create and edit 数据包项相关,但没有与创建新的加密数据包项相关的内容。

任何人都可以阐明如何做到这一点吗?

【问题讨论】:

    标签: ruby chef-infra


    【解决方案1】:

    为接下来的召唤提前道歉。你能解释一下你想要做什么吗?也许有更好的方法来完成它。加密数据包远非完整的安全解决方案。他们的弱点在于缺乏密钥管理。

    所以答案是 Ruby 源代码完全由它的 gem 记录。此处描述了加密的数据包项:

    但是……

    来自您提供的documentation link

    创建和编辑数据包或数据包项的内容 不推荐从食谱中。推荐的更新方法 数据包或数据包项是使用刀数据包 子命令。

    如果必须从食谱中执行此操作,请注意 以下:

    • 如果两个操作同时尝试更新数据包的内容,最后一次写入的尝试将是更新数据包的操作 数据包的内容。这种情况会导致数据丢失,所以 组织应采取措施确保只有一名厨师客户 一次更新数据包。
    • 在使用开源 Chef 服务器时更改节点中的数据包需要授予节点的 API 客户端管理员权限。 在大多数情况下,这是不可取的。

    对 Chef 服务器的更新不是事务性的,因此从 Chef 客户端更新某些内容是一个非常糟糕的主意,因为可能会有多个节点执行相同的操作。

    第二个警告是关于特权...再次建议您以最少的超能力操作您的厨师客户。为厨师管理员或在厨师工作站上运行的脚本保留这些。

    【讨论】:

    • 我很熟悉这个建议,无论如何它对我来说很有帮助。由于您的评论,我已经更新了我的帖子。谢谢,
    【解决方案2】:

    试试这个:

    secret = Chef::EncryptedDataBagItem.load_secret(Chef::Config[:encrypted_data_bag_secret])
    data = { "id" => "mysecret", "secret" => "stuff" }
    encrypted_data_hash = Chef::EncryptedDataBagItem.encrypt_data_bag_item(data, secret)
    
    databag_item = Chef::DataBagItem.new
    databag_item.data_bag("secrets")
    databag_item.raw_data = encrypted_data_hash
    databag_item.save
    

    另见Chef Decryption of Data Bags and Retrieval of Key

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多