如何从大厨食谱

时间:2016-05-21 06:41:31

标签: ruby chef

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

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

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

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

2 个答案:

答案 0 :(得分:1)

预先为随后的女性道歉。你能解释一下你想做什么吗?也许有更好的方法来实现它。加密数据包远非完整的安全解决方案。他们的弱点在于缺乏关键管理。

所以答案是Ruby源代码完全由它的宝石记录。加密数据包项目如下所述:

可是......

来自您提供的documentation link

  

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

     

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

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

Chef服务器的更新不是事务性的,因此从厨师客户端更新某些东西是一个非常糟糕的主意,其中可能有多个节点执行相同的操作。

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

答案 1 :(得分:0)

试试这个:

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