一、啥是Ansible Vault
咱先说说Ansible Vault是个啥。简单来讲,它就是Ansible里用来加密敏感数据的工具。在咱们用Ansible写Playbook的时候,经常会用到一些密码、密钥之类的敏感信息。要是把这些信息明文放在Playbook里,那可太不安全了,万一被别人看到,那麻烦可就大了。有了Ansible Vault,咱们就能把这些敏感数据加密起来,只有知道密码的人才能解密使用。
比如说,咱们有个Playbook要连接到远程服务器,需要用到服务器的密码。如果直接把密码写在Playbook里,就像这样:
# 技术栈:YAML
- name: Connect to remote server
hosts: remote_server
vars:
server_password: "plaintext_password" # 这里直接写明文密码,不安全
tasks:
- name: Execute command on remote server
command: ls -l
become: true
become_password: "{{ server_password }}"
这多危险啊,要是别人拿到这个Playbook,密码就泄露了。用Ansible Vault加密后,情况就不一样了。
二、怎么创建加密文件
1. 创建新的加密文件
要创建一个新的加密文件,咱们可以用下面这个命令:
# 技术栈:Shell
ansible-vault create secret.yml
执行这个命令后,它会让你输入一个密码,这个密码就是用来加密和解密文件的。输完密码,就会打开一个文本编辑器,你可以在里面写你要加密的内容。比如:
# 技术栈:YAML
# 这是一个加密文件,存储数据库的用户名和密码
db_username: "admin"
db_password: "super_secret_password"
保存退出后,这个文件就被加密了。
2. 加密已有的文件
要是已经有一个文件,想把它加密,也很简单:
# 技术栈:Shell
ansible-vault encrypt existing_file.yml
输入密码后,这个文件就被加密了。以后再打开这个文件,看到的就是一堆乱码,只有用正确的密码解密后才能看到里面的内容。
三、怎么解密和编辑加密文件
1. 解密文件
如果需要查看或修改加密文件的内容,就得先解密。可以用这个命令:
# 技术栈:Shell
ansible-vault decrypt secret.yml
输入密码后,文件就被解密了,又能看到明文内容了。
2. 编辑加密文件
要是想直接编辑加密文件,不用先解密再编辑,也有办法:
# 技术栈:Shell
ansible-vault edit secret.yml
执行这个命令后,会让你输入密码,输入正确密码后,就会打开文本编辑器,你可以直接在里面修改内容。修改完保存退出,文件会自动重新加密。
四、在Playbook里使用加密数据
1. 引用加密文件
在Playbook里引用加密文件很简单。比如,前面咱们创建了一个加密的secret.yml文件,里面存了数据库的用户名和密码。在Playbook里可以这样引用:
# 技术栈:YAML
- name: Use encrypted data in playbook
hosts: localhost
vars_files:
- secret.yml # 引用加密文件
tasks:
- name: Print database username and password
debug:
msg: "Database username: {{ db_username }}, password: {{ db_password }}"
执行这个Playbook的时候,需要提供加密文件的密码。可以用--ask-vault-pass参数:
# 技术栈:Shell
ansible-playbook playbook.yml --ask-vault-pass
输入密码后,Playbook就能正常运行,并且能正确读取加密文件里的数据。
2. 加密单个变量
除了加密整个文件,还可以加密单个变量。比如:
# 技术栈:Shell
ansible-vault encrypt_string "super_secret_password" --name 'db_password'
这个命令会把super_secret_password加密,并且给它起个名字叫db_password。加密后的内容可以直接复制到Playbook里:
# 技术栈:YAML
- name: Use encrypted variable in playbook
hosts: localhost
vars:
db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
33373063323466343432623837363036333833333637343634343336373031303436343437383338
323233323231333132323433313235323632373834303531343631343630333333340a3533343331
36343433313530373333333333323432363337363736363331343232363634343333333335373430
3431343330313335330a363131353435333238333133313136343436313032333436363136353334
333336333734323733
tasks:
- name: Print encrypted variable
debug:
msg: "Database password: {{ db_password }}"
执行这个Playbook的时候,同样需要提供密码。
五、应用场景
1. 生产环境部署
在生产环境里,服务器的登录密码、数据库的连接密码等都是非常敏感的信息。用Ansible Vault加密这些信息后,在部署过程中就能保证数据的安全性。比如,要在多台服务器上部署一个应用,需要连接到数据库,就可以把数据库的用户名和密码加密存储,然后在Playbook里引用。
2. 团队协作
在团队开发中,不同的成员可能会有不同的权限。用Ansible Vault加密敏感数据后,可以只把解密密码告诉有需要的成员,这样能提高数据的安全性,也能更好地管理权限。
六、技术优缺点
1. 优点
- 安全性高:加密后的数据只有知道密码的人才能解密,大大提高了数据的安全性。
- 使用方便:Ansible Vault提供了简单的命令来创建、加密、解密和编辑加密文件,使用起来很方便。
- 与Ansible集成好:可以直接在Playbook里引用加密文件和变量,无缝集成到Ansible的工作流程中。
2. 缺点
- 密码管理麻烦:需要妥善管理加密密码,如果密码丢失,加密的数据就无法解密了。
- 性能影响:加密和解密操作会消耗一定的系统资源,在处理大量数据时可能会影响性能。
七、注意事项
1. 密码安全
加密密码一定要妥善保管,不能泄露。可以把密码存放在安全的地方,比如密码管理器里。另外,定期更换密码也是个好习惯。
2. 备份加密文件
在对加密文件进行修改或操作之前,最好先备份一份。万一操作失误,还能恢复到之前的状态。
3. 环境一致性
在不同的环境里使用Ansible Vault时,要保证加密密码的一致性。否则,可能会导致解密失败。
八、文章总结
通过使用Ansible Vault,咱们可以很方便地加密Playbook里的敏感数据,像密码、密钥之类的。它能大大提高数据的安全性,避免敏感信息泄露。咱们可以创建加密文件,也可以加密单个变量,还能在Playbook里直接引用这些加密数据。不过,在使用过程中要注意密码的安全管理,定期备份加密文件,保证不同环境里密码的一致性。总之,Ansible Vault是个非常实用的工具,能让咱们的Ansible Playbook更加安全可靠。
评论