ansible可能需要访问密码或API密钥等敏感数据,以便能配置受管主机。通常,此信息可能以纯文本形式存储在清单变量或其他Ansible文件中。但若如此,任何有权访问Ansible文件的用户或存储,这些Ansible文件的版本控制系统都能够访问此敏感数据。这存在安全风险。
使用Ansible随附的Ansible Vault可以加密和解密任何由Ansible使用的结构化数据文件。若要使用AnsibleVault,可通过一个名为ansible-vault 的命令行工具创建、编辑、加密、解密和查看文件。Ansible Vault可以加密任何由Ansible使用的结构化数据文件。这可能包括清单变量、playbook中含有的变量文件、在执行playbook时作为参数传遇的变量文件,或者Anslble 角色中定义的变量。
环境:
受控主机清单文件:
[dev]
192.168.10.129
[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=123
基本配置:
定义一个存放变量的文件:
yml文件:
调用变量
运行结果:
存在安全风险!!
创建加密文件:
要创建新的加密文件,可使用ansible-vault create filename命令。该命令
将提示输入新的Vaul密码,然后利用默认编辑器vi打开文件。可以使用vault
密码文件来存储vault密码,而不是通过标准输入途径输入vault密码。您可能
需要用文件权限和其他方式来严密保护该文件。
使用ansible-vault create vars.txt 命令,会要求输入密码进入vim编辑器进行编辑
pkg_name: httpd 加密的数据
使用cat命令查看文件时,会显示加密后的数据,保证了数据的安全性
修改yml文件,调用加密后的存放变量的文件
要运行可访问通过Ansible Vault加密的文件的playbook,需要ansible-playbook命令提供加密密码。如果不提供密码,playbook将返回错误,要为playbook提供vault密码,可使用--vault-id选项。例如,要以交互方式提供vault密码,请使用--vault-id @prompt。敏感的playbook变量可以放在单独的文件中,此文件通过AnsibleVault加密,并通过vars_files指令包含在该playbook中。
习惯使用ansible-playbook file.yml --ask-vault-pass这种方式,然后输入密码
也可以在ansible.cfg配置文件中使用vault_password_file指定密码文件,避免多次输入密码,后续可以直接执行ansible-playbook file.tml运行剧本。
vault_password_file=用于存放密码文件的路径
后续运行剧本,涉及到调用加密文件时,不再重复输入密码认证。