Пароль в проекте читает каждый, у кого есть копия проекта. Секрет шифруют ansible-vault, а расшифровывает его Ansible сам — во время прогона.
ansible-vault encrypt файл шифрует YAML-файл паролем vault: от содержимого остаются строка $ANSIBLE_VAULT;1.1;AES256 и строки из цифр и букв a–f. Прочитать такой файл — ansible-vault view файл, поправить — ansible-vault edit файл. Зашифрованные переменные прогон расшифровывает, если знает пароль vault: ключ --ask-vault-pass спрашивает его в терминале, а строка vault_password_file = ~/.vault_pass в разделе [defaults] файла ansible.cfg берёт его из файла. Пароль из vault_password_file берёт и сам ansible-vault (в Вики).
В ansible.cfg проекта — строка vault_password_file = ~/.vault_pass, а у коллеги, который забрал проект, такого файла нет. Что ответит у него ansible-playbook shop.yml?
-
Пароль в терминале спрашивает ключ
--ask-vault-pass. Без него Ansible берёт файл изvault_password_file, а файла нет. -
Зашифрованное значение задачам не достаётся: без пароля vault прогон не может прочитать переменные и останавливается с ошибкой.
-
Пропускать задачи из-за vault Ansible не умеет: файл пароля нужен ему ещё до первой задачи, и без него прогон не начинается.
Пароль vault Ansible читает до первой задачи. Файла из vault_password_file нет — прогон сразу останавливается с ошибкой и машину не трогает; работает он с файлом пароля или с --ask-vault-pass.
Секрет держат в отдельном файле, тогда остальные переменные группы читаются как раньше. Вместо файла group_vars/web.yml заводят каталог group_vars/web/ — Ansible читает все файлы в нём:
Когда есть каталог group_vars/web/, файл group_vars/web.yml рядом с ним Ansible не читает, и его переменные пропадают без предупреждения.
Файл с паролем vault кладут вне проекта, с правами 600, а коллегам передают отдельно: кто получит проект вместе с этим файлом, прочитает и секреты.
Спрячь пароль базы в vault
Пароль базы db_password лежит в ~/ansible-lab/group_vars/web.yml открытым текстом. Зашифруй его ansible-vault так, чтобы в проекте не осталось пароля открытым текстом. Пароль vault положи в файл ~/.vault_pass, который читаешь только ты, — прогоны должны находить его сами, без вопросов. Плейбуки по-прежнему кладут пароль базы на машину.
Цели · 0 из 2
- Зашифровать пароль базы так, чтобы прогоны его получали ещё не выполнена
- Хранить пароль vault в файле только для себя ещё не выполнена