Ansible Vault と SSM Parameter Store を組み合わせてみた

もっといいやり方があるのではと思いつつ。


Ansible Vault設定

ansible-vault コマンドで秘匿情報を作成・編集する。

例えば hosts/hoge 配下にインベントリ設定をしているときに、all向けに秘匿情報を設定したい場合を考える。この場合、 hosts/hoge/group_vars/all 配下に秘匿情報として vault.yml を作成すれば良い。

$ ansible-vault create /hosts/hoge/group_vars/all/vault.yml

上記コマンドの実行時に暗号化および復号用のパスワードを入力する。

作成した vault.yml を編集するときは edit サブコマンドを使う。

$ ansible-vault edit /hosts/hoge/group_vars/all/vault.yml

いずれも端末デフォルトのエディタが立ち上がって編集可能になる。

vault.yml の中では vault_ というプレフィックスで変数を定義し、平文の変数ファイル内で参照すると取り回しが良い (role内で直接参照すると細かな変更が辛くなりがちである)。 以下はDataDogのAPIキーとして vault_dd_api_key = xxxxxxxxxxxxx を暗号化して、 all.yml で読み出す例。


group_vars/all/all.yml

### Datadog Settings

# vault_... は Ansible Vault で設定した秘匿情報
datadog_api_key: "{{ vault_dd_api_key }}"
datadog_checks:
process:
init_config:
instances:
- name: ssh
search_string: ['ssh', 'sshd' ]
- name: chronyd
search_string: ['chrony', 'chronyd']
- name: syslog
search_string: ['rsyslogd']
cpu_check_interval: 0.2
exact_match: true
ignore_denied_access: true
- name: crond
search_string: ['crond']
- name: httpd
search_string: ['httpd']


Passwd を読むスクリプト

今回は SSM の Parameter Store にセキュリティ文字列としてパスワードを保存する。パラメータ名は自由。今回は ansible-vault-pass とする。



  • AWSドキュメント


    • KMSのキーを作成し、IAMロール/ユーザに復号許可ポリシーを設定する必要がある。



保存したパスワードを読み出すスクリプトを作成する。


vault_pass.sh

#!/usr/bin/env sh

aws ssm get-parameters \
--names "ansible-vault-pass" \
--with-decryption --query "Parameters[*].Value" \
--output text

このスクリプトをAnsibleのルートに配置して、 ansible.cfg に以下を追記する。


ansible.cfg

### Ansible Vault のパスワードをスクリプトから取得

vault_password_file = vault_pass.sh

上記設定で ansible-playbook をすればok。AWSの設定とサーバ設定をまとめて行う場合はこのくらいの設定が楽でいい気がした。


参考