Ansibleでパスワードを暗号化して管理する
Ansibleのplaybook内にsudoやsshパスワードを管理したい場合がよくありますが、プレーンテキストのままgitリポジトリに放り込むと非常に嫌な感じがします。暗号化した状態でもちょっと嫌ですが、生の状態よりマシかもしれません。
ホストグループ別にgroup_varsディレクトリにパスワードを書いたyamlファイルを作成し、そのファイルを暗号化します。
Ansible実行環境
Item |
Value |
OS |
Mac OS X 10.9.4 |
Ansible |
1.5.4 |
対象ホスト
Item |
Value |
対象ホスト |
192.168.240.34 |
OS |
CentOS 7 |
認証方式 |
パスワード認証 |
sshユーザー |
ansible |
sshパスワード |
password |
sudoパスワード |
password |
暗号化パスワード |
vaultpass |
ansibleのファイル構成
.
├── hosts
├── group_vars
│ └── servers.yml
├── site.yml
├── roles
│ └── common
│ └── tasks
│ └── main.yml
└── vars
└── main.yml
各ファイルの内容
- group_vars/servers.yml
- hosts内に[]で囲って記述したグループ名.ymlをgroup_varsディレクトリに作成
---
ansible_ssh_user: ansible
ansible_ssh_pass: password
ansible_sudo_pass: password
- site.yml
- hosts
- var_files
- グローバルスコープの変数を記述したファイルパスを指定
- roles
---
- hosts: servers
vars_files:
- vars/main.yml
roles:
- common
- roles/common/tasks/main.yml
- name: Install yum packages
action: yum name={{ item }} state=installed
with_items:
- wget
- tcpdump
- bind-utils
- telnet
暗号化・復号
group_vars/servers.ymlを暗号化してplaybookを実行
echo vaultpass > ~/.ansible_vault_pass # こいつはgitに格納しない
ansible-vault encrypt group_vars/servers.yml --vault-pass ~/.ansible_vault_pass
# --vault-pass を指定しない場合は、パスワードを聞いてくる
ansible-playbook site.yml -i hosts --vault-pass ~/.ansible_vault_pass
group_vars/servers.yml を復号
ansible-vault decrypt group_vars/servers.yml --vault-pass ~/.ansible_vault_pass
group_vars/servers.yml を暗号化したまま編集
ansible-vault edit group_vars/servers.yml --vault-pass ~/.ansible_vault_pass