Ansible Vaultで環境変数を使わずパスワードを暗号化する方法

Ansible Vaultの使い方として、コードをGithubに共有する場合があると思います。 一例として、第三者から機密情報を守るために、ファイルや文字列を暗号化する場合がありますね。

Ansibleを使う際に、暗号化する方法も色々ありますが、 今回はAnsible Vaultという機能を使って、環境変数ではなくファイルや文字列自体を暗号化する方法についてまとめました。

Ansible-vaultで暗号化できるもの

  1. ファイル
  2. 変数

暗号化したい値をymlファイルでまとめて管理する方法

1. パスワード等機密情報を記載したファイルを用意する

今回は一例として、appuserというLinuxユーザーのパスワードを暗号化していきましょう。 下記のように、my_vault.ymlというファイルにappuser_passwordとしてパスワードpasswordを定義しています。

$ vi my_vault.yml
appuser_password: password

2. my_vault.ymlファイルを暗号化する

下記コマンドで、ファイルの中身を暗号化できます。

$ ansible-vault encrypt [暗号化対象ファイル]

今回はmy_vault.ymlの中身を暗号化します。 コマンド実行時に、復号の際に必要なパスワードを指定する必要があります。 このパスワードを覚えておきましょう。

$ ansible-vault encrypt my_vault.yml
New Vault password:
Confirm New Vault password:
Encryption successful

3. 使用したいplaybook内で値を呼び出す

plyabook内で、下記の様にappuserを追加するタスクを書きます。

~
- name: add appuser
  become: true
  user:
    name: appuser
    comment: Application User
    uid: 505
    groups: appuser
    password: "{{ appuser_password | password_hash('sha512') }}"
# ansibleのuserモジュール内のpasswordで変数を使用する場合は、ハッシュ化する必要がある
~

4. playbook実行時に、オプションを指定する

下記オプションを指定して、playbook実行時にパスワードを入力させるようにします。

--ask-vault-pass --extra-vars="@my_vault.yml"

$ ansible-playbook -i inventory -l localhost test.yml --ask-vault-pass --extra-vars="@my_vault.yml"

これで問題なくタスクが実行できるはずです。

ansible-vaultの各コマンド

  • ansible-vault create

    • 暗号化されたファイルを作成
  • ansible-vault encrypt

    • 既存のファイルを暗号化
  • ansible-vault decrypt

    • 暗号化されたファイルを復号化
  • ansible-vault edit

    • 暗号化されたファイルを編集
  • ansible-vault rekey

    • パスワードを変更
  • ansible-vault view

    • 暗号化されたファイルを復号して PAGER で表示