尝试使用 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」。