使用Chef

时间:2016-10-04 09:37:07

标签: chef

我不清楚如何以可靠和可预测的方式与Chef最好地管理秘密。

我所尝试的是将所有秘密逻辑放在一个单独的食谱中,然后取决于它正在管理秘密的所有食谱。

那样 - 我想 - 秘密可以在一个地方以一致的方式处理。另一个好处是我不必改变现有的食谱。

这个秘密食谱从加密数据包中获取秘密,并使用它来设置密码/秘密属性。为防止将秘密上传到Chef服务器,我将所有不想上传的属性列入黑名单。

对于某些烹饪书,这会产生预期的效果,但对于其他烹饪书,结果变得非常难以预测。到目前为止,我现在确信这不是解决问题的方法。建议的方法是什么?我不想改变现有的食谱。

因此,例如,如果有像

这样的食谱
execute 'change first install root password' do
  # Add sensitive true when foodcritic #233 fixed
  command '/usr/bin/mysqladmin -u root password \'' + \
    node['mariadb']['server_root_password'] + '\''
  action :nothing
  not_if { node['mariadb']['server_root_password_2'].empty? }
end

将属性['mariadb']['server_root_password']置于秘密中并从加密数据包中检索其值的最佳方法是什么?我不想更改食谱,也不想将密码上传到服务器。

更新

我认为问题是blacklist_node_attrs中的错误导致黑名单属性在Chef运行期间不可用。

但似乎整个属性方法与秘密相结合在很大程度上未开发出来。哪个太棒了

目前的情况是,如果您想管理机密,则必须更改现有的食谱。如果您尝试在属性文件和配方文件中使用cookbook属性,您将发现结果是随机的。在某些情况下它会起作用,在其他情况下它会赢。

2 个答案:

答案 0 :(得分:2)

在节点属性中放置秘密是非常不明智的。如您所述,它们会以明文形式保存回Chef服务器。如果你不想最终得到一个非常脆弱的解决方案,那么这本食谱将不得不更新。没有通用的解决方案,虽然我正在研究一个可能在一两个月内发布的解决方案。我在coderanger.net上有很多关于这个的话,我猜你已经参与其中了(因为这个问题的标题也是我的一篇博文的标题)。在Slack或IRC上ping我(我在UTC + 11再过几天,然后将回到UTC-7)我可以尝试给你一些更适合你用例的东西。总的来说,简短的版本是这很糟糕,目前没有好的答案。

答案 1 :(得分:1)

在调查/试验加密数据包之后,不可避免地得出的结论是,Chef目前还没有真正的秘密管理解决方案。

当然有加密数据包,保险库等,但这些做法与不改变社区/现有/第三方烹饪书的做法相冲突,只是为了以安全的方式管理机密。

重点是加密数据包等要求我们对烹饪书进行更改。如果烹饪书是您自己的,但不是问题,但如果您使用社区食谱,则不建议更改这些。