在 ansible 清单中安全地使用凭据

Using credentials securely in ansible inventory

为了连接到 windows 主机,我需要在清单文件中传递凭据。这是我的清单文件:

[windows]
100.100.100.100

[windows:vars]
ansible_user=Adminuser
ansible_password="Mypassword"
ansible_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

Ansible 文档说凭证应该用 ansible-vault 加密。我可以在我的清单文件中使用使用 ansible-vault 加密的变量文件吗?如果是这样,我如何将我的 ansible-vault 凭据传递到我的清单文件?我还将在我的剧本中使用凭证,如下所示:

- hosts: windows
  gather_facts: no

  vars_files:
  - vars.yml

  tasks:
  - win_domain_membership:
      dns_domain_name: my.domain.com
      hostname: ansible-host
      domain_admin_user: {{ admin_user }}
      domain_admin_password: {{ passwd }}
      domain_ou_path: "OU=Windows,OU=Servers,DC=ansible,DC=com"
      state: domain
    register: domain_state

然后我将使用 ansible-vault 为这个剧本加密我的变量文件。

---
admin_user:myusername@my.domain.com
passwd:mypassword

然后在命令行将我的 ansible-vault 凭据传递到我的剧本:

$ ansible-playbook myplaybook.yml --ask-vault-pass

是否可以将我的清单中使用的变量文件和我的剧本中使用的变量文件存储在同一个 ansible-vault 中?这样我就可以在命令行传递两个文件的 ansible-vault 凭据?

ansible-vault 命令加密单个文件。 Ansible 在运行时对其进行解密,并以与未加密文件相同的方式对其进行解释(因此您不能“将我的清单中使用的变量文件和我的剧本中使用的变量文件存储在同一个 ansible-vault 中”因为那是两个不同的文件)。

我只想从你的清单中删除变量,让它像这样:

[windows]
100.100.100.100

然后创建 group_vars/windows.yml 作为具有以下内容 (ansible-vault create groups_vars/windows.yml) 的保管库文件:

ansible_user: Adminuser
ansible_password: "Mypassword"
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

当你有一个针对 windows 组的游戏时,Ansible 将自动应用 group_vars/windows.yml 中的变量。