もっといいやり方があるのではと思いつつ。
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
で読み出す例。
### 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ロール/ユーザに復号許可ポリシーを設定する必要がある。
保存したパスワードを読み出すスクリプトを作成する。
#!/usr/bin/env sh
aws ssm get-parameters \
--names "ansible-vault-pass" \
--with-decryption --query "Parameters[*].Value" \
--output text
このスクリプトをAnsibleのルートに配置して、 ansible.cfg
に以下を追記する。
### Ansible Vault のパスワードをスクリプトから取得
vault_password_file = vault_pass.sh
上記設定で ansible-playbook
をすればok。AWSの設定とサーバ設定をまとめて行う場合はこのくらいの設定が楽でいい気がした。