Ansible Vault:为自动化加密保护密钥

Ansible Vault 用 AES-256 加密 playbook 中的敏感数据:整文件加密或单变量加密,运行时自动解密对自动化透明。本文覆盖核心命令、密码管理、实战场景与团队协作姿势。

最佳实践
操作系统与资源管理插画

直接回答:Ansible Vault 是内置的密钥加密功能——AES-256 加密整个文件或单个变量,强密码保护的密文可入 Git,但需考虑历史密文泄露和离线破解风险,playbook 执行时自动解密,对自动化流程完全透明。核心命令:create/edit/encrypt/encrypt_string/decrypt/rekey;团队用 vault-id 管理多套密码。

两种加密粒度

# 整文件加密
ansible-vault create group_vars/all/vault.yml

# 单变量加密(推荐)
ansible-vault encrypt_string --stdin-name db_password
# 以下仅示意密文格式,不是有效密钥内容:
db_password: !vault |
    $ANSIBLE_VAULT;1.1;AES256
    6638643965...

单变量加密保留其他字段可读,但密文 diff 仍不可读,且不能保证运行期不泄漏。

运行时解密

ansible-playbook site.yml --ask-vault-pass                    # 交互输入
ansible-playbook site.yml --vault-password-file ~/.vault_pass # 密码文件(chmod 600)
ansible-playbook site.yml --vault-id prod@prompt              # 命名密码

团队协作姿势

  • 主密码存密码管理器,绝不进仓库
  • 多环境分密码:--vault-id dev@... --vault-id prod@...
  • 人员变动时轮换文件加密密码及已知业务凭证;rekey 不会轮换数据库密码,单变量密文需重新生成。轮换业务凭证后,逐一验证依赖客户端的认证结果,不记录凭证明文。
  • CI/CD 通过受保护凭证脚本或权限受限临时密码文件提供密码;普通环境变量不会自动变为 Vault 密码源

实战场景

API key、数据库密码、TLS 私钥、云服务凭证——任何会进 playbook 的敏感值都应过 Vault。配合 no_log: true 任务属性,减少任务结果泄露;debug、diff、控制端 ANSIBLE_DEBUG 与目标应用日志仍要单独防护。

常见问题(FAQ)

Q:忘记 Vault 密码能找回吗?
A:不能——AES-256 没有后门。这就是主密码必须进密码管理器的原因;丢失等于重新生成全部密钥。

Q:加密文件损坏怎么办?
A:密文本身在 Git 里有历史,git 回滚可恢复;改密文导致解不开时同样回滚处理。

Q:和外部密钥管理系统冲突吗?
A:不冲突,是层级关系——中小团队 Vault 够用;需要集中轮换、审计、动态密钥的企业场景,Ansible 通过 lookup 插件消费外部系统,Vault 退为兜底。

官方参考

本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。

延伸阅读

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台