您可能已经掌握了 DevOps 工作的编排,但您应该持续努力提升此类实施方案的运维成熟度。我使用的工具之一是红帽的 Ansible,它在编排和配置管理方面非常出色。Ansible 的低门槛和简洁性是许多初学者爱上它的原因。
Ansible 中开发人员应更频繁使用的一个功能是 Ansible Vault。
根据其文档,最新版本的 Ansible Vault (1.5) 允许将“敏感数据(如密码或密钥)保存在加密文件中,而不是以纯文本形式保存在 playbook 或角色中。然后,这些 Vault 文件可以分发或放置在源代码控制中。”
通常,私有 SSL 证书、API 密钥和其他敏感数据会通过 GitHub 或其他意外方式泄露给公众。Ansible Vault 通过 AES256 加密您的密钥,以便您可以安全地将它们与您的 Ansible Playbook 和清单一起存储。
创建 Vault 文件非常简单
ansible-vault create vault.yml
系统将提示您输入密码,您需要与需要访问 Vault 的其他人共享此密码。输入您的变量、密钥等,并在完成后保存文件。如果您尝试在文本编辑器中编辑 vault.yml
,您将看到类似这样的内容
编辑 Vault 文件与创建文件一样简单
ansible-vault edit vault.yml
您可以将 Ansible 的配置 (ansible.cfg
) 指向存储库外部的 vault-password-file。此文件中仅包含您的 Ansible Vault 密码。此步骤消除了每次编辑 Ansible Vault 时都需要输入密码的需要。
vault_password_file = ~/.ansible_vault
当使用多个 Vault 文件(例如 host_vars
和 group_vars
)时,这还允许一个巧妙的技巧。如果您有一个包含 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 的可能性是无限的,您的开发和运维可以从其使用中获益匪浅。
1 条评论