问题描述
问候大家, 我最近开始对Ansible(特别是Ansible Tower)感到困惑。 我在剧本中使用安全值遇到了一个问题,更准确地说,我不知道如何正确使用它。
与Chef-Infra相比,您可以使用data_bags
来存储您的安全凭据。
您创建一个数据包:
knife data bag create testDataBag
{
"id": "preproduction","user": "user1","password": "this-is-a-password"
}
将其上传到Chef服务器,同时使用秘密文件(存在目标服务器)对其进行加密:
knife data bag from file testDataBag .\testDataBag\preproduction.json --secret-file .\secret-file
然后您可以在食谱中使用它:
userinfo = data_bag_item('testDataBag',preproduction)
userinfo['user'] # "user1"
userinfo['password'] # "this-is-a-password"
userinfo = data_bag_item('testDataBag',preproduction)
user "#{userinfo['user']}" do
comment 'A random user'
home "/home/#{userinfo['user']}"
shell '/bin/bash'
password "userinfo['password']"
end
我知道这是很多信息,但是我只是想说明如何习惯使用安全凭证。
回到Ansible,我知道有一个ansible-vault
工具,可以用来加密变量文件,以后可以在剧本中使用它。
不幸的是,我所见过的唯一示例(或者也许我只是没有注意到)仅包括从命令行运行剧本,这不是我要做的。
我的GIT存储库中有一个剧本,该剧本与Ansible Tower中的一个项目相连。 为了达到这个目的,我可以使用包含密码的变量?
我已经查看了这些链接,但找不到任何有趣的东西:
https://docs.ansible.com/ansible/latest/user_guide/vault.html
https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html
并且在Ansible Tower文档中,没有关于如何以及在何处存储库ID的解释。
如果需要更多信息,请告诉我,我会更新我的帖子。
谢谢大家!
解决方法
据我所知,根据您希望将这些机密存储在何处,您可以通过两种方式在AWX / Tower中实现这一目标。
- 在项目/ GIT存储库中创建文件库
- 使用“ ansible-vault创建”命令并选择密码
- 以yaml格式将凭据保存在Vault中,然后将更改提交/推送到git
- 在您的剧本上,将一个include_vars添加到您的Vault文件中,并提交/推送到git
- 在Tower中创建凭据,选择type = Vault,然后添加您的Vault的密码
- 在Tower模板上,添加您之前创建的凭据
- 使用自定义凭据类型(这根本不会将凭据保存在git中,它们只会存在于Tower / AWX中)
- 创建一个新的自定义凭据类型,其注入器配置类型为“ extra_vars”,以及要作为变量包含在剧本中的凭据。
- 然后根据您在上一步中创建的新凭证类型创建凭证。
- 现在将凭据分配给模板,并且这些变量将在您的剧本运行中可用。
以下是有关如何创建自定义凭据类型的详细信息
https://docs.ansible.com/ansible-tower/latest/html/userguide/credential_types.html