Ansible Vault で Aws キーなどを暗号化する
About Ansible
Ansible is Simple IT Automation
最近は Ansible を使っている。Chef や Puppet に並ぶプロビジョニングツールのひとつ。
Ansible の立ち位置は明確で、Chef の難解さに絶望あるいは嫌気を差した者たちが使うツールとなっている。Ruby の素養もいらず Yaml で書けること、さらにはプロビジョニング時、Chef は対象のサーバ側にも Chef がインストールされていなければならないが、Ansible の場合は手元にだけあれば良いという点もあって徐々に人気が出てきている。
How to use Ansible
面倒くさいので省略する。
エコシステムも確立されつつあって、Google 先生も Ansible についてだいぶ詳しくなってきた。先生に聞いたほうが早いと思う。
How to use Ansible Vault
Ansible でプロビジョニングする際に困るのはコード上に記したくない値の扱いだろう。たとえば Aws のアクセスキーや WebAPI のアクセストークンなどなど。そういったものたちは Ansible Vault という機能を使って値を暗号化することによって安全にプロビジョニングをすることが可能だ。
Ansible の変数ファイルを利用して実行する。Playbook に下記のように vars_files プロパティで変数ファイルを指定をする。
# playbook.yml - hosts: localhost vars_files: - vars/private.yml
private.yml には好きな変数名に必要な情報を与えておく。
# private.yml aws_access_key: hoge aws_srcret_key: bar
ansible-vault コマンドを使ってファイルを暗号化する。
その際に任意の暗号化パスワードを入力する。
$ ansible-vault encrypt vars/private.yml ault password: Confirm Vault password: Encryption successful
これで暗号化できている。
中身を見てみると…
$ cat vars/private.yml ANSIBLE_VAULT;1.1;AES256 34393238393235356164353265386163393564306637666563376666366636343937666131626239 3932616239376439313566383230633235633765663531650a343362306137306632656432646136 62613934393030643261366364386263653264303736396537313038346233636636333637303237 3061376562393364630a363162633330323364373761313866363634613331626162383938376636 35316365326632306534623531633464633461383961666336393830326165646361613637613335 6566303836613434303066383165666335656231306634656231
これを使って Ansible を実行すればコード上にキーの値などを記載しなくて済む。ただ、後々さあメンテナンスしようとなったときに暗号化されたファイルを見ても何が書いてあるのか分からないのが。まあ暗号化してるんだから当たり前なんだけど。
実際に復号化して Ansible を動かすには下記のようにすればいい。
実行時に暗号化した際に決めたパスワードが問われる。
$ ansible-playbook playbook.yml --ask-vault-pass Vault password:
毎回入力が面倒ならパスワードが書かれたファイルをどっかに置いておいて、
$ ansible-playbook private.yml --vault-password-file=/path/to/password_file
とやってもよい。
しかし、こんなやり方だと本末転倒な感じがある。
Ansible、ドキュメントも豊富で敷居も低いので Chef にげんなりした人は使ってみるとうまく運用に乗せられるかもしれない。
良いツールだから使おう。