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

Conftest: политики для конфигурации

Безопасность · Policy as Code
Не изучено

Добавлено 2026-10-29.

Проблема

Требования «без privileged», «только образы из своего registry», «у Deployment есть лимиты» живут в голове и в ревью. Один пропущенный манифест — и правило нарушено.

Решение

Записать требования как политики на Rego и проверять ими YAML, JSON, Dockerfile и другие структурированные файлы в CI. Политика без тестов ненадёжна: у каждой нужен разрешённый и запрещённый пример.

Пример

policy/deployment.rego — синтаксис Rego v1, как в README Conftest:

package main

deny contains msg if {
  input.kind == "Deployment"
  some c in input.spec.template.spec.containers
  c.securityContext.privileged == true
  msg := sprintf("Контейнер %s запущен как privileged", [c.name])
}
conftest test k8s/deployment.yaml   # ненулевой код при нарушении
conftest test tests/good.yaml       # должен пройти
conftest test tests/bad.yaml        # должен упасть с сообщением политики

Когда применять

Когда одно и то же требование к конфигурации проверяется руками больше двух раз. Для манифестов Kubernetes — после Kubeconform: сначала схема, потом политика.

Источник

Как применить у себя

  1. Зафиксировать версию Conftest.
  2. Написать одну политику и два файла: good.yaml проходит, bad.yaml падает.
  3. Добавить conftest test в CI перед деплоем.
  4. Отметить «Изучено», когда CI остановил хотя бы один реальный нарушающий манифест.