【.comExpress翻译】Ansible是一个优秀的自动化和编排工具,以其简单易用而受到众多开发者的欢迎。Ansible附带的最重要的功能之一是AnsibleVault。顾名思义,AnsibleVault是一种安全功能,可以加密或保护playbook或文件中的敏感信息,而不是以明文形式保留信息:如果泄露,将构成严重威胁。此类数据包括密码、API令牌和SSL证书等内容。您可以加密整个剧本YAML文件,该文件由剧本中包含敏感信息(例如密码)的字符串组成。本指南介绍了AnsibleVault可以帮助您保护敏感或机密信息免遭窥探的各种方式。使用AnsibleVault创建加密文件AnsibleVault使用ansible-vault命令行实用程序在AES256算法的帮助下加密敏感信息。这提供了嵌入在定义的密码中的对称加密。用户可以使用相同的密码对文件进行加密或解密以访问内容。要创建加密文件,请使用ansible-vault实用程序,如下所示:$ansible-vaultcreatefile.yml例如,要创建一个文件,将其命名为secret_file.yml,运行命令:$ansible-vaultcreatesecret_file.yml图1系统将提示您提供一个新的保管库密码。输入您的首选密码并确认。确认密码后,vim编辑器将启动。之后,输入你想要被AnsibleVault加密的文件内容并保存文件。下面是一些示例文本。你好,这是mysecretfile当你查看文件时,你会发现它是使用AES256算法加密的,如下所示:$vimsecret_file.yml图2使用AnsibleVault编辑加密文件要对现有加密文件进行更改,请使用以下命令语法:$ansible-vaulteditfile.yml以我们之前创建的示例文件为例,编辑该文件的命令为:$ansible-vaulteditsecret_file.yml系统将再次提示您输入保险库密码,提供密码后,您将被授予对该文件进行修改的权限。图3查看加密文件要查看加密文件,请使用以下语法:$ansible-vaultviewfile.yml使用我们的文件,因此命令将是:$ansible-vaultviewsecret_file.yml图4使用AnsibleVault加密现有文件假设您要加密什么你会处理现有的未加密文件,例如清单文件吗?为此,使用语法:$ansible-vaultencryptfile.yml例如,要加密文件file1.yml,执行以下命令:$ansible-vaultencryptfile1.yml指定VaultVault密码,确认密码后即可加密文件.图5使用AnsibleVault解密文件要解密文件并将其恢复为纯文本,请运行以下命令:$ansible-vaultdecryptfile1.yml如果一切顺利,您应该会收到“解密成功”消息。现在,您可以使用cat命令查看文件的内容。图6重置AnsibleVault密码此外,您可以重置或更改保管库密码。这可以使用ansiblevault命令中的rekey选项来完成,如下所示:$ansible-vaultrekeysecret_file.yml首先指定当前的vault密码,然后再创建新密码并确认密码。图7AnsiblePlaybook运行时解密在Ansible2.4之前,需要使用ansible或ansible-playbook命令加上–ask-vault-pass参数来运行时解密文件,如下:$ansible-playbookplaybook_example.yml--ask-vault-pass然后将提示您输入保险库密码,解密将在运行时开始。图8但是,此方法已被弃用。从Ansible2.4开始,提示输入密码的标准方法是使用--vault-id选项,如下所示:$ansible-playbookplaybook_example.yml--vault-id@prompt@prompt将提示输入密码。图9为避免在运行期间每次解密文件时都提示输入密码,一个简单的技巧是将保管库密码存储在文件中。在Ansible2.4之前,执行此操作的方法是使用--vault-password-file参数,指定包含存储密码的文件的路径。例如在下面的演示中,密码文件位于/etc/ansible/vault_pass.txt文件中。$ansible-playbookplaybook_example.yml--vault-password-file/etc/ansible/vault_pass.txt但是,与--ask-vault-pass选项一样,--vault-password-file选项已停用,取而代之的是--vault-id选项。所以,命令看起来像这样:$ansible-playbookplaybook_example.yml--vault-id/etc/ansible/vault_pass.txt只有变量。在大多数情况下,这些变量携带高度机密和敏感的信息,例如密码和API密钥。下面的脚本旨在打印出变量my_secret的值,其中包含定义为P@ssword123的密码。图10通常,以纯文本形式存储密码不是一个好主意,因为如果有人拥有脚本文件,您就会面临风险。因此,您有2个选择:加密整个文件或加密变量的值。要加密变量,请使用crypto_string选项,如下所示。$ansible-vaultencrypt_string'string'--name'variable_name'要加密playbook示例中变量my_secret的值,命令为:$ansible-vaultencrypt_string'P@ssword123'--name'my_secret'图11以上输出显示密码是AES256加密加密的。之后,从!vault|复制整个加密代码转到playbook文件,删除明文密码值,然后粘贴加密值,如下所示。图12保存并退出文件。现在运行剧本并验证它是否仍然显示存储在my_secret变量中的密码值。上面图13中的输出显示playbook提供了预期的结果,表明我们已经成功加密了变量。原标题:如何使用AnsibleVault来保护敏感数据,作者:PradeepKumar
