Policy-as-Code: OPA / Conftest для Terraform

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

policy-as-codeopaconftest

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
  • ограничения по регионам и типам инстансов

Как это работает

  1. Terraform-конфигурация или terraform plan передаются в Conftest
  2. Conftest запускает политики на языке Rego
  3. Если правило нарушено — пайплайн падает 🚫

Пример политики

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, безопасности и автоматизации.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же