在本模块中,我们将讨论如何使用 Ansible Vault 以安全的方式加密存储敏感数据,例如密码或 API 密钥。

Ansible Vault 的作用

  1. 加密变量和文件以保护敏感内容 Ansible Vault 可以加密变量和文件,以便在 Playbook 或角色中安全使用。在 Ansible 的最新版本中,用于保护文件的加密算法是 AES-256。

创建加密文件

$ ansible-vault create secret.yml
  • 系统会提示您输入新的 Vault 密码。输入密码后,文件将使用默认编辑器打开。
  • 您也可以使用 --vault-password-file 选项指定密码文件,例如:
$ ansible-vault create --vault-password-file=vault-password.txt secret1.yml
  • 在此示例中,使用的密码是“password”,但强烈建议您使用更安全的密码。

查看加密文件

$ ansible-vault view secret1.yml
  • 使用 ansible-vault view 命令可以查看加密文件的内容,而无需打开文件进行编辑。
  • 系统会提示您输入 Vault 密码。

编辑已加密文件

$ ansible-vault edit secret.yml
  • 使用 ansible-vault edit 命令可以编辑已加密的文件。
  • Ansible 会将文件解密到一个临时文件中,供您编辑。保存后,内容会被重新加密,临时文件会被删除。

加密现有文件

$ ansible-vault encrypt cleartext1.yml --output=vault1.yml
  • 使用 ansible-vault encrypt 命令可以加密现有文件。
  • --output 选项允许您将加密后的文件保存为新名称。如果不使用该选项,原始文件将被加密后的文件覆盖。

解密现有文件

$ ansible-vault decrypt vault1.yml --output=decrypted.yml
  • 使用 ansible-vault decrypt 命令可以永久解密文件。
  • 在解密单个文件时,您可以使用 --output 选项将解密后的文件保存为不同的名称。

更改加密文件的密码

$ ansible-vault rekey secret.yml
  • 使用 ansible-vault rekey 命令可以更改加密文件的密码。
  • 系统会提示您输入原始密码,然后输入新密码。
  • 此命令可以同时更改多个数据文件的密码。

在 Playbook 中使用 Ansible Vault

$ ansible-playbook playbook.yml
  • 如果 Playbook 访问了使用 Ansible Vault 加密的文件,但未提供加密密码,Playbook 将返回错误:
TASK [include_vars] ****************************************************
fatal: [localhost]: FAILED! => {"ansible_facts": {}, "ansible_included_var_files": [], "changed": false, "message": "Attempting to decrypt but no vault secrets found"}
  • 要为 Playbook 提供加密密码,可以使用 --vault-id 选项。例如,通过交互方式提供密码:
$ ansible-playbook --vault-id @prompt playbook.yml
  • 或者,使用密码文件:
$ ansible-playbook --vault-password-file=vault-password.txt playbook.yml

总结

在本模块中,我们探索了 Ansible Vault 的安全存储功能,用于在 Ansible 中保存机密和敏感信息。正如我们所见,这些工具非常强大,并且完全集成在 Ansible 技术中。