【问题标题】:How to Manage Environment Variables for Continuous Deployment如何管理环境变量以进行持续部署
【发布时间】:2020-01-31 07:04:34
【问题描述】:

因此,如今的常见做法是将连接字符串和密码作为环境变量,以避免将它们放入文件中。这一切都很好而且很花哨,但是当我尝试使用一些配置管理工具(例如 Salt/Ansible 或 Chef/Puppet)来设置持续部署工作流程时,我不确定如何使这项工作发挥作用。

具体来说,我在使用上述配置管理工具的环境中有以下问题:

  1. 您将连接字符串/密码/密钥与代码库分开存储在哪里?
    • 您是否将这些项目保存在某种类型的代码仓库中(git 等)?
    • 您是否使用工具内置的某些结构?
  2. 您如何确保这些物品的安全?
  3. 您是否跟踪/备份这些项目,如果是,如何跟踪?

【问题讨论】:

    标签: automation continuous-integration chef-infra puppet ansible


    【解决方案1】:

    在 Chef 你可以

    1. encrypted data bags 或使用chef-vault 中存储密码或API 令牌。然后在 chef 进行配置时对其进行解密(使用共享密钥的加密数据包,使用 Chef 客户端的现有 PKI 的 chef-vault)。
    2. 使用environment 参数调用外部软件时设置环境变量,例如execute resource
    3. 不确定,在这里写什么——我想说你并没有真正管理它们。这样,您只为需要它的命令设置变量,而不是例如为整个厨师工作。

    【讨论】:

    • 加密数据包是要走的路。
    • 我会说 chef-vault 是要走的路 ;-)
    【解决方案2】:

    对于 puppet,首选方法可能是将机密存储在 Hiera 文件中,这些文件只是普通的 YAML 文件。这意味着所有秘密都存储在主服务器上,与清单文件分开。

    【讨论】:

    • 但这仍然在 VCS 中,不是吗?
    • 不一定。在我这里,我们在 VCS 中拥有所有环境都使用的模块,以及每个环境的特定 hieradata。
    【解决方案3】:

    truecrypt 虚拟加密磁盘是跨平台的并且独立于工具。以读写方式挂载它以更改其包含的文件中的机密,卸载它,然后将加密的磁盘映像提交/推送到版本控制中。以只读方式挂载自动化。

    【讨论】:

      【解决方案4】:

      ansible-vault 可用于加密敏感数据文件。然而,像 Jenkins 这样的 CI 服务器并不是存储访问凭据的最安全的地方。如果您添加 Hashicorp Vault 和 Ansible Tower/AWX,那么您可以为多个团队提供安全的解决方案。

      【讨论】:

        猜你喜欢
        • 2021-03-31
        • 2016-04-28
        • 2020-06-29
        • 2020-07-02
        • 1970-01-01
        • 2021-10-07
        • 1970-01-01
        • 1970-01-01
        • 2022-10-23
        相关资源
        最近更新 更多