云网牛站
所在位置:首页 > Linux云服务器 > Ansible Vault备忘单/参考指南

Ansible Vault备忘单/参考指南

2019-08-27 21:43:43作者:戴均益稿源:云网牛站

使用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

Ansible Vault备忘单/参考指南

示例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 Vault备忘单/参考指南

要么:

$ 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 

Ansible Vault备忘单/参考指南

如上所示,没有提示输入密码文件。

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

Ansible Vault备忘单/参考指南

然后,我们将定义其他未加密的变量和在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

Ansible Vault备忘单/参考指南

我们来检查创建文件的内容:

$ cat /tmp/vault

# BEGIN ANSIBLE MANAGED BLOCK

Database user: "computingforgeeks"

Database Port: "3306"

Database Password: "MyStrongPassword"

# END ANSIBLE MANAGED BLOCK

 

结论

在本指南中,我们演示了如何使用Ansible Vault加密敏感变量和数据,以便您可以安全地共享项目而不会影响安全性。

 

相关主题

使用Ansible在Ubuntu 18.04/CentOS 7上安装Apache Tomcat

精选文章
热门文章