[Asible] 「ansible-vault rekey」にて新しいPasswordに変更できない事象の原因と対策メモ
概要
Ansible勉強のため、私用の環境で「ansible-vault rekey」にて既存のvault fileを新しいPasswordに変更しようとしたら、新しいPasswordに変更できない事象が発生。
上記事象の原因及び対策をメモに記録しておきます。
※個人で構築した環境であるため、環境や要件によって挙動が異なる可能性があります。
もし、内容に間違いなどがあればコメントでいただけると幸いです。
環境情報
hyperviser: VMware
control node 1台・managed node 5台
※Ansible-version
[bomey@ansible-control ansible]$ ansible --version
ansible [core 2.15.13]
config file = /home/bomey/ansible/ansible.cfg
configured module search path = ['/home/bomey/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
ansible collection location = /home/bomey/ansible/mycollections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.9.21 (main, Dec 5 2024, 00:00:00) [GCC 11.5.0 20240719 (Red Hat 11.5.0-2)] (/usr/bin/python3)
jinja version = 3.1.6
libyaml = True
※OS
[bomey@ansible-control ansible]$ cat /etc/redhat-release
Rocky Linux release 9.5 (Blue Onyx)
[bomey@ansible-control ansible]$ ansible all -a 'cat /etc/redhat-release'
node5 | CHANGED | rc=0 >>
Rocky Linux release 9.5 (Blue Onyx)
node4 | CHANGED | rc=0 >>
Rocky Linux release 9.5 (Blue Onyx)
node2 | CHANGED | rc=0 >>
Rocky Linux release 9.5 (Blue Onyx)
node3 | CHANGED | rc=0 >>
Rocky Linux release 9.5 (Blue Onyx)
node1 | CHANGED | rc=0 >>
Rocky Linux release 9.6 (Blue Onyx)
事象
- ansible.cfgにvault_password_file=/home/bomey/ansible/secret.txtが
指定されている状態
[bomey@ansible-control ansible]$ cat ansible.cfg | grep vault_password
vault_password_file=/home/bomey/ansible/secret.txt
- 既存Password
[bomey@ansible-control ansible]$ cat secret.txt
bomeyharu
- 新しいvault file
[bomey@ansible-control ansible]$ cat new_secret.yml
$ANSIBLE_VAULT;1.1;AES256
65626466643263626463396536623064623439306439633434653635346363303933383634653730
3564383533353531663034326233636139663734353262390a356365353135613864626438343432
64656262383935396630663135363438653363396564326263363831313633633863346333393866
6464373331663733380a313038373932653561373337353266353035656465353231613966626432
30323766343435353838613430646636373139383764356137643038653863366230
- vault fileのPassword変更 (変更するpassword : bomey)
[bomey@ansible-control ansible]$ ansible-vault rekey new_secret.yml --ask-vault-password
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
- 事象の確認
[bomey@ansible-control ansible]$ ansible-vault view new_secret.yml --ask-vault-password
Vault password:
user: Testpassword
ここまでみると正常にPasswordが変更されたように見えましたが、ansible-vault viewを実行した結果、passwordを問わないことに気づきました。
※passwordが正常に変更されているのであれば、vault_password_file=/home/bomey/ansible/secret.txtではpassword checkが通らないと判断しました。
[bomey@ansible-control ansible]$ ansible-vault view new_secret.yml
user: Testpassword
また、間違っているpasswordを投入しても通ることを確認しました。
[bomey@ansible-control ansible]$ echo '12345' > test.txt
[bomey@ansible-control ansible]$ sudo echo '12345' | ansible-vault view new_secret.yml --vault-password-file=test.txt
user: Testpassword
対策
方法1
- 新しいPassword fileを生成
[bomey@ansible-control ansible]$ echo 'bomey' > new_pass.txt
[bomey@ansible-control ansible]$ cat new_pass.txt
bomey
- --new-vault-password-file=new_pass.txt を指定
[bomey@ansible-control ansible]$ ansible-vault rekey new_secret.yml --ask-vault-password --new-vault-password-file=new_pass.txt
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
- password 確認
[bomey@ansible-control ansible]$ ansible-vault view new_secret.yml
ERROR! Decryption failed (no vault secrets were found that could decrypt) on new_secret.yml for new_secret.yml
期待通り、ansible-vault viewだけでは中身が見れなくなりました。
- --vault-password-fileを指定
[bomey@ansible-control ansible]$ ansible-vault view new_secret.yml --vault-password-file=secret.txt
ERROR! Decryption failed (no vault secrets were found that could decrypt) on new_secret.yml for new_secret.yml
[bomey@ansible-control ansible]$ ansible-vault view new_secret.yml --vault-password-file=new_pass.txt
user: Testpassword
既存password file (secret.txt)ではfailedとなり、新しいpassword file (new_pass.txt)では
成功したことを確認しました。
方法2
※password fileなしで新しいpasswordに変更したい場合
- vault_password_file=をコメントアウト
[bomey@ansible-control ansible]$ cat ansible.cfg | grep vault_password
#vault_password_file=/home/bomey/ansible/secret.txt
- ansible-vault rekey 実行
[bomey@ansible-control ansible]$ ansible-vault rekey new_secret.yml
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
[bomey@ansible-control ansible]$ ansible-vault view new_secret.yml
Vault password:
最後に
ansible.cfg内に「vault_password_file=」が指定されていると
ansible-vault rekeyで入力するpromptより「vault_password_file=」の方が優先的に適用されているようになっているように見えました。
--new-vault-password-file optionを付けること又は「vault_password_file=」を注釈処理することでpasswordを変更することができました。
上記の内容につきましては公式のDocumentを検索してみましたが、見当たりませんでした。
もし、今後公式Documentで見つかったらこのメモにも該当urlを残しておきます。
また、内容に間違いなどあればコメントいただけると幸いです。
よろしくお願いいたします。
Discussion