Terraform отлично автоматизирует инфраструктуру, но без контроля легко получить открытые security group, публичные бакеты и ресурсы без обязательных тегов. Здесь помогает Policy-as-Code — подход, при котором правила безопасности и compliance описываются как код и проверяются автоматически.
Что такое OPA и Conftest
- OPA (Open Policy Agent) — движок для принятия решений на основе политик
- Conftest — удобный CLI-инструмент, который применяет политики OPA к конфигам и IaC-файлам, включая Terraform
Проще говоря: вы пишете правила один раз и проверяете, соответствует ли инфраструктура требованиям компании до деплоя.
Зачем это нужно в Terraform
- ✅ Предотвращает ошибки до
apply - ✅ Упрощает DevSecOps-проверки в CI/CD
- ✅ Делает требования прозрачными и повторяемыми
- ✅ Снижает риск drift между “как надо” и “как развернули”
Что обычно проверяют
- запрет публичных S3 bucket / storage
- обязательные теги:
owner,env,cost_center - запрет
0.0.0.0/0для SSH и RDP - использование шифрования для дисков и БД
- соответствие naming convention
- ограничения по регионам и типам инстансов
Как это работает
- Terraform-конфигурация или
terraform planпередаются в Conftest - Conftest запускает политики на языке Rego
- Если правило нарушено — пайплайн падает 🚫
Пример политики
package main
deny[msg] {
input.resource_type == "aws_security_group_rule"
input.change.after.from_port == 22
input.change.after.cidr_blocks[_] == "0.0.0.0/0"
msg := "SSH from 0.0.0.0/0 is forbidden"
}
Как запустить
- установить
conftest - сгенерировать plan:
terraform plan -out=tfplan.binary - преобразовать:
terraform show -json tfplan.binary > tfplan.json - проверить:
conftest test tfplan.json
Почему лучше проверять plan, а не только .tf
Файлы Terraform показывают намерение, но именно plan отражает итоговые изменения с учетом модулей, переменных и условий. Это снижает количество ложных выводов и делает проверку ближе к реальному деплою.
Плюсы подхода 🚀
- политики версионируются в Git
- легко встраиваются в GitHub Actions, GitLab CI, Jenkins
- единые правила для команд и окружений
- меньше ручных ревью на базовые security-ошибки
Ограничения
- Rego требует времени на освоение
- плохо написанные политики дают шум
- нужны процессы поддержки правил, иначе они быстро устаревают
Практический совет
Начинайте с 5–10 критичных правил: публичный доступ, теги, шифрование, запрещенные порты. Затем постепенно расширяйте набор политик. Так внедрение пройдет без сопротивления команды и быстрее даст эффект. 🔐
Подборку полезных каналов про IT стоит сохранить отдельно — там много практики по Terraform, DevOps, безопасности и автоматизации.