在本模块中,我们将讨论如何使用 Ansible Vault 以安全的方式加密存储敏感数据,例如密码或 API 密钥。
Ansible Vault 的作用
- 加密变量和文件以保护敏感内容 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 技术中。