如何在 Playbook 中使用 Ansible Vault 保护敏感数据 - 第 10 部分
当您开始使用 Ansible 时,您可能需要在 playbook 中输入一些机密或秘密信息。其中包括 SSH 私钥和公钥、密码以及 SSL 证书等。众所周知,出于显而易见的原因,以纯文本形式保存这些敏感信息是一种不好的做法。这些信息需要保密,因为我们只能想象如果黑客或未经授权的用户掌握了它会发生什么。
值得庆幸的是,Ansible 为我们提供了一个方便的功能,称为 Ansible Vault。顾名思义,Ansible Vault 有助于保护重要的秘密信息,正如我们之前讨论的那样。 Ansible Vault 可以加密变量,甚至整个文件和 YAML playbook,我们稍后将演示。这是一个非常方便且用户友好的工具,在加密和解密文件时需要相同的密码。
现在让我们深入了解并概述可以使用 AnsibleVault 执行的各种操作。
如何在 Ansible 中创建加密文件
如果您想创建加密的 Playbook 文件,只需使用 ansible-vault create 命令并提供如图所示的文件名。
ansible-vault create filename
例如,要创建加密文件 mysecrets.yml,请执行以下命令。
ansible-vault create mysecrets.yml
此后,系统将提示您输入密码,确认后,将使用 vi 编辑器打开一个新窗口,您可以在其中开始编写剧本。
以下是一些信息的示例。完成后,只需保存并退出剧本即可。这就是创建加密文件时的情况。
要验证文件加密,请使用 cat 命令,如下所示。
cat mysecrets.yml
如何在 Ansible 中查看加密文件
如果您想查看加密文件,只需传递ansible-vault view命令,如下所示。
ansible-vault view mysecrets.yml
系统将再次提示您输入密码。您将再次可以访问您的信息。
如何在 Ansible 中编辑加密文件
要更改加密文件,请使用 ansible-vault edit 命令,如图所示。
ansible-vault edit mysecrets.yml
与往常一样,提供密码,然后继续编辑文件。
编辑完成后,保存并退出vim编辑器。
如何更改 Ansible Vault 密码
如果您觉得需要更改 AnsibleVault 密码,可以使用 ansible-vault rekey 命令轻松完成此操作,如下所示。
ansible-vault rekey mysecrets.yml
这会提示您输入保管库密码,稍后会要求您输入新密码并稍后确认。
如何在 Ansible 中加密未加密的文件
假设您要加密未加密的文件,可以通过运行 ansible-vault 加密 命令来实现,如图所示。
ansible-vault encrypt classified.txt
您稍后可以使用 cat 命令查看该文件,如下所示。
如何解密加密文件
要查看加密文件的内容,只需使用 ansible-vault 加密 解密文件,如下例所示。
ansible-vault decrypt classified.txt
如何在 Ansible 中加密特定变量
此外,AnsibleVault 使您能够加密某些变量。这是使用 ansible-vault encrypt_string 命令完成的,如图所示。
ansible-vault encrypt_string
AnsibleVault 将提示您输入密码,稍后要求您确认。接下来,键入要加密的字符串值。最后,按ctrl+d
。此后,您可以开始在 playbook 中分配加密值。
这可以通过一行来实现,如下所示。
ansible-vault encrypt_string 'string' --name 'variable_name'
如何在运行时解密 Playbook 文件
如果您有一个 playbook 文件并希望在运行时对其进行解密,请使用 --ask-vault-pass
选项,如图所示。
ansible-playbook deploy.yml --ask-vault-pass
这将解密 playbook 中使用的所有文件,前提是它们使用相同的密码进行加密。
密码提示有时可能会很烦人。这些提示使得自动化站不住脚,尤其是当自动化是关键时。为了简化运行时解密 playbook 的过程,建议使用一个包含 AnsibleVault 密码的单独密码文件。然后可以在运行时传递该文件,如图所示。
ansible-playbook deploy.yml --vault-password-file /home/tecmint/vault_pass.txt
这使我们得出了本主题和 Ansible 自动化系列的结论。我们希望这些教程能够提供一些有用的知识,帮助您了解如何从一个中央系统跨多个服务器自动执行任务。