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: сначала схема, потом политика.
Источник
Как применить у себя
- Зафиксировать версию Conftest.
- Написать одну политику и два файла:
good.yamlпроходит,bad.yamlпадает. - Добавить
conftest testв CI перед деплоем. - Отметить «Изучено», когда CI остановил хотя бы один реальный нарушающий манифест.