Ansible Vault とは
Ansible Vaultとは Ansible に付随する暗号化の機能です。Gitなどにそのまま登録したくない機密情報を暗号化することができます。
Ansible Vault の使い方
インストール
Ansible Vaultを使うにはAnsibleをインストールする必要があります。Macの場合はbrewコマンドで簡単にインストールすることができます。
$ brew install ansible
encrypt
ansible-vault encryptコマンドでファイルを暗号化することができます。
次のsample.txtがあるとします。
hello world
このファイルを暗号化します。次のコマンドを実行します。実行時にパスワードの入力が求められます。
$ ansible-vault encrypt sample.txt
New Vault password:
Confirm New Vault password:
Encryption successful
sample.txtが暗号化されていることが分かります。
$ cat sample.txt
$ANSIBLE_VAULT;1.1;AES256
35346464303934323662376134353665626366656530306435343563613639356661303032613531
3538363133366661366132653661383763313564303435610a353037323661373237376565626163
38666534616566343862396233373138323466376332383334626637313365666332626165613263
3938343333313936360a393865313834326439613332316238383735663738363639626538623432
3039
view
ansible-vault viewコマンドで暗号化されているファイルの内容を確認することができます。
sample.txtは次のように暗号化されています。
$ANSIBLE_VAULT;1.1;AES256
35346464303934323662376134353665626366656530306435343563613639356661303032613531
3538363133366661366132653661383763313564303435610a353037323661373237376565626163
38666534616566343862396233373138323466376332383334626637313365666332626165613263
3938343333313936360a393865313834326439613332316238383735663738363639626538623432
3039
次のコマンドでファイルの内容を確認します。
$ ansible-vault view sample.txt
Vault password:
hello world
decrypt
ansible-vault decryptコマンドで暗号化されているファイルを復号することができます。
sample.txtは次のように暗号化されています。
$ANSIBLE_VAULT;1.1;AES256
35346464303934323662376134353665626366656530306435343563613639356661303032613531
3538363133366661366132653661383763313564303435610a353037323661373237376565626163
38666534616566343862396233373138323466376332383334626637313365666332626165613263
3938343333313936360a393865313834326439613332316238383735663738363639626538623432
3039
次のコマンドでファイルを復号します。
$ ansible-vault decrypt sample.txt
Vault password:
Decryption successful
sample.txtの内容を確認すると、復号されていることが分かります。
$ cat sample.txt
hello world
edit
ansible-vault editコマンドで暗号化されているファイルを編集することができます。
sample.txtは次のように暗号化されています。
$ANSIBLE_VAULT;1.1;AES256
35346464303934323662376134353665626366656530306435343563613639356661303032613531
3538363133366661366132653661383763313564303435610a353037323661373237376565626163
38666534616566343862396233373138323466376332383334626637313365666332626165613263
3938343333313936360a393865313834326439613332316238383735663738363639626538623432
3039
次のコマンドでファイルを編集します。
$ ansible-vault edit sample.txt
次のように編集画面が表示されます。

hello world2を追記してみます。編集を終了するには:wqと入力してEnterキーを押します。

次のようにsample.txtが更新されます。
$ANSIBLE_VAULT;1.1;AES256
66643539663734313236383233323632396332386435343338643133316265633866356334373735
3434633866386133633337616366653831653130396237660a303362613461316666626534633039
31653665613166646431343761663030336432626237646439356435383263343863353562363535
6362336435386564620a633761366435653261636231303962376464343438333635306666316634
62656237363533613930366164643534613036376165626235306230396538313232
rekey
ansible-vault rekeyコマンドで暗号化のパスワードを変更することができます。
$ ansible-vault rekey sample.txt
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
encrypt_string
ansible-vault encrypt_stringコマンドでファイル内の特定の値のみを暗号化することができます。
次のsample.ymlファイルがあるとします。
ansible_user: admin
ansible_password: Passw0rd
次のコマンドを実行し、sample.ymlファイルのPassw0rdを暗号化します。
$ ansible-vault encrypt_string 'Passw0rd' --name 'ansible_passowrd'
New Vault password:
Confirm New Vault password:
Encryption successful
ansible_passowrd: !vault |
$ANSIBLE_VAULT;1.1;AES256
61666133633537333166386335396662623163636437346438353039323461346439343463663337
3037633263366231316336313831356230656266646536380a303965613565336461313931386634
30616131653230356666396239386561613166393730353261363963393465386338663733386231
3663343932656539300a666234353464643632646661326339653438613631303338363530653166
3563
このとき、sample.ymlには何も変化が起きません。手動でsample.ymlのPassw0rdを次のように置換します。
$ cat sample.yml
ansible_user: admin
ansible_passowrd: !vault |
$ANSIBLE_VAULT;1.1;AES256
61666133633537333166386335396662623163636437346438353039323461346439343463663337
3037633263366231316336313831356230656266646536380a303965613565336461313931386634
30616131653230356666396239386561613166393730353261363963393465386338663733386231
3663343932656539300a666234353464643632646661326339653438613631303338363530653166
3563
次のようなコマンドを実行することで値を復号することができます。
$ echo '$ANSIBLE_VAULT;1.1;AES256
61666133633537333166386335396662623163636437346438353039323461346439343463663337
3037633263366231316336313831356230656266646536380a303965613565336461313931386634
30616131653230356666396239386561613166393730353261363963393465386338663733386231
3663343932656539300a666234353464643632646661326339653438613631303338363530653166
3563' | ansible-vault decrypt
Vault password:
Decryption successful
Passw0rd
--vault-password-file
--vault-password-fileオプションでパスワードのファイルを指定することができます。
次のpw_fileがあるとします。
mypassword
次のコマンドでpw_fileをパスワードのファイルに指定してsample.txtを暗号化することができます。
$ ansible-vault encrypt --vault-password-file pw_file sample.txt
--vault-id
Ansible Vaultでは複数のパスワードを使うことができます。
--vault-id label@sourceオプションでVaultの識別子とパスワードファイルを指定します。例えば次のようなコマンドになります。
$ ansible-vault encrypt --vault-id password1@pw_file sample.txt
--output
--outputオプションで生成されるファイルの出力先を指定することができます。
$ ansible-vault encrypt --output dir/sample.txt.vault sample.txt
$ ansible-vault decrypt --output sample.txt dir/sample.txt.vault
参考