ansible-vault
を久しぶりに使って、ちょっと工夫してみたのでメモしておきます。*1
機密情報を含むファイルをAnsibleで扱う場合は ansible-vault
コマンドで暗号化した上でリポジトリにPushします。
ansible-vault
コマンドは大きく以下の二つがあり、今回は後者の文字列の暗号化の話です。
- ファイルを丸ごと暗号化
- 文字列を暗号化
工夫してみた書き方
今回試した書き方は以下の様なものです。
ポイントは ansible-vault
コマンドで生成した文字列を直接変数に並べるのではなく、
先行して暗号化しておくことで、実際の変数にはスッキリと書けています。*2
ansible-vault
が生成した文字列を格納する変数は encrypted_xxxx
を接頭語として付与しておくことで、名前に意味を持たせてみました。
# ansible-vault で機密情報を暗号化しておく encrypted_password1: !vault | $ANSIBLE_VAULT;1.1;AES256 65663137366335316632356230326635323639393230383735373635353863313766623462656264 3236336665393264383364356433396339636465306438320a356438313564633264636463633537 37376633306165306366626364386431653231623236333936323233613261663634656366363663 3062343363343939650a366632663665316132616531383764393234306634386437303135303936 34616666333266633463633362356137613832633734383363313437306332306332 encrypted_password2: !vault | $ANSIBLE_VAULT;1.1;AES256 36333364353837323963393561313866613561376232396534313462316436336433316264353066 3235626565356436333962636335393532396338323638310a303936663431313362663464353130 64636462316163636237663538316138303537613435656565656631633862353766336263663736 3365653135363163320a386264343938396361393937623331393439326135363663663539653630 62333337636634333861366638323739303038376438356536376335353965383436 # 実際に使用する変数はスッキリと書ける users: - user: hoge1 password: "{{ encrypted_password1 }}" - user: hoge2 password: "{{ encrypted_password2 }}"
文字列は以下の様なコマンドで暗号化しています。
ansible-vault encrypt_string 'SuperSecretPassPhrase1' --name 'encrypted_password1' ansible-vault encrypt_string 'SuperSecretPassPhrase2' --name 'encrypted_password2'
これまでの書き方
これまでは以下の様に書いてきました。 これでも大きな問題はありませんが、変数が vault 文字列によって縦長になってしまい視認性が多少悪い印象です。*3
users: - user: hoge1 password: !vault | $ANSIBLE_VAULT;1.1;AES256 33643334343838623965623834666331343336366432356634396165376330393530613663613132 6131313066643266643531303839383832376666613564390a623161616666643436656232666633 65306334333933366566636430373934623338313666373034653665343938306363613639386236 3539383232633730640a393965653335636566343636393863636531393737636162323839316538 61373133623837373630623431633836323431393564643830653063353638373133 - user: hoge2 password: !vault | $ANSIBLE_VAULT;1.1;AES256 64633238363034646632303333306361633862353033396334623866613333313935636366306536 3636363436626138356231313434356336336635313161320a316663313637363063313634396236 64333261393863313733383033636539633336356132396261396664656565363462303832326232 3864663133363530380a383939316432653437653836613061326262303362353036313662346664 36376465363666396132643630313062316430316666313031396564383361663366
余談:ファイルを丸ごと暗号化しない理由
ファイルの暗号化はシンプルでやりやすいですが、Pull Requestのレビュー時に差分を把握できない問題があるためあまり好きではありません。