目录
第二部分:Ansible Vault - 机密管理
2.1 为什么需要 Vault?
2.2 Vault 命令速查表
2.3 在 Playbook 中使用加密文件
方式一:交互式输入密码
方式二:使用密码文件
方式三:Playbook 中引用加密变量
2.4 最佳实践:分文件存储
第二部分:Ansible Vault - 机密管理
2.1 为什么需要 Vault?
# ❌ 危险!密码明文存储 database_password: "MySecurePass123" api_key: "sk-abc123def456" ssh_private_key: "-----BEGIN RSA PRIVATE KEY-----" # ✅ 安全!使用 Vault 加密 # 这些文件被 AES256 加密,无法直接读取Vault 的核心价值:
🔐 AES256 对称加密,军事级安全
🔑 防止敏感信息在代码库中泄露
🛡️ 支持密码文件、交互式输入等多种认证方式
2.2 Vault 命令速查表
# 1️⃣ 创建加密文件(会要求输入密码) ansible-vault create secrets.yml # 2️⃣ 查看加密文件内容(需要密码) ansible-vault view secrets.yml # 3️⃣ 编辑加密文件 ansible-vault edit secrets.yml # 4️⃣ 加密已存在的文件 ansible-vault encrypt existing.yml # 5️⃣ 解密文件(永久) ansible-vault decrypt secrets.yml # 6️⃣ 修改加密密码 ansible-vault rekey secrets.yml2.3 在 Playbook 中使用加密文件
方式一:交互式输入密码
ansible-navigator run playbook.yml --vault-id @prompt # 运行时会提示输入密码方式二:使用密码文件
# 1. 创建密码文件(只有自己可读) echo "my_vault_password" > ~/.vault_pass chmod 600 ~/.vault_pass # 2. 运行 Playbook ansible-navigator run playbook.yml --vault-password-file=~/.vault_pass方式三:Playbook 中引用加密变量
# vars/secrets.yml (已加密) db_password: "super_secret_123" api_key: "sk-abc123" # playbook.yml --- - name: 使用加密变量 hosts: all vars_files: - vars/secrets.yml # 自动解密 tasks: - name: 连接数据库 mysql_user: name: admin password: "{{ db_password }}"2.4 最佳实践:分文件存储
project/ ├── vars/ │ ├── common.yml # 普通变量(未加密) │ └── secrets.yml # 敏感变量(已加密) ├── host_vars/ │ └── db01.yml # 包含密码(已加密) └── playbook.yml为什么分文件?
- 🎯 只加密敏感信息,不影响普通变量查看
- 🔍 易于审计,明确哪些文件包含机密
- 🚀 性能更优,不需要解密整个配置