Ansible加密变量如何使用Vault

wen 网络安全 2

本文目录导读:

Ansible加密变量如何使用Vault

  1. 创建加密变量文件
  2. 解密和编辑加密文件
  3. 在Playbook中使用加密变量
  4. 运行Playbook时提供密码
  5. 最佳实践
  6. 安全注意事项
  7. 实际示例

在Ansible中使用Vault加密敏感变量(如密码、密钥等)非常常见,下面是详细的使用方法:

创建加密变量文件

使用ansible-vault命令创建加密文件

# 创建加密文件,会提示设置密码
ansible-vault create secrets.yml
# 创建后输入内容,如:
db_password: my_secret_password
api_key: xxxxxx

加密已有文件

# 加密一个已存在的变量文件
ansible-vault encrypt vars.yml
# 查看加密后的内容
cat vars.yml
# $ANSIBLE_VAULT;1.1;AES256
# 1234567890abcdef...

解密和编辑加密文件

# 查看解密内容
ansible-vault view secrets.yml
# 编辑加密文件
ansible-vault edit secrets.yml
# 解密文件(永久解密)
ansible-vault decrypt secrets.yml
# 更改密码
ansible-vault rekey secrets.yml

在Playbook中使用加密变量

使用vars_files

# playbook.yml
---
- hosts: all
  vars_files:
    - secrets.yml  # 加密的变量文件
  tasks:
    - name: 使用加密变量
      debug:
        msg: "数据库密码是 {{ db_password }}"

直接在playbook中使用加密变量

# playbook.yml
---
- hosts: all
  vars:
    db_password: !vault |
      $ANSIBLE_VAULT;1.1;AES256
      1234567890abcdef...
  tasks:
    - name: 使用加密变量
      debug:
        msg: "密码是 {{ db_password }}"

运行Playbook时提供密码

交互式输入

# 运行时会提示输入vault密码
ansible-playbook playbook.yml --ask-vault-pass

密码文件

# 创建密码文件
echo "my_vault_password" > vault_pass.txt
chmod 600 vault_pass.txt
# 使用密码文件
ansible-playbook playbook.yml --vault-password-file vault_pass.txt

环境变量

# 设置环境变量
export ANSIBLE_VAULT_PASSWORD_FILE=/path/to/vault_pass.txt
# 运行playbook
ansible-playbook playbook.yml

最佳实践

目录结构示例

project/
├── group_vars/
│   ├── all/
│   │   ├── vars.yml        # 普通变量
│   │   └── vault.yml       # 加密变量
│   ├── webservers/
│   │   └── vault.yml       # 特定组加密变量
│   └── dbservers/
│       └── vault.yml       # 特定组加密变量
├── host_vars/
│   └── db1.example.com/
│       └── vault.yml       # 特定主机加密变量
├── playbook.yml
└── vault_pass.txt          # 密码文件(不提交到git)

使用Ansible Vault ID(多密码)

# 使用不同的密码ID
ansible-vault encrypt --vault-id prod@prompt secrets_prod.yml
ansible-vault encrypt --vault-id dev@prompt secrets_dev.yml
# playbook中使用
ansible-playbook playbook.yml --vault-id prod@vault_pass_prod.txt --vault-id dev@vault_pass_dev.txt

在ansible.cfg中配置

[defaults]
vault_password_file = /path/to/vault_pass.txt

安全注意事项

  1. 永远不要将vault密码明文提交到版本控制系统
  2. .gitignore中加入密码文件
  3. 定期更换vault密码
  4. 使用强密码(建议至少16位)
  5. 考虑使用密码管理器或CI/CD的secret存储功能

实际示例

# group_vars/all/vault.yml (加密文件)
vault_db_password: MyS3cretP@ssw0rd
vault_api_key: abc123def456
# group_vars/all/vars.yml (普通文件)
db_user: admin
app_name: myapp
# playbook.yml
---
- hosts: all
  tasks:
    - name: 配置数据库连接
      template:
        src: config.j2
        dest: /etc/myapp/config.yml
      vars:
        db_password: "{{ vault_db_password }}"  # 使用加密变量

这样就能安全地管理敏感变量了!

抱歉,评论功能暂时关闭!