Перейти к содержанию

Инфраструктура как код

Требования применяются к целям, инфраструктура которых управляется как код. Уровни обязательности определены в корневом 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.