Ansible Vault と SSM Parameter Store を組み合わせてみた
Ansible Vault と SSM Parameter Store を組み合わせてみた:
もっといいやり方があるのではと思いつつ。
例えば
上記コマンドの実行時に暗号化および復号用のパスワードを入力する。
作成した
いずれも端末デフォルトのエディタが立ち上がって編集可能になる。
vault.yml の中では
今回は SSM の Parameter Store にセキュリティ文字列としてパスワードを保存する。パラメータ名は自由。今回は
このスクリプトをAnsibleのルートに配置して、
上記設定で
もっといいやり方があるのではと思いつつ。
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.cfg
に以下を追記する。ansible.cfg
### Ansible Vault のパスワードをスクリプトから取得 vault_password_file = vault_pass.sh
ansible-playbook
をすればok。AWSの設定とサーバ設定をまとめて行う場合はこのくらいの設定が楽でいい気がした。
コメント
コメントを投稿