Ansible 用 Vault 管理敏感资料

导入 Ansible 组态工具,多少会使用明文 (Plain text) 在 Playbooks 里存放敏感资料 (sensitive data) 1,更别说我们还会搭配 Git 版本系统使用,这很可能会造成潜在的资安风险!接下来冻仁将通过 Vault 这个保险库系统强化资料安全

Vault 是什么?

Vault 就字面上的意义有地窖、保险库的意思。在 Ansible 里是指加密、解密档案的技术。

Ansible 从 v1.5 开始支持此功能,预设使用 AES 加密技术,其详细说明可参考 Vault | Ansible Documentation 官方文件。

2016-12-30-ansible-vault-1.png

怎么使用 Vault?

在进入实作之前,先来看看 Vault 的使用方法。

  1. 建立加密 (Encrypted) 档案。$ ansible-vault create foo.yml
  2. 编辑加密档案内容。$ ansible-vault edit foo.yml
  3. 更换加密金钥 (密码)。$ ansible-vault rekey foo.yml
  4. 对已存在的明文档案进行加密$ ansible-vault encrypt foo.yml
  5. 解开 (Decrypt) 已加密档案。$ ansible-vault decrypt foo.yml
  6. 检视已加密的档案内容。$ ansible-vault view foo.yml

怎么在 Playbooks 里使用 Vault?

以下将借由简单的实作来展示 Playbook 搭配 Vault 的使用方法。

  1. 建立 Playbook。$ vi hello_world.yml --- - name: say 'hello world' hosts: all vars_files: - defaults/main.yml tasks: - name: echo 'hello world' command: echo 'hello ' register: result - name: print stdout debug: msg: "" # vim: ft=ansible :
  2. 建立变数档案。$ vi defaults/main.yml world: 'ironman'
  3. 将变数档案进行加密:过程中需输入两次密码。$ ansible-vault encrypt defaults/main.yml New Vault password: Confirm New Vault password: Encryption successful
  4. 检视已加密的档案内容:使用刚刚输入的密码进行检视。$ ansible-vault view defaults/main.yml Vault password: world: 'ironman'

手动输入金钥 (密码) 解密

  1. 执行 Playbook 并搭配 --ask-vault-pass 参数手动输入密码。$ ansible-playbook hello_world.yml --ask-vault-pass
  2. 或通过 ansible.cfg 启用 ask_vault_pass,其预设值为 false。
    1. 设定 ansible.cfg$ vi ansible.cfg

[defaults]

ask_vault_pass = true

执行 Playbook。

$ ansible-playbook hello_world.yml

透过金钥 (密码) 档解密

  1. 建立密码档:此例用的密码为 bGpvxx$ echo 'bGpvxx' > secret.txt
  2. 执行 Playbook 并搭配 --vault-password-file 参数指定金钥路径。$ ansible-playbook hello_world.yml --vault-password-file secret.txt
  3. 或于 ansible.cfg 里新增 vault_password_file 参数,并指定金钥路径。$ vi ansible.cfg

[defaults]

vault_password_file = secret.txt

最后附上冻仁的实作画面。

2016-12-30-ansible-vault-2.gif
  • 当 include 到 defaults/main.yml 密文 (Cipher text) 档后,需先用 Vault 解开才可继续执行。

后话

或许大家觉得在本机储存敏感资料很安全,谁又能保证传输过程中能不被窃取呢?

越方便的工具往往伴随著越大的资安风险,但至少我们可以先从档案加密著手。

LEAVE A COMMENT