Skip to content

Latest commit

 

History

History

Отчет

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

DevOps Лабораторная работа №3 со звёздочкой * - CI/CD Secrets

Техническое задание лабораторной

Необходимо сделать красиво работу с секретами. Например, поднять Hashicorp Vault (или другую секретохранилку) и сделать так, чтобы ci/cd пайплайн (или любой другой ваш сервис) ходил туда, брал секрет, использовал его не светя в логах. В Readme аргументировать почему ваш способ красивый, а также описать, почему хранение секретов в CI/CD переменных репозитория не является хорошей практикой.

Какая система используется при работе?

Используем последнюю версию MacOS.

Начало выполнения - плохой CI/CD

Описание изображения;

Во-первых, начнём работу с того, что напишем плохой пайп. Выглядит он как-то так. Прям беее.

Что же в нём плохого? Держитесь крепче..

  • Хранение секретов в коде.

Секреты, такие как SECRET_KEY, прописаны прямо в CI/CD файле. Если кто-то получит доступ к репозиторию, то сможет узнать этот ключ. Как исправим? Используем безопасное хранилище секретов, такое как Doppler, чтобы безопасно извлекать секреты.

  • Установка зависимостей через apt-get

Нет фиксации версии, что может привести к нестабильной работе, если новые версии пакетов окажутся несовместимыми. Как исправим? Заменим на контейнеризированный подход с использованием Docker.

  • Отсутствие разделения на этапы.

Все шаги (установка, тестирование, деплой) идут в одной задаче. Если что-то упадёт, сложно понять, на каком этапе произошёл сбой. Как исправим? Разделим пайплайн на разные этапы.

  • Логирование секретов.

Секрет выводится в логах через echo, что подвергает его риску компрометации. Как исправим? Исключим вывод секретов в логи.

  • Жёсткое использование ubuntu-latest.

ubuntu-latest может меняться и ломать пайплайн. Лучше фиксировать конкретную версию.

Продолжение: Хороший CI/CD

Описание изображения;

Глаза не нарадуются! Что мы сделали?

Объясненяем изменения:

  1. Секреты хранятся теперь в Doppler.
  2. Используем Docker для изоляции окружения.
  3. Делаем разделение на этапы.
  4. Логирование секретов исключено.
  5. Фиксируем версию окружения ubuntu-22.04.

Изначально была проблема, что секреты палились. Это видно на фотографиях Описание изображения; Описание изображения; Описание изображения;

Исправил это тем, что:

  1. Секреты теперь загружаются Doppler в файл secrets.env. Это гарантирует, что значения не отобразятся в логах.
  2. Загружаем секреты в переменные окружения: использование source secrets.env позволяет нам безопасно загрузить секреты в окружение.
  3. Исключение вывода секретов в логах: мы удалили вызовы, которые могли отображать значения секретов, заменены на проверки наличия.
  4. Работа через переменные окружения: Секреты используются для формирования строк подключения и других операций, оставаясь скрытыми.
  5. Добавление проверок: Проверяется наличие скриптов перед выполнением, что предотвращает ошибки.

Описание изображения; Описание изображения; Описание изображения;

Немного о Doppler!

; ;

Почему я его выбрал вместо Vault?

  1. Простота установки: CLI легко устанавливается через Homebrew или скрипт. А я вообще веб использовал.
  2. Бесплатный план: Идеально для небольших проектов.
  3. Хорошо работает с GitHub Actions и другими CI/CD платформами.

Почему красиво?

Почему моя работа красиво сделана?

  1. Безопасна: Секреты хранятся централизованно и не попадают в репозиторий.
  2. Динамическое управляема: Секреты можно менять без необходимости обновления пайплайна.
  3. Нет секретов в логах: Секреты нигде не логируются, что предотвращает утечку

Итог проделанной работы и ответы на вопросы.

Почему хранение секретов в CI/CD переменных репозитория не является хорошей практикой? Ответ НЕ прост (много букв), есть ряд причин

Масштабируемость: если проект состоит из множества репозиториев, управление секретами в каждом из них становится трудоемким. При обновлении секретов придется вручную менять их во всех репозиториях, что увеличивает риск человеческой ошибки.

Ограниченные возможности ротации: встроенные переменные GitHub Secrets или других CI/CD платформ не предоставляют автоматической ротации секретов. Это требует дополнительной работы для создания механизмов их обновления.

Риск утечек: если доступ к репозиторию имеют разработчики с различными правами, все они потенциально могут видеть или экспортировать секреты. Даже временный доступ может создать уязвимость.

Есть и прочие, но на мой взгляд это основные.

Что мы делали вообще сегодня?

Прошли огромный путь и теперь мы здесь. Мы выбрали и настроили Doppler, сервис для управления секретами. Это позволило нам организовать безопасное хранение секретов и их автоматическое предоставление в CI/CD.

Мы написали CI/CD пайплайн, в котором скрыты ключи и безопасно используются и также пофиксили плохие практики!

Все ключи и секреты остаются скрытыми. Использование их в процессе происходит безопасно, а их значения никогда не отображаются в логах.

ХЭППИ ЭНДОМ ВСЁ НЕ ЗАКОНЧИЛОСЬ

Казалось бы, можно уже кинуть сигму и уйти в закат, но! Случилась проблема! Сенсей, оценив нашу работу, заметил недочет: зачем возиться с докером, когда есть Doppler CLI??? С моей стороны было глупо работать с докером, поэтому я собрался с силами и начал доделывать работу так, как она должна выглядеть!

Итак, что нам предстоит: ;

Проанализировав требования, я начал действовать, я обновил свой файл хорошего пайплайнчика и теперь он выглядит так: ; ;

Что произошло? Что было сделано? Спокойно, сейчас поясню: Во-первых, мы убрали лишний вызов Docker. Во-вторых, пайплайн стал чище и понятнее. В репозитории есть понятные инструкции, как запускать такую штуку, к сожалению, когда я делал первый раз я не смог воспользоваться правильно главным инструментом программиста: google. И не нашёл его.. Теперь буду умнее!

Полюбуемся логами (в которых не спалилось ни одного секрета!): ; ; ;

Вот, кстати, пайплайны. Плохой, который бееее, и хороший, который на самом деле отличный! ;