Ansible Vault参考教程
如何使用Ansible Vault加密敏感数据?
,如何使用Vault保护Ansible PlayBook?
,如何在我的项目上使用Ansible Vault ?.本教程已作为使用拱顶的Ansible爱好者的参考教程/速查表,以确保在ansible项目上工作时加密和安全。
已被证明是所有类的开发人员和Sysadmins的最常用和喜爱的配置管理工具。
通过更多的采用,产生安全问题。
为了保持我们需要保险库的密码或者私钥等敏感信息。
Vault加密数据在运行时自动解密。
Ansible是本教程的要求。
确保系统上安装了Ansible,它提供了我们在整个教程中使用的Ansible-Vault命令行工具。
在开始之前,请为Ansible Vault设置一个默认编辑器。
--- For Bash -- $echo "export EDITOR=vim" >> ~/.bashrc $source ~/.bashrc --- For Zsh -- $echo "export EDITOR=vim" >> ~/.zshrc $source ~/.zshrc
代替 vim
用你最喜欢的编辑。
第1步:安装Ansible/Ansible Vault
在Linux上安装Ansible和大多数UNIX系统的最简单方法是通过Ansible Package Manager - PIP。
安装pip:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py --user
一旦安装了PIP,请使用它来安装Ansible。
pip install --user ansible
第2步:使用Ansible Vault
在本节中,我们将看到许多关于如何使用Ansible Vault的示例。
这 ansible-vault
命令用于管理Ansible中的加密内容。
使用它,我们可以创建,编辑,查看和解密加密文件。
示例1:创建新的加密文件
要创建使用Vault加密的新文件,请使用"创建"选项并追加文件的名称。
例如,要创建名为create_users.yml的加密yaml文件,它将包含敏感数据,运行:
$ansible-vault create create_users.yml
系统将提示我们输入并确认安全密码:
New Vault password: Confirm New Vault password:
然后,Ansible将打开一个编辑窗口,供我们输入所需的内容。
示例2:加密现有文件
对于现有文件,请使用ansible-vault encypt命令设置密码。
$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 30653331363933343563396461623132623437636232373462646538333736666531333732353033 3134666133626361623330376534336632633462643233650a386137626561663938313463396236 63376166313530636461306636623638623835666263326431646333663665313563373766643039 6337393539396562360a643237346262353461303738663134383739366532613538653635383466 3634
示例3:编辑加密文件
要编辑加密文件,请使用命令ansible-vault编辑命令。
$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加密文件
我们可以在不打开窗口编辑器的情况下查看Vault加密文件的内容。
为此,我们将使用命令Ansible-Vault视图。
$ansible-vault view create_users.yml
在可以显示内容之前,应要求我们要求输入文件密码。
Vault password: Secret information
示例6:解密Vault加密文件
如果我们不再需要加密,则可以使用Ansible-Vault Decrypt命令解密Vault加密文件。
$ansible-vault decrypt myfile.yml
为文件提供加密密码。
Vault password: Decryption successful
在解密后,我们将能够看到文件的实际内容。
示例7:使用Vault加密文件执行Ansible
一旦加密敏感数据,我们显然希望运行一个Ansible PlayBook,以某种方式引用加密数据。
如果提供了正确的密码,Ansible和Ansible-PlayBook命令可以解密保管库受保护的文件。
使用密码提示
对于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 Vault password: PLAY [Run presetup on OSP nodes] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** TASK [Gathering Facts] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ** ...................................................................................
或者
$ansible-playbook -i hosts osp-pre.yml --vault-id @prompt Vault password (default):
使用密码文件
如果要在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 PLAY [Run presetup on OSP nodes] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** TASK [Gathering Facts] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **
如上所述,输入密码文件没有提示。
设置ansible_vault_password_file环境变量
如果不喜欢提供密码标志或者使用交互式密码提示,则可以配置ASSIBLE以自动读取密码文件。
这是通过将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 62383961353832333263356333356465633635633731393039303834623832626162613235343930 6238663730366237616639326233393361626639616136300a393665326434633438613436316630 61656261616132366436646434393833613064326531346631666630616535663535353038666135 3732333338313739340a656434633336666662393161393663303662616264643364313630383163 30643763323038396161316339663037353632626462626233363836346461656238393035623533 6531353930326133656165326130303661303965316464306330
然后,我们将定义在Vault变量中加密的其他未加密的变量和引用。
$vim vars/plain.yml db_user: theitroad 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 Vault password: PLAY [Create users] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ***** TASK [Gathering Facts] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ** ok: [localhost] TASK [Include vars] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ***** ok: [localhost] TASK [Generate dummy variables data] ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** changed: [localhost] PLAY RECAP ** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** ** localhost : ok=3 changed=1 unreachable=0 failed=0
让我们检查创建文件的内容。
$cat /tmp/vault # BEGIN ANSIBLE MANAGED BLOCK Database user: "theitroad" Database Port: "3306" Database Password: "MyStrongPassword" # END ANSIBLE MANAGED BLOCK