目录
一、Ansible Vault :
Ansible 可能需要访问密码或 API 密钥等敏感数据,以便配置远程服务器。通常,这些信息以纯文本形式存储在变量清单或其它 Ansible 文件中。若是任何有权访问 Ansible 文件的用户,以及存储这些 Ansible 文件的版本控制系统都能够访问这些敏感数据,将存在很大的安全风险,因此 Ansible 提供了 Ansible Vault 加密敏感变量。
使用随 Ansible 提供的 Ansible Vault ,可以加密和解密任何由 Ansible 使用的结构化数据文件(例如,清单变量、 playbook 中含有的变量文件、在执行 playbook 时作为参数传递的变量文件、以及 Ansible 角色中定义的变量等)。
二、ansible-vault 命令行工具:
若要使用 Ansible Vault ,可通过一个名为 ansible-vault 的命令行工具来创建、编辑、加密、解密和查看文件。
注:Ansible Vault 并不实施自有的加密函数,而是使用外部的 Python 工具集。文件通过 AES256 的对称加密(将密码用作机密密钥)方式加以保护,而这种方式尚未得到第三方正式审核。
1、创建加密文件:
要创建新的加密文件,可以使用 ansible-vault create filename 命令。该命令将提示输入新的 vault 密码,同时会利用默认的编辑器 vi 打开文件。
注:(1)除了通过标准输入途径输入 vault 密码外,还可以使用 vault 密码文件来存储 vault 密码。密码文件是以纯文本形式存储加密密码的文件,密码应当在该文件中存储为一行字符串;
(2)由于该文件中包含敏感的纯文本密码,因此密码文件务必要通过文件权限和其他安全措施加以严密保护(在最新的 Ansible 版本中,用于保护文件的密文是 AES256 );
(3)需要使用密码文件时,用户可通过 --vault-password-file 选项进行指定。
2、查看加密文件:
用户可以使用 ansible-vault view filename 命令来查看 Ansible Vault 加密的⽂件,⽽不必打开文件进行编辑。
3、编辑现有加密文件:
编辑现有的加密文件可使用 Ansible Vault 提供的 ansible-vault edit filename 命令。此命令会将文件解密为一个临时文件,并允许用户编辑该文件。而在编辑结束保存文件时,此命令会将其内容进行复制并删除临时文件。
注:edit 子命令会改写文件,因此仅可在进行更改时使用它。若要查看文件的内容而不进行更改,始终应使用 view 子命令。
4、加密现有文件:
使用 ansible-vault encrypt filename 命令可以加密已存在的⽂件。同时 ansible-vault encrypt filename 命令可取多个欲加密⽂件的文件名称作为参数。
若文件已为加密文件或待加密文件没有内容时,执行此命令均会报错。
(1)已加密:
(2)没有内容:
注:使用 --output=OUTPUT_FILE 选项,可将加密⽂件以新的名称进行保存。
5、解密现有文件:
现有的加密⽂件可以通过 ansible-vault decrypt filename 命令进行永久解密。
注:同样,在解密单个⽂件时,也可使用 --output=OUTPUT_FILE 选项将解密⽂件以新的名称进行保存。
6、更改加密文件的密码:
使用 ansible-vault rekey filename 命令可更改加密⽂件的密码,此命令可同时更新多个数据⽂件的密钥,需要提供原始密码和新密码。
注:若更改密码时,用户需要使用 Vault 密码⽂件,可使用 --new-vault-password-file 选项以实现此操作。
三、运行加密 playbook :
如需访问通过 Ansible Vault 加密的 playbook ,则需要向 ansible-playbook 命令提供其加密密码。
1、通过密码文件提供密码:
在执行 playbook 时,使用 --new-vault-password-file 选项可提供加密密码。
注:若运行加密 playbook 时没有提供加密密码,命令将报错。
2、以交互方式提供密码:
若要以交互方式提供 vault 密码,可使用 --vault-id @prompt 选项实现。
用户还可以通过 ansible-navigator 使用多个 Ansible Vault 密码,将多个 --vault-id 选项或 --vault-password-file 选项传递给 ansible-navigator 命令。
注:必须禁用 playbook artifact 才能以交互方式输入 Vault 密码。若 ansible-navigator 命令需要提示用户输入交互式 Vault 密码,并且 playbook artifact 未禁用,则该命令会挂起。
四、禁用 Playbook artifact :
1、命令行:
Playbook artifact 默认处于启用状态,用户可以使用 ansible-navigator --playbook-artifact-enable false 命令禁用 playbook artifact 。
2、修改文件:
另外,用户还可以通过修改项目 ansible-navigator.yml 文件或主目录中的 .ansible-navigator.yml 文件来禁用 playbook artifact 。