Лабораторная работа №9: Безопасное управление секретами (Vault)
Цель работы
Section titled “Цель работы”Научиться использовать Ansible Vault для шифрования чувствительных данных (паролей, ключей API), чтобы их можно было безопасно хранить в системе контроля версий (Git) вместе с остальным кодом.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Проблема хранения секретов
Section titled “1. Проблема хранения секретов”Хранить пароли, токены и ключи в открытом виде в файлах конфигурации (.env, docker-compose.yml) — крайне небезопасно. Если этот код попадет в публичный репозиторий, любой сможет получить доступ к вашей системе.
2. Ansible Vault
Section titled “2. Ansible Vault”Ansible Vault — это инструмент, встроенный в Ansible, который позволяет шифровать целые файлы или отдельные переменные.
- Файл, зашифрованный с помощью Vault, выглядит как набор случайных символов.
- Для его расшифровки (чтения или использования в плейбуке) требуется пароль, который вы задаете при создании.
- Ansible автоматически расшифровывает такие файлы “на лету” во время выполнения плейбука, если ему предоставить пароль.
- Рекомендуемая литература: Ansible Vault (Документация Ansible)
3. Основные команды Vault
Section titled “3. Основные команды Vault”ansible-vault create <имя_файла>: Создает новый зашифрованный файл.ansible-vault encrypt <имя_файла>: Шифрует существующий файл.ansible-vault decrypt <имя_файла>: Расшифровывает файл.ansible-vault edit <имя_файла>: Позволяет редактировать зашифрованный файл в текстовом редакторе.ansible-vault view <имя_файла>: Показывает содержимое зашифрованного файла.
Задания для выполнения
Section titled “Задания для выполнения”-
Шифрование файла
.env(30 мин):- На
Main-serverв директорииansible-project/filesудалите старый.envфайл. - Создайте новый, зашифрованный файл с секретами. Ansible запросит у вас пароль для Vault — придумайте и запомните его (например,
ansible).Terminal window ansible-vault create ansible-project/files/.env - Откроется текстовый редактор. Введите в него то же содержимое, что и раньше:
DB_ROOT_PASSWORD=myverysecretpassword
- Сохраните и закройте редактор.
- Посмотрите содержимое файла
cat ansible-project/files/.env. Вы должны увидеть зашифрованный текст. - Теперь посмотрите его с помощью Vault:
Terminal window ansible-vault view ansible-project/files/.env
- На
-
Запуск плейбука с Vault (30 мин):
- Попробуйте запустить ваш плейбук
deploy_ghost.ymlкак обычно. Вы получите ошибку, так как Ansible не сможет прочитать зашифрованный файл. - Чтобы плейбук сработал, ему нужно передать пароль от Vault. Это делается с помощью флага
--ask-vault-pass.Terminal window ansible-playbook -i inventory.ini deploy_ghost.yml --ask-vault-pass - Введите пароль, который вы задали на шаге 1. Плейбук должен успешно выполниться. Ansible “на лету” расшифрует
.env, скопирует его наWeb-nodeи запустит контейнеры.
- Попробуйте запустить ваш плейбук
-
(Опционально) Использование файла с паролем (30 мин):
- Постоянно вводить пароль вручную неудобно. В реальных системах автоматизации (CI/CD) пароль хранится в защищенном месте и передается плейбуку через файл.
- На
Main-serverсоздайте файлvault_password.txtи запишите в него ваш пароль от Vault. - ВАЖНО: Добавьте этот файл в
.gitignore, чтобы он случайно не попал в Git!Terminal window echo "vault_password.txt" > .gitignore - Теперь запустите плейбук, указав путь к файлу с паролем:
Terminal window ansible-playbook -i inventory.ini deploy_ghost.yml --vault-password-file vault_password.txt - Плейбук должен выполниться без интерактивного запроса пароля.
Контрольные вопросы
Section titled “Контрольные вопросы”- Какую проблему решает Ansible Vault?
- Какой командой можно зашифровать уже существующий файл?
- Как запустить плейбук, который использует зашифрованные файлы?
- Почему файл с паролем от Vault (
vault_password.txt) обязательно нужно добавлять в.gitignore?