Данный репозиторий содержит сопутствующую информацию к воркшопу на Positive Hack Days 2025.
В папке theory можно найти основную информацию о синтаксисе Rego, которая потребуется для решения заданий.
В папке practice находятся практические задания, большинство из которых были разобраны на воркшопе. Для каждого из заданий имеется решение для самопроверки. В папке practice/demo находятся задания к демонстрационному JSON. В папке practice/dockerfile лежат задания для разных Dockerfile, которые рекомендуется проверять с помощью утилиты conftest. В папке practice/k8s лежит пример интеграции OPA в Kubernetes с помощью Gatekeeper.
- Conftest, установленный через Docker (
docker pull openpolicyagent/conftest), либо в качестве исполняемого файла (гайд по установке или ссылка на бинарники) - Плагин Open Policy Agent в Visual Studio Code (желательно) ИЛИ открытый Rego Playground
- (По желанию) склонированный репозиторий
Решать задания и проверять их можно тремя способами...
Для решения задач этим способом необходимо создать в рабочей директории файл в формате .rego. В этом файле будет происходить написание политик, а входные данные будут браться из файла input.json. Для запуска решений в папке solutions в репозитории, необходимо переместить файл input.json в эту папку, после чего открыть файл в VS Code и выполнить желаемую политику.
Important
Для качественной работы плагина на Linux необходимо установить Regal не через плагин, а напрямую из репозитория Regal для вашей архитектуры. Это связано с тем, что плагин качает некорректную версию, которая попросту не запускается. После скачивания исполняемого файла необходимо указать путь до него в настройках плагина через settings.json ("opa.dependency_paths.regal"). Для Windows установка OPA и Regal через плагин работает без проблем.
Способ 2 - conftest
При условии, что conftest уже установлен на ПК, для удобства необходимо создать папку policy и писать политики в файлах .rego внутри этой папки. После чего запускать conftest и смотреть на результаты. Поскольку входящий файл всегда один и тот же, команда для всех политик (при условии, что они находятся в папке policy) будет одинаковой. При желании, путь до папки с политиками можно изменить с помощью флага -p.
# Если входящие данные подаются через JSON
conftest test --all-namespaces input.json
# conftest автоматически определит тип файла
# Можно указать путь как до файла, так и до папки
conftest test --all-namespaces Dockerfile
conftest test --all-namespaces my_files_dirДля запуска всех предоставленных решений (если они находятся в папке solutions) необходимо выполнить команду:
conftest test --all-namespaces -p solutions input.jsonПри использовании Docker команда будет выглядеть следующим образом:
docker run --rm -v ${PWD}:/project openpolicyagent/conftest test --all-namespaces -p solutions input.jsonСпособ 3 - Rego Playground
Необходимо скопировать содержимое файла input.json и вставить в окно INPUT, а в основном окне писать политику. Для запуска предоставленных решений достаточно в основное окно вставить содержимое .rego файлов в папке solutions.
В данном репозитории с помощью Github Actions запускается пайплайн с conftest. Его можно использовать как пример интеграции в пайплайн, либо для проверки, какой результат должны выводить правильные ответы, и что эти ответы работают правильно.