第 3 章 Ansible vault

有时,您的 playbook 需要使用密码、API 密钥和其他机密等敏感数据来配置受管主机。将此信息存储在变量或其他与 Ansible 兼容的文件中存在安全风险,因为有权访问这些文件的任何用户都可以读取敏感数据。

使用 Ansible vault,您可以加密、解密、查看和编辑敏感信息。它们可以包括:

  • 在 Ansible Playbook 中插入变量文件
  • 主机和组变量
  • 执行 playbook 时作为参数传递的变量文件
  • Ansible 角色中定义的变量

您可以使用 Ansible vault 安全地管理单个变量、整个文件,甚至像 YAML 文件这样的结构化数据。然后,此数据可以安全地存储在版本控制系统中,或者与团队成员共享,而无需公开敏感信息。

重要

文件通过高级加密标准(AES256)的对称加密进行保护,其中单个密码或密码短语用于加密和解密数据。请注意,这一操作方式尚未由第三方正式审核。

为了简化管理,设置您的 Ansible 项目,以便敏感变量和所有其他变量保存在单独的文件或目录中。然后,您可以使用 ansible-vault 命令保护包含敏感变量的文件。

创建加密的文件

以下命令会提示您输入新的 vault 密码。然后,它会打开一个文件来存储使用默认编辑器的敏感变量。

# ansible-vault create vault.yml
New Vault password: <vault_password>
Confirm New Vault password: <vault_password>

查看加密的文件

以下命令提示您输入现有的 vault 密码。然后,它显示已加密的文件的敏感内容。

# ansible-vault view vault.yml
Vault password: <vault_password>
my_secret: "yJJvPqhsiusmmPPZdnjndkdnYNDjdj782meUZcw"

编辑加密的文件

以下命令提示您输入现有的 vault 密码。然后,它会打开已加密的文件,供您使用默认编辑器更新敏感变量。

# ansible-vault edit vault.yml
Vault password: <vault_password>

加密现有文件

以下命令会提示您输入新的 vault 密码。然后,它会加密现有的未加密的文件。

# ansible-vault encrypt vault.yml
New Vault password: <vault_password>
Confirm New Vault password: <vault_password>
Encryption successful

解密现有文件

以下命令提示您输入现有的 vault 密码。然后,它会解密现有的加密文件。

# ansible-vault decrypt vault.yml
Vault password: <vault_password>
Decryption successful

更改加密文件的密码

以下命令提示您输入原始 vault 密码,然后提示输入新的 vault 密码。

# ansible-vault rekey vault.yml
Vault password: <vault_password>
New Vault password: <vault_password>
Confirm New Vault password: <vault_password>
Rekey successful

playbook 中 Ansible vault 变量的基本应用

---
- name: Create user accounts for all servers
  hosts: managed-node-01.example.com
  vars_files:
    - vault.yml
  tasks:
    - name: Create user from vault.yml file
      user:
        name: "{{ username }}"
        password: "{{ pwhash }}"

您在 Ansible Playbook 的 vars_files 部分中使用变量(vault.yml)读取文件,并使用与普通变量相同的大括号。然后,您可以使用 ansible-playbook --ask-vault-pass 命令运行 playbook,并手动输入密码。或者,您可以将密码保存到单独的文件中,并使用 ansible-playbook --vault-password-file /path/to/my/vault-password-file 命令运行 playbook。

其他资源