2017-07-06 33 views
0

我打算用chef-vault加密“users”数据包,并使用厨师提供的“users”cookbook。由“users”cookbook提供的“users_manage”资源接受其中一个属性为“数据包”(带有用户名,group_id和search_group属性)。 据我所知,厨师保管箱可让您在同一时间与用户cookbook(users_manage资源)的厨师保险库

vault = chef_vault_item(:mydatabbag, ‘item1’) 

理想我希望厨师保管库,提供类似的功能来解密整个库(加密databag)解密一个项目,我可以通过同样的以“ uses_manage”资源:

decrypted_data_bag = chef_vault(:mydatabbag) #Something similar 

users_manage "#{search_group}" do 
    group_id search_group 
    action [ :remove, :create ] 
    data_bag "#{decrypted_data_bag}" 
end 

由于厨师保管库不提供解密整个databag的能力,我是留下了唯一的解决办法叫‘users_manage’在一个循环,并通过各项目(如哈希)?

mydatabag.each do |myuser| 
    decrypted_user = vault = chef_vault_item(:mydatabbag, "#{myuser}") 
    users_manage "#{search_group}" do 
    group_id search_group 
    action [ :remove, :create ] 
    data_bag "#{decrypted_user}" 
    end 
end 

有没有更好的解决方案?

回答

0

data_bag属性是数据包的名称,而不是包本身。你不能使用users_manage与厨师保险库,你必须自己写一些类似的东西。

也就是说,用户对象中的任何内容首先都不应该是私人的,除非您尝试设置密码或其他内容(不这样做),所以这可能不需要。

+0

谢谢@coderanger。我需要在用户对象中存储ssh-keys和密码,因此需要加密。 –

+0

不要使用Chef来分发用户密码,查看诸如LDAP之类的东西,Chef应该为大多数用户设置的唯一密钥应该是公钥,也就是'authorized_keys'的东西,这些东西不需要保守秘密。 – coderanger

+0

+1这只是一个临时解决方案,直到我们到达LDAP。 PS:似乎PR已经打开相同:https://github.com/chef-cookbooks/users/pull/91 –