Linux Labs

Автоматизация: Git и Ansible / Ступень 7 из 8

Роли, переменные и секреты

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 6 · на машине · 8 мин

Пароль в vault

Пароль в проекте читает каждый, у кого есть копия проекта. Секрет шифруют 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 (в Вики).

Проверь себя 1 вопрос

В 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/vars.yml    # телефон и остальное открытое
group_vars/web/vault.yml   # db_password — зашифрован
Внимание

Когда есть каталог 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 в файле только для себя ещё не выполнена

Цели шага

0 из 2
  • Зашифровать пароль базы так, чтобы прогоны его получали — ещё не выполнена
  • Хранить пароль vault в файле только для себя — ещё не выполнена
Ubuntu 24.04

Цели шага

0 из 2
  • Зашифровать пароль базы так, чтобы прогоны его получали — ещё не выполнена
  • Хранить пароль vault в файле только для себя — ещё не выполнена
Загрузка…