使用Ansible Vault加密敏感数据?如何使用Vault保护Ansible Playbooks?如何使用Ansible Vault?本指南是作为Ansible爱好者使用Vault的参考指南/备忘单完成的,以确保在使用Ansible Projects时加密和保护数据。事实证明,Ansible是所有类的开发人员和SysAdmins中使用最多且最喜欢的配置管理工具,随着更多的采用,出现了安全问题,要保护密码或私钥等敏感信息,您需要Vault,保管库加密的数据在运行时自动解密。 Ansible是本指南的要求,确保Ansible已安装在您的系统上,该系统提供了我们将在整个指南中使用的ansible-vault命令行工具,在开始之前,请为Ansible Vault设置默认编辑器。 对于Bash: $ echo "export EDITOR=vim" >> ~/.bashrc $ source ~/.bashrc 对于Zsh: $ echo "export EDITOR=vim" >> ~/.zshrc $ source ~/.zshrc 用您喜欢的编辑器替换vim,参考玩转Linux必备的Vim技能,一文读懂Vim的安装和配置,学习之法。
第1步:安装Ansible/Ansible Vault 在Linux和大多数Unix系统上安装Ansible的最简单方法是通过Ansible包管理器-pip。 安装pip: curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py --user 参考:在Debian 10系统上为Python 2/3安装和使用Pip的方法。 一旦安装了pip,用它来安装Ansible: pip install --user ansible 参考:在Ubuntu 18.04系统中安装Ansible 2.7.5的方法。
第2步:使用Ansible Vault 在本节中,我们将看到许多关于如何使用Ansible Vault的示例,ansible-vault命令用于管理Ansible中的加密内容,有了它,您可以创建、编辑、查看和解密加密文件。 示例1:创建新的加密文件 要创建使用Vault加密的新文件,请使用create选项并附加文件名,例如,要创建一个名为create_users.yml的加密YAML文件,该文件将包含敏感数据,请运行: $ ansible-vault create create_users.yml 系统将提示您输入并确认安全密码: New Vault password: Confirm New Vault password: 然后Ansible将打开一个编辑窗口,供您输入所需内容。 示例2:加密现有文件 对于现有文件,请使用ansible-vault encrypt命令设置密码: $ echo "SecurePassword" > passwords.txt $ ansible-vault encrypt passwords.txt New Vault password: Confirm New Vault password: Encryption successful 这将用加密文件替换未加密的文件: $ cat passwords.txt $ANSIBLE_VAULT;1.1;AES256
示例3:编辑加密文件 要编辑加密文件,请使用命令ansible-vault edit命令: $ ansible-vault edit passwords.yml 这将要求您输入文件密码: Vault password: 示例4:更新加密密码 您始终可以使用ansible-vault rekey命令更新加密密码: $ ansible-vault rekey create_users.yml Vault password: New Vault password: Confirm New Vault password: Rekey successful 在提示时输入旧密码和新密码进行设置,更新后,可以使用新密码访问该文件。 示例5:查看Ansible加密文件 您无需打开窗口编辑器即可查看保险加密文件的内容,为此,您将使用命令ansible-vault视图: $ ansible-vault view create_users.yml 在显示内容之前,应该要求您输入文件密码: Vault password: Secret information 示例6:解密Vault加密文件 如果您不再需要加密,则可以使用ansible-vault decrypt命令解密文件库加密文件: $ ansible-vault decrypt myfile.yml 为文件提供加密密码: Vault password: Decryption successful 解密后,您将能够看到文件的实际内容。 示例7:使用Vault加密文件执行Ansible 加密敏感数据后,您显然希望运行以某种方式引用加密数据的Ansible playbook,如果提供了正确的密码,ansible和ansible-playbook命令可以解密受保护的文件。 1]、使用密码提示 对于playbook执行,传递--ask-vault-pass参数: $ ansible-playbook --ask-vault-pass <vault-encrypted-playbook-file>.yaml 对于Ansible大于或等于2.4,您可以使用–vault-id @prompt参数。 见下面的例子: $ ansible-playbook --ask-vault-pass -i hosts osp-pre.yml
要么: $ ansible-playbook -i hosts osp-pre.yml --vault-id @prompt Vault password (default): 2]、使用密码文件 如果您想在Playbook执行期间避免交互式密码提示,请考虑将Ansible Vault与密码文件一起使用。 创建密码文件: $ echo 'MyStrongVaulPassword' > .ansible_vault_pass 对于使用版本控制系统(如git)的人,请考虑将.ansible_vault_pass文件添加到被忽略文件列表中: $ echo '.ansible_vault_pass' >> .gitignore 现在运行ansible或ansible-playbook命令时引用密码文件: $ ansible --vault-password-file=.ansible_vault_pass ... $ ansible-playbook --vault-password-file=.ansible_vault_pass .... 例: $ ansible-playbook --vault-password-file=.ansible_vault_pass -i hosts osp-pre.yml
如上所示,没有提示输入密码文件。 3]、设置ANSIBLE_VAULT_PASSWORD_FILE环境变量 如果您不想提供密码标记或使用交互式密码提示,则可以将Ansible配置为自动读取密码文件,这是通过将ANSIBLE_VAULT_PASSWORD_FILE环境变量设置为密码文件的路径来实现的: export ANSIBLE_VAULT_PASSWORD_FILE=./.ansible_vault_pass 要保留配置,请在本地ansible.cfg文件中进行设置: $ vim ansible.cfg [defaults] ........ vault_password_file = ./.ansible_vault_pass Ansible将使用配置密码进行所有加密和创建操作。 示例8:仅加密敏感变量 在具有协作的理想自动化领域,您只需要加密敏感数据,例如数据库密码、API密钥、用户凭证。 创建加密变量文件: $ vim vars/vault.yml vault_db_pass: MyStrongPassword $ ansible-vault encrypt vars/vault.yml New Vault password: Confirm New Vault password: Encryption successful 确认它已加密: $ cat vars/vault.yml $ANSIBLE_VAULT;1.1;AES256
然后,我们将定义其他未加密的变量和在Vault变量中加密的引用: $ vim vars/plain.yml db_user: computingforgeeks db_port: 3306 db_pass: "{{ vault_db_pass }}" 请注意,我们使用Jinja2模板来引用受保管库文件中定义的变量。 创建Playbook文件: $ vim vault.yml --- - name: Create users hosts: localhost tasks: - name: Include vars include_vars: dir: vars - name: Generate dummy variables data blockinfile: path: /tmp/vault block: Database user: "{{ db_user }}" Database Port: "{{ db_port }}" Database Password: "{{ db_pass }}" 运行playbook: $ ansible-playbook --connection=local vault.yml --ask-vault-pass
我们来检查创建文件的内容: $ cat /tmp/vault # BEGIN ANSIBLE MANAGED BLOCK Database user: "computingforgeeks" Database Port: "3306" Database Password: "MyStrongPassword" # END ANSIBLE MANAGED BLOCK
结论 在本指南中,我们演示了如何使用Ansible Vault加密敏感变量和数据,以便您可以安全地共享项目而不会影响安全性。
相关主题 |