Help us understand the problem. What is going on with this article?

Ansible Vault を賢く使う

More than 3 years have passed since last update.

Ansible でパスワードやAPIキーなどの機密情報を扱う場合には ansible-vault を使うことで暗号化されたファイルとして変数を保存できます。

簡単な使い方は以前書きました
Ansible Vault を試す

しかしながら、ansible-vault はファイル単位での暗号化であるため、暗号化の不要な項目までまるっと暗号化され、どんな変数が定義されているのかすらわからなくなってしまうという問題がありました。
これは結構不便です。

そんなことをずっと思っていたのですが、ふとドキュメントを読んでいたらこの問題の解決策が書いてありました。

Splitting Out Host and Group Specific Data

なんと、バージョン 1.4 という ansible-vault 登場(1.5)以前からある機能でした!!

が、

As an advanced use-case, you can create directories named after your groups or hosts, and Ansible will read all the files in these directories. An example with the ‘raleigh’ group:

からはじまる Ansible Vault を使う場合はサブディレクトリを入れると良いよという説明が加えられたのは 1.8 の時でした。

どういう機能かというと、たとえば appservers というグループに属するホストで DB のパスワードを扱いたい場合、group_vars/appservers というファイルにパスワード以外の秘密にしなくても良い変数があったとしても vault で暗号化してしまうと上で書いたような使い辛さがあります。

でも実は group_vars/appservers/public.yml, group_vars/appservers/db_password.valut という具合にグループ名をディレクトリとし、その配下に任意の名前でファイルを置いておけば全部読み込んでくれるのです。

こういうことであれば、暗号化するファイルは変数名をファイル名にするというルールにすることでどこでどんな変数が定義されているかが復号のためのパスワードを知らない人でもわかります。

また、テキストファイルであれば .yml サフィックスをつけておけば editor へのヒントになるし、vault で暗号化しているなら .vault というサフィックスにすることで名前を見ただけで暗号化されていることが分かりますね。


2017-09-28 追記

Ansible 2.2.1 から変数ファイルは .yml, .yaml, .json という拡張子のファイルもしくは拡張子のない(ドットを含まない)ファイルしか読み込まないようになっていました。(https://github.com/ansible/ansible/issues/18223 あたりから辿れる)

Best Practices の Variables and Vaults 項 では

group_vars/{group_name}/vars, group_vars/{group_name}/vault というファイルを作り、vars ファイルに

password: "{{ vault_password }}"
some_secret: "{{ some_secret }}"

vault ファイルに

vault_password: "XXXXXXX"
some_secret: "YYYYYYYY"

と書いて暗号化するべしと書いてあります。


もうひとつおまけ

Ansible Vault を使った playbook ではそのルートフォルダに ansible.cfg を置いて

ansible.cfg
[defaults]
ask_vault_pass = True

と書いておけば --ask-vault-pass オプションをつけ忘れて

ERROR: A vault password must be specified to decrypt ...

と怒られることが無くなります。

ansible.cfg
[defaults]
vault_password_file=/some/where/password.txt

とすることもできます。グローバルな設定に書いちゃうとパスワードが違うかもしれないので注意。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした