Создайте автоматизированную среду, в которой важная информация доступна только тем, кто в ней действительно нуждается
Как разработчики, мы больше всего озабочены тем, чтобы все работало бесперебойно. Но в то же время мы обычно забываем, что сохранили конфиденциальные учетные данные, такие как JSON учетной записи службы / закрытые ключи в нашем приложении!
В идеале рекомендуется никому не делиться такой критически важной информацией. Но иногда он привязан к нашим системам контроля версий и доступен для всех, кто имеет право просматривать этот репозиторий.
В соответствии с передовой практикой мы не должны фиксировать такие файлы в наших репозиториях или хранить их в интерфейсной / клиентской среде.
Поэтому возникает вопрос: «Как создать такую среду, в которой важная информация доступна только тем, кто действительно в ней нуждается?»
В этой статье я хотел бы упомянуть один из способов сделать это, который я реализовал, используя концепцию CI / CD (Continuous Integration, Continuous Development) . С таким подходом вы не можете только защищайте служебные ключи, но также пишите критически важные коды / файлы непосредственно в среде развертывания, не раскрывая ее. Вы можете автоматизировать весь процесс одним нажатием кнопки!
Весь процесс можно разбить на следующие этапы:
- Управление учетной записью службы
- Настроить 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, которое я обнаружил во время своей работы. Сообщите мне о других лучших способах, которые вы используете. Было бы полезно и другим.
Надеюсь, вам понравилась эта статья, и вы сочли ее полезной.
Спасибо за прочтение. Продолжайте автоматизировать.