Создайте автоматизированную среду, в которой важная информация доступна только тем, кто в ней действительно нуждается

Как разработчики, мы больше всего озабочены тем, чтобы все работало бесперебойно. Но в то же время мы обычно забываем, что сохранили конфиденциальные учетные данные, такие как JSON учетной записи службы / закрытые ключи в нашем приложении!

В идеале рекомендуется никому не делиться такой критически важной информацией. Но иногда он привязан к нашим системам контроля версий и доступен для всех, кто имеет право просматривать этот репозиторий.

В соответствии с передовой практикой мы не должны фиксировать такие файлы в наших репозиториях или хранить их в интерфейсной / клиентской среде.

Поэтому возникает вопрос: «Как создать такую ​​среду, в которой важная информация доступна только тем, кто действительно в ней нуждается?»

В этой статье я хотел бы упомянуть один из способов сделать это, который я реализовал, используя концепцию CI / CD (Continuous Integration, Continuous Development) . С таким подходом вы не можете только защищайте служебные ключи, но также пишите критически важные коды / файлы непосредственно в среде развертывания, не раскрывая ее. Вы можете автоматизировать весь процесс одним нажатием кнопки!

Весь процесс можно разбить на следующие этапы:

  1. Управление учетной записью службы
  2. Настроить GitLab CI

Управление учетной записью службы

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

Здесь я использую App Engine из Google Cloud Platform для развертывания и запуска нашего кода.

Чтобы создать учетную запись службы:

  • Перейдите на страницу администратора I AM и нажмите ➕ «Создать учетную запись службы».
  • Рекомендуется придерживаться принципа наименьших привилегий. Поэтому я выбираю роли «Администратор App Engine» и «Учетная запись службы Cloud Build», чтобы создать ключ JSON, который мы будем использовать на следующем шаге.

  • Загрузите ключ JSON и переходите к следующему шагу.

Настройка GitLab CI

Теперь в GitLab (вы можете использовать любые системы контроля версий) нам нужно настроить переменные, которые будут использовать среду выполнения при развертывании нашего кода.

Здесь я создал три переменные: PROJECT_ID, SERVICE_ACCOUNT и AWS_SERVICES_CREDENTIALS.

  • PROJECT_ID содержит имя проекта, в котором я хочу развернуть свой код.
  • SERVICE_ACCOUNT содержит строку JSON, которую мы только что сгенерировали на предыдущем шаге.
  • AWS_SERVICES_CREDENTIALS содержит учетные данные для авторизации, которые мой код будет использовать внутри компании для связи с некоторыми сервисами, развернутыми на AWS.

Примечание: вы можете создать столько переменных, сколько вам нужно.

Вот, AWS_SERVICES_CREDENTIALS - это тот, кого я пытаюсь защитить.

Для этого нам нужно создать файл .gitlab-ci.yml в корневой папке нашего проекта.

В разделе сценариев вы можете увидеть инструкции bash для выполнения желаемых действий. После установки Google Cloud SDK он сначала создаст файл MY_AWS_SERVICES_CREDENTIALS.json и запишет в него AWS_SERVICES_CREDENTIALS учетные данные.

Поскольку эти переменные доступны только разработчикам репозитория, мы можем ограничить до некоторой степени открытые ключи / секреты.

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

Все процессы происходили в контейнере Docker, поэтому вы также можете выполнять тестирование и другие операции. Подробнее об этом читайте в этом фантастическом произведении. Также возможно создать свои собственные персонализированные Docker / Runners для того же. Может, напишу о них в другом материале.

Теперь git push в главную ветку автоматически развернет код в среде движка приложения с файлом JSON учетных данных.

Заключение

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

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

Спасибо за прочтение. Продолжайте автоматизировать.