Skip to content

Лабораторная работа №9: Безопасное управление секретами (Vault)

Научиться использовать Ansible Vault для шифрования чувствительных данных (паролей, ключей API), чтобы их можно было безопасно хранить в системе контроля версий (Git) вместе с остальным кодом.

Основные теоретические положения

Section titled “Основные теоретические положения”

1. Проблема хранения секретов

Section titled “1. Проблема хранения секретов”

Хранить пароли, токены и ключи в открытом виде в файлах конфигурации (.env, docker-compose.yml) — крайне небезопасно. Если этот код попадет в публичный репозиторий, любой сможет получить доступ к вашей системе.

Ansible Vault — это инструмент, встроенный в Ansible, который позволяет шифровать целые файлы или отдельные переменные.

  • Файл, зашифрованный с помощью Vault, выглядит как набор случайных символов.
  • Для его расшифровки (чтения или использования в плейбуке) требуется пароль, который вы задаете при создании.
  • Ansible автоматически расшифровывает такие файлы “на лету” во время выполнения плейбука, если ему предоставить пароль.
  • Рекомендуемая литература: Ansible Vault (Документация Ansible)
  • ansible-vault create <имя_файла>: Создает новый зашифрованный файл.
  • ansible-vault encrypt <имя_файла>: Шифрует существующий файл.
  • ansible-vault decrypt <имя_файла>: Расшифровывает файл.
  • ansible-vault edit <имя_файла>: Позволяет редактировать зашифрованный файл в текстовом редакторе.
  • ansible-vault view <имя_файла>: Показывает содержимое зашифрованного файла.

Задания для выполнения

Section titled “Задания для выполнения”
  1. Шифрование файла .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
  2. Запуск плейбука с 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 и запустит контейнеры.
  3. (Опционально) Использование файла с паролем (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
    • Плейбук должен выполниться без интерактивного запроса пароля.
  1. Какую проблему решает Ansible Vault?
  2. Какой командой можно зашифровать уже существующий файл?
  3. Как запустить плейбук, который использует зашифрованные файлы?
  4. Почему файл с паролем от Vault (vault_password.txt) обязательно нужно добавлять в .gitignore?