Ansible 1.5 が 2014/2/28 にリリースされました。
Ansible 1.5 Released
今回の目玉機能が Ansible Vault です。Git などにそのまま登録したくないパスワードやAWSなどのAPIキーなどを暗号化することができます。
ansible-vault コマンドが追加されました。
2015/5/12 追記
Ansible 1.8 で view サブコマンドが追加されています。
(その後 1.8.3 で view のためのテンポラリファイルの権限問題が修正されているので最新版を使いましょう)
それでは試してみます。
テスト用 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 の中身は次のようになっています。cipher は今のところ 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 :: My thoughts on Ansible's vault
ansible-vault コマンド
ansible-vault
コマンドには create
, encrypt
, decrypt
, rekey
, edit
というサブコマンドがあります。
- create
- 新規に暗号化されたファイルを作成します
- encrypt
- 既存のファイルを暗号化します
- decrypt
- 暗号化されたファイルを復号化します
- edit
- 暗号化されたファイルをそのまま編集します
- rekey
- パスワードを変更します
- view
- 暗号化されたファイルを復号して PAGER で表示します
(「復号化します」っていう表現は正しいのだろうか?とか書きながら思った)
追記
「Ansible Vault を賢く使う」も見てね