目录

第二部分: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.yml

2.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

为什么分文件?

  • 🎯 只加密敏感信息,不影响普通变量查看
  • 🔍 易于审计,明确哪些文件包含机密
  • 🚀 性能更优,不需要解密整个配置
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐