はじめに
久しぶりにansibleを使って環境構築をしていて、以前は使っていなかった vault をちゃんと使うようになったのでメモ。
(以前はパスワード等のファイルはgitに乗せないで手動共有していた。。。正確には自分しか触らなかったので自分だけが持っていた)
3行で
- 暗号化ファイルに秘密鍵ファイルを使用すると便利なんじゃね
- create または encrypt 時に
--vault-password-file=~/.ssh/project_id_rsa
って付けるだけ - ansible.cfg に
vault_password_file = ~/.ssh/project_id_rsa
書いておくと実行時は何も気にしなくていい!
やりたかったこと
- クレデンシャルを平文でgit管理に含めない
- そもそもプライベートリポジトリだけど
- そもそもgit管理に入れてなかったのも、チームの人数が増えるとよくない(暗黙の手渡しとか。。。_no)
- つまり vault を使う
- 忘れちゃうようなパスワードを使わない and たくさん暗号化キー(パスワード持ちたくない) and わかる人に伝わる共有の情報を使う
- secret.txt とか手動管理やめたい
- vault ファイル毎とかプロジェクト毎にパスワード違うとか。。。
- チームで共有の秘密鍵(terraform用の鍵とか、実行可能ユーザが持っていていいもの)を使うといいんじゃない?
- 今までと実行時引数を変えたくない
- タグだったりホストだったり実行時に渡す引数が多いので --ask-vault-pass とかやりたくない
- ansible.cfg に書いておけば大丈夫。vaultを使っていない時は無視される
具体的に
- 鍵は自分のではなく、プロジェクトやチームで共有している鍵を使う
- プロジェクトが複数あってそれぞれ proja_id_rsa, projb_id_rsa みたいにして管理しているので
- vars ディレクトリ(ロールでもグローバルでも)に拡張子.vaultでファイルを作る
- .yml である必要ないし、暗号化された状態で管理されるので、IDE等の影響を受けなくなって便利
- vault を使わないで書いておいて、うまくいくのを確認してから暗号化
- 暗号化する際に、
ansible-vault encrypt --vault-password-file=~/.ssh/proja_id_rsa secret.vault
とする- view, edit とかも同じ
- ansible.cfg に
vault_password_file = ~/.ssh/proja_id_rsa
とする - 暗号化された値を使用する直前のタスクで
include_vars: secret.vault
とするとわかりやすい?
結果的に
- チームで共有する際にパスワードテキストの中身なんだっけ?がなくなった
- 復号化に手間がかからず、暗号化が推進されて、構築のコード化が進んだ
-
export ANSIBLE_VAULT_PASSWORD_FILE=~/.ssh/proja_id_rsa
ってしておくといちいち--vault-password-fileをつけなくて済むので楽になった - 自分用のプロジェクトは当然自分の id_rsa を使うことでめっちゃ楽になった