Инфраструктура как код¶
Требования применяются к целям, инфраструктура которых управляется как код.
Уровни обязательности определены в корневом README.md.
Terraform, OpenTofu и Ansible допустимы, но capability
infrastructure-as-code не является обязательным для каждого проекта.
INF-IAC-001. Версионируемый источник¶
Уровень: MUST
Применяется к: цели с capability infrastructure-as-code
Исходная конфигурация, version constraints инструментов и providers, modules, roles и collections должны храниться в Git. Внешняя зависимость должна быть зафиксирована версией и checksum либо неизменяемым commit.
Обоснование¶
Незафиксированный инструмент или module меняет результат без изменения проектного commit.
Проверка¶
- инициализация из чистого checkout;
- статическая проверка constraints и lock-файлов.
Исключения¶
Локальный module того же commit не требует отдельной версии.
INF-IAC-002. Plan перед apply¶
Уровень: MUST
Применяется к: изменению non-production или production
GitLab pipeline должен сформировать plan/diff из проверяемого commit и сохранить его как защищённый artifact или merge request report. Production apply должен использовать рассмотренное изменение; повторный расчёт, отличающийся от рассмотренного plan, должен требовать нового review.
Обоснование¶
Review исходного кода без фактического diff не показывает удаляемые и заменяемые ресурсы.
Проверка¶
- MR с созданием, заменой и удалением ресурса;
- тест изменения входов между plan и apply.
Исключения¶
Ansible check mode MAY заменить plan для module, который достоверно его поддерживает; иначе pipeline должен показать собственный diff и post-check.
INF-IAC-003. Состояние и блокировка¶
Уровень: MUST
Применяется к: stateful IaC-инструменту
State должен храниться в защищённом backend с блокировкой конкурентной записи, историей версий и восстановлением. State и plan должны обрабатываться как чувствительные данные; секретные значения не должны выводиться в job log.
Обоснование¶
Потеря или конкурентная запись state приводит к ошибочному изменению ресурсов.
Проверка¶
- конкурентный запуск двух apply;
- восстановление предыдущей версии state;
- secret scan artifacts и job logs.
Исключения¶
Инструмент без state применяет требования только к diff и журналу результата.
INF-IAC-004. Drift¶
Уровень: MUST
Применяется к: production-ресурсам, управляемым IaC
Автоматическая проверка должна обнаруживать расхождение фактического состояния с Git. Drift не должен автоматически исправляться, если исправление удаляет или заменяет ресурс без того же approval, что обычное production-изменение.
Обоснование¶
Слепое self-heal может повторить опасное удаление.
Проверка¶
- контролируемое ручное изменение;
- проверка alert/report и approval для destructive action.
Исключения¶
Безопасные поля, разрешённые для автоматического reconciliation, должны быть перечислены policy.