how/cicd
Между шагами plan и apply встаёт engine - Checkov, OPA или Sentinel. Он читает plan.json и решает, можно ли применять. Бакет без шифрования просто не пройдёт.
terraform plan уже сказал тебе что изменится. Ревьюер
из [[tf-plan-as-artifact|PR-комментария]] уже посмотрел и
подтвердил изменения. terraform apply пойдёт под
[[tf-oidc-aws|узкими временными creds]]. Что может пойти не так?
Человек может не заметить, что новый S3-бакет создаётся без
шифрования. Или что security-group открыта в 0.0.0.0/0 на 22-й
порт. Или что IAM-policy даёт Action: "*". Это всё видно в
plan'е - но в plain text плане 200 строк, и глаз замыливается.
Policy gate решает эту задачу автоматически: между plan и
apply стоит engine, который читает plan.json и проверяет
изменения против формальных правил. Нарушение → apply
заблокирован.
Жми ▶ - посмотрим, как это работает.
Стандартный pipeline: terraform plan → ревьюер кивнул →
terraform apply. Ничто формально не проверяет, что в плане
нет нарушений комплаенса.
В небольшой команде с дисциплинированными инженерами это работает. В большой команде или под давлением сроков - рано или поздно проскочит S3-бакет с публичным доступом, RDS без шифрования, или security-group с открытым 0.0.0.0/0.
Эту проблему гейт решает автоматизацией.
итого
Что важно запомнить:
plan.json содержит
все вычисленные значения, включая то, что появляется только
во время refresh'а. Проверка HCL глазами этого не даёт.С этим стеком закрыта вся CI/CD-сторона: [[tf-plan-as-artifact|артефакт плана]] + [[tf-oidc-aws|OIDC-creds]] + policy gate = production-ready pipeline для Terraform.