做自动化运维时,密码、API 密钥这类敏感数据,直接写在 Playbook 或变量文件里非常危险,很容易被泄露。Ansible Vault 就是用来解决这个问题的 —— 它能把敏感文件用 AES-256 加密,既可以被 Ansible 正常读取,又不会明文暴露,是生产环境的标配操作。
目录
一、Ansible Vault 基础用法(命令速查)
1. 创建加密文件
2. 查看加密文件内容
3. 编辑已加密文件
4. 加密现有文件
5. 解密文件(慎用)
6. 更改加密密码
二、Playbook 如何使用加密文件
1. 交互式输入密码
2. 使用密码文件
三、生产环境推荐用法
1. 变量文件与机密文件分离
2. 多 Vault 密码管理
问答题
Q1:Ansible Vault 用什么算法加密?
Q2:运行含 Vault 加密文件的 Playbook 报错,提示 “no vault secrets found” 怎么办?
Q3:ansible-vault edit和ansible-vault view有什么区别?
Q4:如何避免每次运行 Playbook 都要手动输入 Vault 密码?
Q5:推荐如何管理敏感变量?
一、Ansible Vault 基础用法(命令速查)
1. 创建加密文件
直接创建并编辑一个新的加密文件:
ansible-vault create secret.yml
执行后会提示设置 Vault 密码,输入两次后,会自动用默认编辑器打开文件,写入内容保存后就自动加密了。
也可以用密码文件避免交互式输入:
ansible-vault create –vault-password-file=vault-pass secret.yml
2. 查看加密文件内容
不解密直接查看文件内容:
ansible-vault view secret.yml
3. 编辑已加密文件
解密并临时打开文件编辑,保存后自动重新加密:
ansible-vault edit secret.yml
4. 加密现有文件
给已有的明文文件加密:
ansible-vault encrypt app-secret.yml
5. 解密文件(慎用)
把加密文件永久解密成明文:
ansible-vault decrypt secret.yml –output=secret-decrypted.yml
6. 更改加密密码
给已加密文件更换 Vault 密码:
ansible-vault rekey secret.yml
二、Playbook 如何使用加密文件
运行引用了 Vault 加密文件的 Playbook,必须提供正确的 Vault 密码,否则会报错。
1. 交互式输入密码
ansible-navigator run -m stdout \\
–playbook-artifact-enable false \\
site.yml –vault-id @prompt
注意:必须禁用playbook-artifact,否则交互式输入会卡住。也可以在ansible-navigator.yml中全局配置:
ansible-navigator:
playbook-artifact:
enable: false
2. 使用密码文件
提前把 Vault 密码写到文件中(权限设为0600),执行时直接引用:
ansible-navigator run -m stdout site.yml \\
–vault-password-file=vault-pass
三、生产环境推荐用法
1. 变量文件与机密文件分离
把普通变量和敏感变量分开管理,是最佳实践:
project/
├── group_vars/
│ └── webservers/
│ ├── vars # 普通变量(明文)
│ └── vault # 敏感变量(用ansible-vault加密)
└── playbook.yml
普通变量和敏感变量放在不同文件中,只有敏感文件被加密,既安全又方便维护。
2. 多 Vault 密码管理
如果不同文件使用不同的 Vault 密码,可以用–vault-id指定多个密码:
ansible-navigator run -m stdout site.yml \\
–vault-id one@prompt \\
–vault-id two@prompt
Ansible 会根据文件的 Vault ID 匹配正确的密码,避免逐一尝试。
问答题
Q1:Ansible Vault 用什么算法加密?
A:默认使用 AES-256 对称加密,密钥就是你设置的 Vault 密码,加密强度足够保护生产环境的敏感数据。
Q2:运行含 Vault 加密文件的 Playbook 报错,提示 “no vault secrets found” 怎么办?
A:这是因为运行时没有提供正确的 Vault 密码。可以用–vault-id @prompt交互式输入,或者用–vault-password-file指定密码文件。
Q3:ansible-vault edit和ansible-vault view有什么区别?
A:view只是不解密查看内容,不会修改文件;edit会临时解密文件,编辑保存后会自动重新加密,所以修改内容必须用edit。
Q4:如何避免每次运行 Playbook 都要手动输入 Vault 密码?
A:可以把密码写到文件中,设置权限为0600,然后通过–vault-password-file选项引用,也可以配置ANSIBLE_VAULT_PASSWORD_FILE环境变量。
Q5:推荐如何管理敏感变量?
A:建议把敏感变量和普通变量分开存,比如在group_vars或host_vars下创建单独的vault文件,用 Ansible Vault 加密,普通变量文件保持明文,这样既安全又方便维护。



