【问题标题】:Ansible Vault - Same Git repo for Prod & TestAnsible Vault - 用于生产和测试的相同 Git 存储库
【发布时间】:2021-06-16 04:00:43
【问题描述】:

对冗长的帖子表示歉意。我是 Ansible 和 Vault 的新手(

环境

  • CentOS & Win2019(90% Linux 系统)
  • Ansible 2.10.7(主 Ansible 控制器)
  • AWX 17.0.1(嵌入式 ansible 2.9.17)

终极目标

  • 在两种环境(生产和测试)中使用来自 Git 的相同代码
  • 能够根据环境分离“秘密”值

基本设置(当前)

  • Ansible 主控制器设计为完全自启动。这意味着所有设置/配置都包含在剧本中。这意味着我可以在 3 分钟内炸毁 ANS 控制器并重建。
  • 所有机密都是变量文件中的加密字符串。由于 AWX 无法导入受保管的文件,所有机密都是内联的 (ansible-vault encrypt_string 'secret_data' --name 'my_secret')
  • 两个环境中存在相同的用户帐户,但凭据不同

当前问题

  • 如果要将 Git 存储库导入我的 Prod Ansible 主控制器,任何需要秘密的播放都会失败(因为它具有带有“测试”值的秘密变量)

需要解决的问题

  • 我考虑过使用 ansible 的“默认”函数来结合基于 Inventory 文件的“何时”条件的任何秘密。基本上,如果库存文件是基于“测试”的系统,请使用“测试”机密。如果没有,请使用“Prod”秘密。

从我的角度来看,这是一个丑陋的解决方案,必须是一个更好的解决方案。

  • 使用 Hashicorp 保险库。它能够使用命名空间树对凭据进行分类。我还没有尝试过这个想法,不确定它是否可行。

我想知道业内其他人正在为同样的问题做些什么。这不是唯一的问题,并且肯定有针对这种情况的最佳做法。

谢谢

【问题讨论】:

  • IIUC 您想要不同的变量,因为在您的环境中(保险库机密只是另一个变量)?如果是这样,请参阅 docs.ansible.com/ansible/2.8/user_guide/… 如果是这样,一个示例:inventories/prod/group_vars/all.yml 将具有 prod vault secrets... 使用 ansible -i inventories/prod ...
  • 我遵循了 Ansible 文档Ansible Direcotry 中提供的目录布局,我遵循了第一个示例,发现它很容易导入到 AWX。我将这些目录布局视为非此即彼的场景。但可能我可以将“group_var”文件夹从根级别移动到“inventory”文件夹下。 - 你知道 AWX 是否会尊重这种布局?我也必须进行测试,但要过几天才能测试 - 这是例外的目录布局吗?我想尽可能保持“最佳实践”。
  • 第二种布局更好,因为您可以将变量放入与环境相关的目录中,例如。 ~/src/work/infra-ansible/env/prod/group_vars/all/010_cross_env_vars.yml 是指向 /sync/src/work/infra-ansible/env/010_cross_env_vars.yml 的符号链接,在 env 之间共享。 IMO AWX 的工作方式与原生 ansible 相同,具有库存路径的递归。
  • @JiriB 我想给你正确的答案,但我不能反对“评论”。您能否将您的答案发布为对主要帖子的回复。如果我自己能做到这一点,我还没有想出来。

标签: ansible hashicorp-vault ansible-vault


【解决方案1】:

由于您需要基于环境的不同变量(保险库机密只是另一个变量),因此您可以为每个环境使用单独的清单,请参阅https://docs.ansible.com/ansible/2.8/user_guide/playbooks_best_practices.html#alternative-directory-layout。然后,例如,inventories/prod/group_vars/all.yml 将具有 prod 保管库机密...您将使用 ansible -i inventories/prod ... 明确指定每个库存。

在此清单布局中,您可以使用符号链接在环境之间共享变量文件,例如。 inventories/prod/group_vars/all/010_cross_env_vars.yml 将是../../../010_cross_env_vars.yml 的符号链接,因此指向位于每个环境子目录的父目录中的变量文件,即。 inventories/010_cross_env_vars.yaml.

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 2013-11-25
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多