- Что такое Open Policy Agent (OPA)?
- Что представляет собой модуль авторизации Docker на базе OPA (opa-docker-authz)?
- Общая архитектура Open Policy Agent (OPA)
- Шаг 1: Убедитесь, что Docker установлен и запущен
- Шаг 2: Загрузите и установите бинарник OPA
- Шаг 3: Убедитесь, что Nginx установлен и запущен
- Шаг 4: Создадим определение политики OPA
- Шаг 4: Создайте пакет политики OPA
- Шаг 5: Создайте файл конфигурации OPA
- Шаг 6: Установите плагин opa-docker-authz
- Шаг 7: Обновите политику OPA, чтобы запретить привилегированные контейнеры
- Шаг 8: Проверка применения политики OPA
Что такое Open Policy Agent (OPA)?
Open Policy Agent (или сокращенно OPA) — это открытый универсальный движок политик, предназначенный для унификации правил соблюдения политик по всей инфраструктуре стека приложений.
OPA предлагает декларативный высокоуровневый язык программирования, позволяющий описать политику в виде программного кода, а также простой интерфейс прикладного программирования (API), благодаря которому делегируется принятие решений относительно исполнения политики вашим приложениям.
Вы можете использовать OPA для реализации правил авторизации и безопасного взаимодействия в микросервисах, системах оркестрации контейнеров типа Kubernetes, процессах непрерывной интеграции и доставки (CI/CD), шлюзы API и многих других компонентах IT-инфраструктуры.
Что представляет собой модуль авторизации Docker на базе OPA (opa-docker-authz)?
Проект opa-docker-authz является модулем авторизации для Docker Engine, реализованным на основе Open Policy Agent (OPA).
Его задача заключается в предоставлении детальной, основанной на политике системы контроля доступа к командам Docker.
Модуль помогает контролировать выполнение действий над образами и контейнерами на уровне отдельных пользователей или групп, обеспечивая дополнительную защиту и соблюдение корпоративных стандартов безопасности.
Шаг 2: Загрузите и установите бинарник OPA
Теперь мы собираемся загрузить и установить бинарный файл OPA CLI в каталог «/usr/local/bin/».
Шаг 3: Убедитесь, что Nginx установлен и запущен
Для демонстрационных целей мы установим веб-сервер Nginx на той же машине, что и демон Docker.
Этот сервер Nginx будет использоваться для предоставления пакета политики OPA, который мы подготовим на следующих шагах.
Необязательно: Если вы пытаетесь получить доступ к серверу Nginx с удаленного хоста, вам может потребоваться обновить правила брандмауэра.
Шаг 4: Создадим определение политики OPA
Здесь мы определим политику OPA с именем “authz.rego”, содержащую одно правило с именем “allow”, которое всегда возвращает решение “true”.
Шаг 4: Создайте пакет политики OPA
Теперь давайте упакуем файл определения политики OPA в формате сжатого gzip и поместим его в корневую директорию документов Nginx по умолчанию «/usr/share/nginx/html».
Цель этого шага — предоставить наш пакет политики OPA через HTTP-сервер Nginx.
Шаг 5: Создайте файл конфигурации OPA
Здесь мы создадим пользовательский файл конфигурации для агента политики OPA, который предоставит информацию о конечной точке службы авторизации и ресурсе пакета политики, который будет использоваться для применения политики.
С помощью этой конфигурации все решения по политике будут записываться в консоль журнала Docker.
$ sudo mkdir -p /etc/docker/config$ cat /etc/docker/config/opa-config.yaml services: authz: url: http://localhostbundles: authz: service: authz resource: bundle.tar.gz# Optional - Print decisions in the Docker logs. Configure a remote service for production use cases.decision_logs: console: trueШаг 6: Установите плагин opa-docker-authz
Это важный шаг, на котором мы установим плагин Docker “opa-docker-authz” и передадим пользовательский файл конфигурации, который мы создали на предыдущем шаге.
Давайте перечислим установленные плагины и проверим, включен ли он.
Теперь нам нужно настроить демон Docker для использования плагина для авторизации.
Нам нужно предоставить имя плагина авторизации OPA, как показано ниже.
$ sudo cat /etc/docker/daemon.json {"authorization-plugins": ["opa-docker-authz"]}Перезагрузите демон Docker с обновленной конфигурацией.
Вы также можете перезапустить службу Docker.
Если все настроено правильно, вы все равно сможете без проблем перечислить контейнеры.
Однако в журналах демона Docker будет показано, как он использует политику OPA перед предоставлением доступа.
Попробуйте проверить журналы службы Docker, чтобы убедиться, что применение агента политики OPA работает.
Шаг 8: Проверка применения политики OPA
Теперь пришло время запустить контейнер httpd, как показано ниже.
Политика OPA позволит запустить этот контейнер, так как у него не установлен флаг “privileged” в значение “true”.
Теперь, если мы попытаемся запустить тот же контейнер с установленным флагом “privileged” в значение “true”, вы получите ошибку “авторизация отклонена плагином”, как показано ниже.








