Ansible Vault - 用于生产和测试的相同 Git 存储库



对这篇冗长的帖子表示歉意。我是Ansible和Vault的新手(<2个月(。

环境

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

最终目标

  • 在两个环境中使用Git中的相同代码(Prod&Test(
  • 能够根据环境分离"秘密"值

基本设置(当前(

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

当前问题

  • 如果将Git repo导入我的Prod-Ansible主控制器,任何需要机密的播放都将失败(因为它有带有"Test"值的机密变量(

解决思路

  • 我考虑过对任何机密使用ansible"default"函数,并根据Inventory文件使用"when"条件。基本上,如果清单文件是基于"测试"的系统,请使用"测试"机密。如果没有,则使用"Prod"机密

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

  • 使用Hashicorp Vault。它能够使用名称空间树对cred进行分类。我还没有考虑过这个想法,也不确定它有多可行

我想知道业内其他人在为同样的问题做什么。这并不是一个独特的问题,当然有针对这种情况的最佳实践。

感谢

如果您需要基于环境的不同变量(vault机密只是另一个变量(,则可以为每个环境使用单独的库存,请参阅https://docs.ansible.com/ansible/2.8/user_guide/playbooks_best_practices.html#alternative-目录布局。然后,例如,inventories/prod/group_vars/all.yml将具有prodvault机密。。。您可以使用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

最新更新