Изменения инфраструктуры — через merge request в вашем GitLab
Часто инфраструктуру меняют с ноутбуков или держат для этого отдельный сервер Atlantis. GitLab умеет главное сам: хранить состояние, показывать plan в merge request, применять изменения после одобрения и регулярно проверять расхождения. Одной системой меньше, одна модель доступа.
apply запускают с ноутбуков, а кто что поменял — видно только из чата.
Состояние, plan в каждом merge request, apply после одобрения и проверка расхождений — в GitLab CI.
Каждое изменение инфраструктуры просмотрено и записано там же, где код.
Для кого
- Инженеры запускают plan и apply у себя, и об изменениях вы узнаёте после.
- У вас есть сервер Atlantis, и хочется на одну систему меньше обновлять и защищать.
- Конвейер был на шаблонах Terraform от GitLab: GitLab их больше не поставляет (документация GitLab).
- Проверяющие спрашивают, кто согласовал изменение инфраструктуры, а ответ — в переписке.
Варианты без прикрас
| Вариант | Что это | Цена вопроса |
|---|---|---|
| apply с ноутбуков | Каждый инженер запускает plan и apply у себя | Нет ревью и записи, ключи облака на ноутбуках |
| Atlantis | Открытый сервер (Apache-2.0), запускает plan и apply из merge request | Бесплатно и проверено временем, но это ещё один сервер со своими правами |
| GitLab | Хранилище состояния, конвейеры и одобрения, которые у вас уже есть | Меньше расширенных функций, зато всё в одном месте |
Как это устроено в GitLab
Состояние
Состояние OpenTofu хранится в GitLab: с блокировками, версиями и шифрованием на диске, на всех редакциях, включая бесплатную. По желанию включаем шифрование самого состояния в OpenTofu ключами из OpenBao.
Конвейер
Компонент OpenTofu для GitLab CI (лицензия MIT) копируем в ваш GitLab и закрепляем версию. Провайдеры берутся с зеркала, а не из закрытых для РФ реестров.
Ревью и применение
plan — в каждом merge request. apply — только после слияния, из защищённых веток. Файлы plan могут содержать секреты, поэтому закрываем их от ролей ниже Developer.
Одобрения
В GitLab Premium и Ultimate — обязательные одобрения от названных групп. В бесплатной версии одобрения не обязательны, поэтому apply разрешаем только мейнтейнерам через защищённые ветки.
Расхождения
Конвейер по расписанию запускает plan и сообщает команде о любом отличии реальности от кода.
Для госсистем
Приказ ФСТЭК № 117 требует исключать несанкционированное изменение настроек и обнаруживать такие изменения с выяснением причин (п. 37). Изменения только через merge request и регулярная проверка расхождений дают и то и другое.
Возможности GitLab — по документации GitLab (состояние, одобрения). Если у вас AppSec.Code, что из этого доступно в нём, проверяем на замерах.
Как проходит проект
- Шаг 1 · 1–3 дня
Замеры
Проекты, окружения, как сейчас применяются изменения, кто имеет доступ. Фиксируем цену.
- Шаг 2
Пилот
Шаблон конвейера, состояние и правила доступа на одном проекте.
- Шаг 3
Остальные проекты
Переносим партиями: состояние переезжает в GitLab, после переноса plan пустой. Старый сервер выключаем в конце.
- Шаг 4
Передача
Короткая инструкция для инженеров и сессия с командой.
Порядок всегда один. Сколько займёт каждый шаг, зависит от объёма: замеры на первом шаге задают цену и сроки.
Что нужно от вас
- Права мейнтейнера в группах GitLab, которые входят в работу.
- Ключи облака по окружениям или разрешение их создать.
- Список, кто где может применять изменения.
Что не входит
- Переписывание кода инфраструктуры.
- Установка самого GitLab — считаем отдельно, если нужна.
Вопросы и ответы
Atlantis — это плохо?
Нет. Он открытый, бесплатный и широко используется. В GitLab переходят, чтобы обслуживать на одну систему меньше и держать права в одном месте.
Нужен GitLab Premium?
Нет. Premium добавляет обязательные одобрения; в бесплатной версии ограничиваем, кто может применять изменения, через защищённые ветки и роли.
А если мы на Terraform, а не на OpenTofu?
Тот же конвейер работает и с Terraform. По умолчанию ставим OpenTofu, потому что он под открытой лицензией. Про переход →
Как у вас меняют инфраструктуру сейчас?
С ноутбуков, через Atlantis или уже из GitLab; сколько проектов и окружений; где лежит состояние. Ответим с планом.