Ansible Vault 加密您的秘密
Posted AnsibleOps
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible Vault 加密您的秘密相关的知识,希望对你有一定的参考价值。
您可能已经确定了您的 DevOps 工作流程,但您应该继续努力改进此类实施的运营成熟度。我使用的一个工具是 RedHat 的 Ansible,这对于编排和配置管理来说非常棒。Ansible的低进入门槛和简单性就是为什么很多开始使用它的人学会去爱它。
Ansible 中的一个特性是开发人员应该更经常使用Ansible Vault。
一、 了解 Ansible Vault 如何保护数据
从 Ansible 1.5 版本开始, Ansible 提供了 vault 数据安全解决方案,允许保存“加密文件中的密码或密钥等敏感数据,而不是作为剧本或角色中的纯文本,这些文件可以分散存放或放在源代码管理”。
私人 SSL 证书,API 密钥和其他敏感数据通常在 GitHub 上公布,或者通过其他一些非预期的手段。 Ansible Vault 通过 AES256 加密您的秘密,以便您可以安全地将它们存储在 Ansible Playbooks 和库存中。
二、 如何使用 ansible-vault
创建一个 vault 文件是很简单的:
ansible-vault create vault.yml
您将被提示输入密码,这个文件将会被共享给那些需要访问这个 vault 文件的人。你输入你的变量,保密内容等,并保存文件。 如果您尝试在文本编辑器中编辑 vault.yml,您将看到如下所示的内容:
more vault.yml
$ANSIBLE_VAULT;1.1;AES256
33643630303032313239633430383937383333363739356266653866376533313364323339313066
3431366162613731333363326339306432623130356433650a373335303934353934616330316262
37306431643066333937326339306432346235333739663031633066326361363332323166316265
3437633363643665360a303631313630616533356330626531356437616566383761313362616539
65623839616338313136306233306639366634393038333962636331323434353765
编辑 vault 文件与创建文件一样简单:
ansible-vault edit vault.yml
变更加密数据秘钥:
$ ansible-vault rekey vault.yml
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
对于已经存在的文档加密
ansible-vault encrypt vault.yml
三、使用Vault加密的文件运行Ansible
3.1 实践场景1: 加密主机清单
主机清单文件:
$ cat hosts
[svrs]
app1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=30022
app2 ansible_ssh_host=127.0.0.1 ansible_ssh_port=30023
app3 ansible_ssh_host=127.0.0.1 ansible_ssh_port=30024
[svrs:vars]
ansible_ssh_user=root
ansible_ssh_pass=shroot
使用密码加密主机清单:
ansible-vault encrypt hosts
New Vault password:
Confirm New Vault
password: Encryption successful
查看加密文件内容:
cat hosts
$ANSIBLE_VAULT;1.1;AES256
35306634313362653239363033373637323966383639313536633438323864303464313664643132
3662393535643830653335656137653433616235646462630a333333353563363961373362613866
35636138626563393031653031366363613932356264643230663066356562343933343162303262
3733396435616466340a313033336461363361326166373334656339373662656636336636383132
32393163653866343632363661396230393961386639663563303765626134346162326132343333
使用加密的主机清单文件运行 ansible, 这时会提示错误
ansible svrs -i hosts -m ping
ERROR! ERROR! Decryption failed
加入参数—ask-vault-pass 才可以运行
ansible svrs -i hosts -m ping --ask-vault-pass
Vault password:
app2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
app3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
app1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
3.2 实践场景2: 使用 Vault 创建用户
1) 建立 playbook
cat create_user.yml
---
- name: create user account
hosts: all
become: yes
vars_files:
- secret.yml
tasks:
- name: create users from secret.yml
user:
name: "{{ item.name }}"
password: "{{ item.pw | password_hash('sha512') }}"
with_items: "{{ newusers }}"
2) 创建用户变量文件
ansible-vault create secret.yml
newusers:
- name: user1
pw: user001
- name: user2
pw: user002
3) 运行 playbook
ansible-playbook create_user.yml --ask-vault-pass
四、Ansible Vault 小技巧
您可以将 Ansible 的配置(ansible.cfg)指向存储库外部的 vault 密码文件。所有进入这个文件的是你的 Ansible vault 密码。 这样您不需要每次编辑 Ansible vault 文件时都要输入密码:
vault_password_file = ~/.ansible_vault
当使用多个Vault文件,如 host_vars 和 group_vars,Ansible Vault 也有很好的技巧。如果你有一个包含你的 vault 文件的目录,你可以从所有 vault 文件中通过 grep 找出某个变量。
ls -1 | while read N ;
do
echo -n $N: ;
ansible-vault --vault-password-file ~/.ansible_vault view $N | grep STRING ;
done
另一个漂亮的窍门是用 Ansible Vault 加密 SSL / TLS 密钥。 这样你可以让它们和他们的配置处于版本控制中。你可以用一个简单的命令加密你的密钥:
ansible-vault encrypt private.pem
然后,您可以通过查找将您的密钥作为变量调用,并将其部署到远程系统上的文件中:
- hosts: host.domain.tld
vars:
- private_key: "{{ lookup('file', 'files/private.pem') }}"
tasks:
- name: Place certs on systems
copy:
content: {{ item.content }}
dest: /etc/pki/tls/certs/{{ item.dest }}
owner: root
group: root
mode: {{ item.mode }}
with_items:
- { content: "{{ private_key }}", dest: 'private.pem', mode: '0600' }
您的解密私钥将登陆系统,以备即时使用。
正如你所看到的,Ansible Vault 的可能性是无止境的,你的开发和运营可以从它的使用中受益。
以上是关于Ansible Vault 加密您的秘密的主要内容,如果未能解决你的问题,请参考以下文章