使用 Ansible Vault 提升您的 DevOps 安全水平

590 位读者喜欢这篇文章。
Improve your DevOps security game with Ansible Vault

Opensource.com

您可能已经掌握了 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,您将看到类似这样的内容

Up your DevOps security game with Ansible Vault

编辑 Vault 文件与创建文件一样简单

ansible-vault edit vault.yml

您可以将 Ansible 的配置 (ansible.cfg) 指向存储库外部的 vault-password-file。此文件中仅包含您的 Ansible Vault 密码。此步骤消除了每次编辑 Ansible Vault 时都需要输入密码的需要。

vault_password_file = ~/.ansible_vault

当使用多个 Vault 文件(例如 host_varsgroup_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 的可能性是无限的,您的开发和运维可以从其使用中获益匪浅。

Chris Short
开源外交官 | Kubernetes 贡献者 | 退伍残疾军人(肯定在疼痛中) | 底特律 | AWS Kubernetes 团队 | 他/他/他的 | 观点仅代表个人

1 条评论

好文章。我曾考虑过实施 Vault,但认为
这会比这困难得多。您让它看起来很简单。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.