第 3 章 Ansible vault
有时,您的 playbook 需要使用密码、API 密钥和其他机密等敏感数据来配置受管主机。将此信息存储在变量或其他与 Ansible 兼容的文件中存在安全风险,因为有权访问这些文件的任何用户都可以读取敏感数据。
使用 Ansible vault,您可以加密、解密、查看和编辑敏感信息。它们可以包括:
- 在 Ansible Playbook 中插入变量文件
- 主机和组变量
- 执行 playbook 时作为参数传递的变量文件
- Ansible 角色中定义的变量
您可以使用 Ansible vault 安全地管理单个变量、整个文件,甚至像 YAML 文件这样的结构化数据。然后,此数据可以安全地存储在版本控制系统中,或者与团队成员共享,而无需公开敏感信息。
文件通过高级加密标准(AES256)的对称加密进行保护,其中单个密码或密码短语用于加密和解密数据。请注意,这一操作方式尚未由第三方正式审核。
为了简化管理,设置您的 Ansible 项目,以便敏感变量和所有其他变量保存在单独的文件或目录中。然后,您可以使用 ansible-vault
命令保护包含敏感变量的文件。
创建加密的文件
以下命令会提示您输入新的 vault 密码。然后,它会打开一个文件来存储使用默认编辑器的敏感变量。
# ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
查看加密的文件
以下命令提示您输入现有的 vault 密码。然后,它显示已加密的文件的敏感内容。
# ansible-vault view vault.yml Vault password: <vault_password> my_secret: "yJJvPqhsiusmmPPZdnjndkdnYNDjdj782meUZcw"
编辑加密的文件
以下命令提示您输入现有的 vault 密码。然后,它会打开已加密的文件,供您使用默认编辑器更新敏感变量。
# ansible-vault edit vault.yml Vault password: <vault_password>
加密现有文件
以下命令会提示您输入新的 vault 密码。然后,它会加密现有的未加密的文件。
# ansible-vault encrypt vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password> Encryption successful
解密现有文件
以下命令提示您输入现有的 vault 密码。然后,它会解密现有的加密文件。
# ansible-vault decrypt vault.yml Vault password: <vault_password> Decryption successful
更改加密文件的密码
以下命令提示您输入原始 vault 密码,然后提示输入新的 vault 密码。
# ansible-vault rekey vault.yml Vault password: <vault_password> New Vault password: <vault_password> Confirm New Vault password: <vault_password> Rekey successful
playbook 中 Ansible vault 变量的基本应用
--- - name: Create user accounts for all servers hosts: managed-node-01.example.com vars_files: - vault.yml tasks: - name: Create user from vault.yml file user: name: "{{ username }}" password: "{{ pwhash }}"
您在 Ansible Playbook 的 vars_files
部分中使用变量(vault.yml
)读取文件,并使用与普通变量相同的大括号。然后,您可以使用 ansible-playbook --ask-vault-pass
命令运行 playbook,并手动输入密码。或者,您可以将密码保存到单独的文件中,并使用 ansible-playbook --vault-password-file /path/to/my/vault-password-file
命令运行 playbook。
其他资源
-
ansible-vault (1)
,ansible-playbook (1)
man pages - Ansible vault
- Ansible vault 最佳实践