Help us understand the problem. What is going on with this article?

Ansible Vault を試す

More than 5 years have passed since last update.

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 を作成します。

hosts
localhost ansible_connection=local
site.yml
---
- hosts: localhost
  gather_facts: no
  vars_files:
    - private.yml
  tasks:
    - debug: msg="password = {{ password }}"
private.yml
---
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になりました)だけっぽいですが、将来は選べるようになりそう。

private.yml
$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 を賢く使う」も見てね

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした