もりはやメモφ(・ω・ )

ITとか読書感想文とか

ansible-vault で vars ファイルを書く際に、一工夫してみた

ansible-vault を久しぶりに使って、ちょっと工夫してみたのでメモしておきます。*1

docs.ansible.com

機密情報を含むファイルを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のレビュー時に差分を把握できない問題があるためあまり好きではありません。

*1:もっと良い記述・方法もあると思うので探し続けます

*2:個人的には

*3:これも個人の感想