Ansible AWX / Tower - 在剧本中使用 Vault 凭证

问题描述 投票:0回答:3

在 Ansible AWX 中,我创建了一个 Vault 凭证(名为:user-pw)。现在我想在剧本中使用该密码。但这不起作用。

我创建了一个模板,添加 Vault 凭证(在凭证输入处)。在剧本中,我在密码应该在的地方使用了变量“{{ user-pw }}”。

我做错了什么?如何获取剧本中的 AWX Vault 密码作为变量?

这是保管库凭证屏幕: Vault credential

这是模板屏幕: Template

这是测试手册:

---
- name: Vaulttest
  hosts: win

  tasks:
    - name: View user pw
      debug:
        msg: "{{ user-pw }}"

提前致谢!

ansible ansible-awx ansible-tower ansible-vault
3个回答
4
投票

找到了!我以错误的方式使用了自定义凭据。

我创建了一个全新的自定义凭据(在管理 - 凭据类型下)。

输入配置:

fields:
  - id: pass
    type: string
    label: password
    secret: true
required:
  - pass

喷油器配置:

extra_vars:
  pass: '{{pass}}'

然后我使用自定义凭据创建了凭据。已填写密码。

在剧本中使用密码变量,如下所示:

- name: Test
  module:
    username: testuser
    password: "{{ pass }}"

最后,将自定义凭证添加到模板中。


0
投票

根据最简单的描述,这似乎是使用Credentials,甚至Vault的正确方法。

调试自定义凭证类型我通常使用

- hosts: localhost
  gather_facts: yes

  tasks:

  - name: Get environment
    debug:
      msg: "{{ ansible_env }}"

产生

的输出
TASK [Get environment] *********************************************************
ok: [localhost] => {
    "msg": [
        {
            ...
            "TEST_ACCOUNT_PASSWORD": "test_password", 
            "TEST_ACCOUNT_NAME": "test_account", 
            ...
        }
        ...

如果配置了此类自定义测试凭证。这适用于 AWX/Tower。然后您可以跟进


0
投票

您可以滥用 AWX 将凭据传递到 playbook 的方式。每当它在 playbook 运行时的前 10 秒内看到已知的预期提示时,它就会用相应的秘密进行响应。但请注意,这被视为 AWX 中的错误,并且可能会得到修复。不过,我希望在修复之前,AWX UI 能够获得一个特殊的功能,可以使用任何选定的保管库凭证来加密任何任意文本,而无需编写特殊的剧本

从技术上讲,您可以发出一个

vars_prompt
提示,该提示看起来与 ansible-playbook 在需要保管库机密时发出的问题相同,并且 AWX 会将其粘贴到那里。甚至没有检查它是否是第二次执行此操作:) 当然,如果使用一个并且看起来与原始的完全一样,则此提示需要包含正确的保管库 ID。否则你的剧本将冻结,你需要取消该作业。

只是一本没有Vault-id的Vault PoC剧本,但你可以找出一个带有id的:

- name: Encrypt with Vault
  hosts: localhost
  gather_facts: false
  vars_prompt:
    - name: vault_pass
      prompt: Vault password
  tasks:
    - ansible.builtin.debug:
        msg: "{{ extravar | ansible.builtin.vault(vault_pass) | indent(10, true)"

只需在与未指定保管库 ID 的单个保管库凭证关联的 AWX 作业模板中启动此剧本,您在

extravar
额外变量中输入的所有内容都将使用该特定保管库机密进行加密,甚至无需向您显示。您可以使用密码类型的调查字段,而不会将额外的内容暴露在任何地方。

这个bug能修复吗... 还有一个替代方案!创建保管库机密时,对其自身进行加密并存储在您的剧本中。当开始使用链接的保管库凭证时,您将能够解密...保管库秘密本身。

因此,基本上考虑到您的超安全保管库秘密是“V@ultS3cret!”除了将其存储为凭证之外,还准备

{{ 'V@ultS3cret!' | ansible.builtin.vault('V@ultS3cret!') }}
的结果并将其与 playbook 一起保存。每个有权访问这两者的人 - 此加密内容和凭证本身都将能够获得保管库秘密的明文。

© www.soinside.com 2019 - 2024. All rights reserved.