尝试使用 Ansible Vault

Ansible 1.5 发布于2014年2月28日。

本次的主要功能是 Ansible Vault。使用者可以通过它来加密不想直接存储在 Git 等地方的密码,以及 AWS 等 API 密钥。

这新增了ansible-vault命令。


2015年5月12日追加
Ansible 1.8新增了视图(subcommand)功能。
(后来,1.8.3修复了用于视图的临时文件权限问题,因此建议使用最新版本)


那么我将试一试。

创建测试用的 Playbook

首先,我们将创建一个无需使用密码的测试用Playbook。

localhost ansible_connection=local
---
- hosts: localhost
  gather_facts: no
  vars_files:
    - private.yml
  tasks:
    - debug: msg="password = {{ password }}"
---
password: 'hogehoge'

确认测试用的 Playbook

$ ansible-playbook -i hosts site.yml 

PLAY [localhost] ************************************************************** 

TASK: [debug msg="password = hogehoge"] *************************************** 
ok: [localhost] => {
    "msg": "password = hogehoge"
}

PLAY RECAP ******************************************************************** 
localhost                  : ok=1    changed=0    unreachable=0    failed=0

已经确认了 Playbook 的操作。

请使用Vault进行加密

那么,我们使用ansible-vault对private.yml进行加密。您将被要求输入密码以进行加密。

$ ansible-vault encrypt private.yml 
Vault password: 
Confirm Vault password: 
Encryption successful

私の唯一のオプションは、以下のように中国語で言い換えることです:
加密的 private.yml 文件的内容如下。目前看来,密码似乎只使用 AES(在 1.5.1 版本中更改为 AES256),但将来可能会有选择的余地。

$ANSIBLE_VAULT;1.0;AES
53616c7465645f5fcc735bd59e5a55875bf96e5b184181ebc13c4ce1b6b813315fd7bfbe384038b1
4d93ece05905d8f9618080fb8e4f3ec04693e9592299f6347add4bf94e57e83d6615236a83dae0a9
5e4400964c944c90d99cba6bf587f168e4ab2dc0774e91b3beadf5c7160a9072

使用加密文件的 Playbook

如果对文件进行加密,则无法使用相同的命令执行Playbook,会出现要求输入密码的错误而无法执行。

$ ansible-playbook -i hosts site.yml 
ERROR: A vault password must be specified to decrypt data

使用–ask-vault-pass选项以提示输入密码,或使用–vault-password-file=VAULT_PASSWORD_FILE选项指定包含密码的文件。

$ ansible-playbook -i hosts site.yml --ask-vault-pass
Vault password: 

PLAY [localhost] ************************************************************** 

TASK: [debug msg="password = hogehoge"] *************************************** 
ok: [localhost] => {
    "msg": "password = hogehoge"
}

PLAY RECAP ******************************************************************** 
localhost                  : ok=1    changed=0    unreachable=0    failed=0

在同一个 Playbook 中处理多个加密文件时,需要确保所有密码都是相同的。

由于对文件进行了完全加密,所以很难知道定义了哪些变量,有点不方便呢。Jan-Piet Mens:我对Ansible的保险库的想法。

ansible-vault 命令

ansible-vault 命令包括创建、加密、解密、重置密钥和编辑这几个子命令。

    • create

新規に暗号化されたファイルを作成します

encrypt

既存のファイルを暗号化します

decrypt

暗号化されたファイルを復号化します

edit

暗号化されたファイルをそのまま編集します

rekey

パスワードを変更します

view

暗号化されたファイルを復号して PAGER で表示します

我在写的时候思考着:“’復号化します’这个表达是否正确呢?”

补充

记得也要看一下「巧妙使用 Ansible Vault」。

广告
将在 10 秒后关闭
bannerAds