【问题标题】:Managing secrets with Chef与 Chef 一起管理机密
【发布时间】:2016-10-04 09:37:06
【问题描述】:

我不清楚如何通过 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 运行期间列入黑名单的属性不可用。

但是,在 Chef 中,与秘密相结合的整个属性方法似乎在很大程度上是未开发的。这是惊人的。

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

【问题讨论】:

    标签: chef-infra


    【解决方案1】:

    容我们说,将秘密放在节点属性中是非常不明智的。正如您所指出的,它们以明文形式保存到 Chef Server。如果您不想最终得到一个非常脆弱的解决方案,则必须更新该食谱。没有通用的解决方案,尽管我正在研究一个可能会在一两个月内发布的解决方案。我在 coderanger.net 上对此有很多话,我猜你已经遇到过(因为这个问题的标题也是我的一篇博客文章的标题)。在 Slack 或 IRC 上联系我(我在 UTC+11 再待几天,然后将在 UTC-7 回来),我可以尝试为您提供更适合您的用例的东西。总的来说,简短的版本是这一切都很糟糕,目前没有好的答案。

    【讨论】:

    • 这是我认为coderanger.net/chef-secrets 的帖子。这是对我的问题的明确彻底的回答。
    • 还可以查看那里链接的谈话,它在几年前更新,并且更深入地介绍了选项。我最近有另一篇关于使用 hashcorp vault with chef 的帖子,但现在这只是一个建议。继续关注?
    【解决方案2】:

    在对加密数据包进行调查/实验后,不可避免地得出的结论是,Chef 目前并没有真正的机密管理解决方案。

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

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

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 1970-01-01
      • 2020-10-29
      • 2018-09-08
      • 2020-11-25
      • 2016-10-31
      • 2016-12-25
      • 2019-12-28
      • 2014-08-14
      相关资源
      最近更新 更多