https://tekunabe.hatenablog.jp/entry/2022/04/08/ansible_retrieve_secrets_from_vault
https://tekunabe.hatenablog.jp/entry/2022/04/07/vault_intro
前提:
Python 3.9.14
Rocky Linux 9.1
ansible [core 2.15.2]
Vault: v1.14.1
コントロールノード -> ターゲットノードの公開鍵認証設定済み
ターゲットノードでvisudo設定済み
-- 1. HashiCorp Vaultインストールと設定
-- 1.1 HashiCorp Vaultインストール
dnf install -y yum-utils
dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
dnf -y install vault
vault --version
-- 1.2 HashiCorp Vault起動
vault server -dev
別ターミナル起動
export VAULT_ADDR='http://127.0.0.1:8200'
vault login
-- 1.3 シークレットの追加
vault kv list secret/
vault kv put secret/user01 password=user01
vault kv put secret/user02 password=user02
vault kv list secret/
vault kv get secret/user01
vault kv get secret/user02
-- 1.4 ポリシーの追加
vault policy write policy01 - << EOF
path "secret/data/*" {
capabilities = ["read"]
}
EOF
vault policy list
vault policy read policy01
-- 1.5 トークンの生成
vault token create -policy=policy01
-- 2. Ansibleインストールと設定
-- 2.1 Ansibleインストール
su - ansible
python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install ansible-core
ansible --version
-- 2.2 Ansible側の追加作業
pip install hvac
export ANSIBLE_HASHI_VAULT_TOKEN=hvs.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export ANSIBLE_HASHI_VAULT_ADDR='http://127.0.0.1:8200'
ansible-galaxy collection install community.hashi_vault
ansible-galaxy collection list
-- 2.3 設定ファイル作成
vim ansible.cfg
[defaults]
forks = 10
log_path = $HOME/.ansible/ansible.log
host_key_checking = True
gathering = smart
transport = smart
-- 2.4 インベントリファイル作成
vim inventory.ini
localhost
mmm190
[server]
192.168.137.191
-- 2.5 ansible動作確認
ansible server -i inventory.ini -m ansible.builtin.ping
tail $HOME/.ansible/ansible.log
-- 2.6 プレイブック作成
vim playbook.yml
---
- hosts: server
become: true
gather_facts: true
vars:
accounts:
- name: user01
uid: 4001
password: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/data/user01:password') }}"
- name: user02
uid: 4002
password: "{{ lookup('community.hashi_vault.hashi_vault', 'secret=secret/data/user02:password') }}"
tasks:
- name: Add users
ansible.builtin.user:
name: "{{ item['name'] }}"
uid: "{{ item['uid'] }}"
password: "{{ item['password'] | password_hash('sha512') }}"
state: present
loop:
"{{ accounts }}"
no_log: true
-- 2.7 プレイブック実行
ansible-playbook -i inventory.ini playbook.yml --syntax-check
ansible-playbook -i inventory.ini playbook.yml