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

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の設定とサーバ設定をまとめて行う場合はこのくらいの設定が楽でいい気がした。


参考

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)