ansible vault 暗号化

便利なので記事として書いて置く

varsは書くrole毎に管理してもいいが環境が複数ある場合はgroup_varsとして管理するのが楽

そこにパスワードを直で書いてgitとかで見える形で置いて置くのはちょっとやだ

ディレクトリ構成

[code lang=text] astel-no-MacBook-Pro% cd group_vars

astel-no-MacBook-Pro% ls dev production

astel-no-MacBook-Pro% tree . ├── dev │   ├── vars.yml │   └── vault.yml └── production ├── vars.yml └── vault.yml

2 directories, 4 files [/code]

inventory

[code lang=text] [test] astail.net ansible_ssh_port=2222

[production:children] test [/code]

こうすることでproduction環境はgroup_vars/production/vars.yml を読んでくれる

vars.yml 例

[code lang=text] astel-no-MacBook-Pro% cat vars.yml deploy_branch: master mysql_passwd: "{{ vault_production.mysql_passwd }}" [/code]

vault.yml 例

[code lang=text]

astel-no-MacBook-Pro% cat vault.yml

vault_production: mysql_passwd: qaswedrftgyhujikol [/code]

このように書ける

ここからvault.ymlを暗号化する

ansible-vault ansible バージョン 1.5で登場したらしい もう2系だしずいぶん前の話

オプションはいろいろあるけど2つしか使ってない。。。

暗号化 ansible-vault encrypt vault.yml

複合化 ansible-vault decrypt vault.yml

暗号化してみる

[code lang=text]

astel-no-MacBook-Pro% cat vault.yml

vault_production: mysql_passwd: qaswedrftgyhujikol

astel-no-MacBook-Pro% ansible-vault encrypt vault.yml New Vault password: Confirm New Vault password: Encryption successful

astel-no-MacBook-Pro% cat vault.yml $ANSIBLE_VAULT;1.1;AES256 34646661306462306236363030306662306133393537666139393330336261646235393831316334 3339626461353730336232366630343134646661646561310a656566666531376333623439386531 39353532663866373163623964613930303363333635373037643437616361343132323362383530 6133306336396639610a626434366434363239383332633230333833363839393765303731663431 65303837383566663664663366353965313531346234653361353236393264643639306462663664 33353137363934386166653932363631623435626334643837353331383531363932386166666536 663931383866653832353135386234626534 [/code]

パスワードは一文字でもいけた

複合

[code lang=text] astel-no-MacBook-Pro% ansible-vault decrypt vault.yml Vault password: Decryption successful

astel-no-MacBook-Pro% cat vault.yml

vault_production: mysql_passwd: qaswedrftgyhujikol [/code]

暗号化してplaybookを流す場合はオプションとして --ask-vault-pass を渡す必要があります

[code lang=text] astel-no-MacBook-Pro% ansible-playbook -i inventory/hosts aaa.yml --ask-vault-pass Vault password:

PLAY ***************************************************************************

TASK [setup] *******************************************************************

ok: [astail.net]

(ry [/code]

インフラの人たちでvaultパスワードだけ管理してればいいので良い