Traffine I/O

日本語

2023-02-17

Ansible Vault

Ansible Vault とは

Ansible Vaultとは Ansible に付随する暗号化の機能です。Gitなどにそのまま登録したくない機密情報を暗号化することができます。

Ansible Vault の使い方

インストール

Ansible Vaultを使うにはAnsibleをインストールする必要があります。Macの場合はbrewコマンドで簡単にインストールすることができます。

$ brew install ansible

encrypt

ansible-vault encryptコマンドでファイルを暗号化することができます。

次のsample.txtがあるとします。

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は次のように暗号化されています。

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は次のように暗号化されています。

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は次のように暗号化されています。

sample.txt
$ANSIBLE_VAULT;1.1;AES256
35346464303934323662376134353665626366656530306435343563613639356661303032613531
3538363133366661366132653661383763313564303435610a353037323661373237376565626163
38666534616566343862396233373138323466376332383334626637313365666332626165613263
3938343333313936360a393865313834326439613332316238383735663738363639626538623432
3039

次のコマンドでファイルを編集します。

$ ansible-vault edit sample.txt

次のように編集画面が表示されます。

ansible-vault edit

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

ansible-vault edit2

次のようにsample.txtが更新されます。

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ファイルがあるとします。

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.ymlPassw0rdを次のように置換します。

sample.yml
$ 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があるとします。

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

参考

https://docs.ansible.com/ansible/latest/vault_guide/index.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!