Используемые термины: Hashicorp Vault, Ansible.
А Ansible есть свой механизм безопасного хранения секретов, однако, нам может понадобиться использовать централизованное решение. В этом случае, есть решение для интеграции Hashicorp Vault и Ansible. Наша инструкция подойдет к системам на базе Deb (Ubuntu, Debian) или RPM (Rocky Linux, Red Hat, CentOS).
Настройка на стороне Hashicorp VaultНаписание плейбука для Ansible
На стороне Hashicorp Vault необходимо создать:
1. Для начала, формируем путь хранения секрета по механизму key-value:
vault secrets enable -path=ansible kv
* в данном примере путь будет начинаться с ansible.
Создаем секрет:
vault kv put ansible/projects/test-project/database username=my_user password=password135 host=mariadb.admins24.local dbname=testdb
* в данном примере будет создан секрет по пути ansible/projects/test-project/database, в котором будут записи для подключения к базе данных (например, mariadb).
Смотрим, что получилось:
vault kv get ansible/projects/test-project/database
Команда должна нам вернуть что-то на подобие:
====== Data ======Key Value— ——dbname testdbhost mariadb.admins24.localpassword password135username my_user
* мы должны получить данные, которые добавили в секрет.
2. Создаем политику:
vault policy write test-project-ansible — <<EOFpath «ansible/projects/test-project/*» { capabilities = [ «read» ]}EOF
* в данном примере мы назвали политику test-project-ansible. По нашему правилу мы разрешаем чтение по пути ansible/projects/test-project.
3. Создаем токен для нашей политики:
vault token create -policy=»test-project-ansible»
Мы должны увидеть что-то на подобие:
Key Value— ——token s.E1jqoGhkgcMcZtbOLENSsW21token_accessor E9TGHoaDYw1q8HPpyWZy9xkftoken_duration 768htoken_renewable truetoken_policies [«default» «test-project-ansible»]identity_policies []policies [«default» «test-project-ansible»]
Записываем token — его значение нам понадобиться позже.
Переходим к Ansible. Устанавливаем питон-модуль hvac:
pip3 install hvac
Создаем плейбук, в котором нам нужно обращаться к Vault, например:
vi /etc/ansible/vault-playbook.yml
—
— hosts: test_servers user: admins24 become: true become_method: su become_user: root
vars: vault_url: https://vault.admins24.local:8200 vault_token: s.E1jqoGhkgcMcZtbOLENSsW21 vault_secret: ansible/projects/test-project/database database_arr: «{{ lookup(‘hashi_vault’, ‘secret={{ vault_secret }} token={{ vault_token }} url={{ vault_url }} validate_certs=False’) }}»
tasks: — name: Echo Vars ansible.builtin.debug: msg: «Database host: {{ database_arr.host }}, dbname: {{ database_arr.dbname }}, username: {{ database_arr.username }}, password: {{ database_arr.password }}»
* где:
В результате отработки данного плейбука на экране должны отобразиться значения нашего секрета. В конкретном примере мы получим 4 переменные, которые уже по собственному желанию сможем использовать в сценариях Ansible:
Обратите внимание, что часть после точки соответствует имени параметра в секрете.
Для проверка запустим наш плейбук:
ansible-playbook /etc/ansible/vault-playbook.yml -kK
Мы должны получить что-то на подобие:
ok: [192.168.0.15] => { «msg»: «Database host: mariadb.admins24.local, dbname: testdb, username: my_user, password: password135»}
Цель достигнута — мы можем читать секреты из Hashicorp Vault средствами Ansible.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies