如何使用Vault保护Ansible机密

时间:2020-01-09 10:34:22  来源:igfitidea点击:

我们通过Ansible设置的几乎每个Web应用程序或者服务器配置都将具有某种形式的敏感信息。它可能是数据库服务器的凭据,用户帐户信息,也可能是安全系统的私钥。我们如何保护数据免遭窥视?我们使用保管库。

在本教程中,我将首先向我们展示如何使用Ansible Vault通过AES256加密技术对数据进行加密。这是一种保护敏感数据免遭窥视的相对安全的方法,对于任何向Ansible介绍自己的人来说,这都是一个好的开始。

学习了Ansible Vault后,我们将深入研究Hashicorp Vault,这是一种更安全的秘密存储方法。

Ansible Vault

处理加密文件

创建一个加密的文件
Ansible Vault的create命令允许我们创建一个新的空白文件,该文件将受到保护

ansible-vault create my-secrets

加密现有文件

ansible-vault encrypt my-secrets

编辑加密文件

ansible-vault edit my-secrets

在Ansible Playbook中使用加密文件

在某个时候,我们的安全信息将需要从加密文件中提取。让我们看一下如何从保管库中提取信息并将其用于我们的剧本。

HashicorpVault库

使用Ansible Vault的问题在于,加密的数据可能会与剧本一起存储在版本控制系统中。这会带来很大的风险,因为它可能使那些本不应该访问敏感数据的人能够下载文件。

现在,按照当今的标准,AES256是一种非常强大的加密技术。在宇宙的尽头之前,有人可能会强行使用AES256加密文件的可能性是极不可能的。但是,AES256的较差实现可能会在加密中引入错误,从而使其在发现时易于解密。在本地存储加密数据时,应牢记这一点。

一种更安全的解决方案是使用外部保管库来保护敏感数据。尽管它仍使用AES256,但数据驻留在主机之外,这对安全性有巨大的改进。 Hashicorp Vault是一项服务,使我们可以安全地将密钥对数据存储在游戏簿之外。然后,当我们进行供应或者部署时,我们可以从金库中提取秘密。

需求

Ansible无法开箱即用访问Hashicorp Vault。我们将需要安装以下Python模块才能与保管库进行交互。

  • hvac
  • hvac [解析器]

向剧本添加Vault查询

我们将通过调试模块对库进行查找。然后,输出将被注册为变量,我们可以在整个游戏手册中使用该变量。

---
- hosts: all
  become: true
  vars:
    db_user: "{{ lookup('hashi_vault', 'secret=theitroad/db_user:value token=c30aa90a-06a8-680d-8bd1-a43181c3b77c url=https://vault.server:8200')}}"
    db_pass: "{{ lookup('hashi_vault', 'secret=theitroad/db_user:value token=c30aa90a-06a8-680d-8bd1-a43181c3b77c url=https://vault.server:8200')}}"

  tasks:
    - name: Deploy application
      git:
        repo: github.com/example/my-application.git

    - name: Configure webapp
      copy:
        dest: "/srv/my-application/configuration
        content: "db_user: {{db_user}}\ndb_pass: {{db_pass}}"
        owner: appuser
        group: appuser
        mode: 0600

在上面的示例剧本中,我们使用查找来注册两个变量db_user和db_pass。这些查询查询我们的Hashicorp Vault服务器,并检索我们存储的机密值。

Ansible Vault与Hashicrop Vault

我们向我们展示了两种保护秘密的方法,但是我们应该使用哪种方法呢?这在很大程度上取决于环境以及数据的安全性。