Ansible Tower (AWX) - 在剧本中使用安全变量?

Yeh*_*n G 8 chef-infra ansible ansible-vault ansible-tower

向大家问好,我最近开始搞乱 Ansible(特别是 Ansible Tower)。我在剧本中使用安全值时遇到了问题,更准确地说,我不明白如何正确使用它。

与 Chef-Infra 相比,您可以使用它data_bags来存储您的安全凭证。您创建一个数据包:

knife data bag create testDataBag 
Run Code Online (Sandbox Code Playgroud)

您将为数据包项目创建一个 json 文件:

{
    "id": "preproduction",
    "user": "user1",
    "password": "this-is-a-password"
}
Run Code Online (Sandbox Code Playgroud)

将其上传到 Chef 服务器,同时使用秘密文件(目标服务器存在)对其进行加密:

knife data bag from file testDataBag .\testDataBag\preproduction.json --secret-file .\secret-file
Run Code Online (Sandbox Code Playgroud)

然后你可以在你的食谱中使用它:

userinfo = data_bag_item('testDataBag', preproduction)
userinfo['user'] # "user1"
userinfo['password'] # "this-is-a-password"
Run Code Online (Sandbox Code Playgroud)

示例用例 - 为 Linux 用户配置密码。

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

Run Code Online (Sandbox Code Playgroud)

我知道这是很多信息,但我只是想展示我如何习惯使用安全凭证。回到 Ansible,我了解到有一个ansible-vault工具可以用来加密稍后可以在剧本中使用的变量文件。遗憾的是,我见过的唯一示例(或者也许我只是没有注意到)仅包括从命令行运行剧本,这不是我所做的事情。

我的 GIT 存储库中有一个剧本,它连接到我的 Ansible Tower 中的一个项目。我需要做什么才能达到可以使用包含密码的变量的程度?

  • 加密方式是一样的吗?通过使用ansible-vault
  • 我将加密的文件存储在哪里?(特别是在 Ansible Tower 中)
  • 如何存储保管库密码(用于解密保管库 ID 的密码)?
  • 如何在我的剧本中访问它们?

我查看了这些链接,但找不到任何有趣的内容:

https://docs.ansible.com/ansible/latest/user_guide/vault.html

https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html

https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#variables-and-vaults

在 Ansible Tower 文档中,没有解释如何以及在何处存储保管库 ID。

如果需要更多信息,请告诉我,我会更新我的帖子。

感谢大家!

小智 15

据我所知,您有两种选择可以在 AWX/Tower 中实现此目的,具体取决于您希望将这些机密存储在何处。

  1. 在您的项目/GIT 存储库中创建保管库
  • 使用“ansible-vault create”命令并选择密码
  • 以 yaml 格式保存保管库中的凭据并将更改提交/推送到 git
  • 在你的 playbook 上添加一个 include_vars 到你的 Vault 文件并提交/推送到 git
  • 在 Tower 中创建一个凭证,选择 type=Vault 并添加您的 Vault 的密码
  • 在您的 Tower 模板上添加您之前创建的凭证
  1. 使用自定义凭证类型(这根本不会将凭证保存在 git 中,它们只会存在于 Tower/AWX 上)
  • 创建一个新的自定义凭据类型,其中注入器配置类型为“extra_vars”,以及要作为变量包含在剧本中的凭据。
  • 然后根据您在上一步中创建的新凭据类型创建一个凭据。
  • 现在将该凭证分配给您的模板,这些变量将在您的 playbook 运行中可用。

以下是有关如何创建自定义凭证类型的详细信息

https://docs.ansible.com/ansible-tower/latest/html/userguide/credential_types.html

  • 非常简洁的答案,在 Ansible / Tower 文档中很难找到。 (3认同)