🐳Как обеспечить безопасность среды выполнения Docker с помощью политики Open Policy Agent |

🐳Как обеспечить безопасность среды выполнения Docker с помощью политики Open Policy Agent

Мануал

Что такое 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.

Модуль помогает контролировать выполнение действий над образами и контейнерами на уровне отдельных пользователей или групп, обеспечивая дополнительную защиту и соблюдение корпоративных стандартов безопасности.

sudo systemctl start docker.service
sudo systemctl status docker.service

Шаг 2: Загрузите и установите бинарник  OPA

Теперь мы собираемся загрузить и установить бинарный файл OPA CLI в каталог «/usr/local/bin/».

curl -L -o opa https://openpolicyagent.org/downloads/latest/opa_linux_amd64
chmod 755 opa
sudo mv opa /usr/local/bin/
opa version
Version: 1.13.1
Build Commit: 9c3bb906f1ac56903e2754982d66c83f9a9aaa06-dirty
Build Timestamp: 2026-01-29T20:39:56Z
Build Hostname:
Go Version: go1.25.6
Platform: linux/amd64
Rego Version: v1
WebAssembly: available

Шаг 3: Убедитесь, что Nginx установлен и запущен

Для демонстрационных целей мы установим веб-сервер Nginx на той же машине, что и демон Docker.

Этот сервер Nginx будет использоваться для предоставления пакета политики OPA, который мы подготовим на следующих шагах.

sudo dnf install nginx
sudo systemctl start nginx.service
sudo systemctl status nginx.service

Необязательно: Если вы пытаетесь получить доступ к серверу Nginx с удаленного хоста, вам может потребоваться обновить правила брандмауэра.

sudo firewall-cmd --add-port=80/tcp --permanent
success
sudo firewall-cmd --reload
success

Шаг 4: Создадим определение политики OPA

Здесь мы определим политику OPA с именем “authz.rego”, содержащую одно правило с именем “allow”, которое всегда возвращает решение “true”.

mkdir docker_opa_demo
cd docker_opa_demo/
cat authz.rego
package docker.authz
allow := true

Шаг 4: Создайте пакет политики OPA

Теперь давайте упакуем файл определения политики OPA в формате сжатого gzip и поместим его в корневую директорию документов Nginx по умолчанию «/usr/share/nginx/html».

sudo opa build --bundle --output /usr/share/nginx/html/bundle.tar.gz .

Цель этого шага — предоставить наш пакет политики OPA через HTTP-сервер Nginx.

Шаг 5: Создайте файл конфигурации OPA

Здесь мы создадим пользовательский файл конфигурации для агента политики OPA, который предоставит информацию о конечной точке службы авторизации и ресурсе пакета политики, который будет использоваться для применения политики.

С помощью этой конфигурации все решения по политике будут записываться в консоль журнала Docker.

$ sudo mkdir -p /etc/docker/config
$ cat /etc/docker/config/opa-config.yaml
services:
  authz:
    url: http://localhost
bundles:
  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 plugin ls
ID             NAME                      DESCRIPTION                                     ENABLED
f23a041b7e83   opa-docker-authz:latest   A policy-enabled authorization plugin for Do…   true 

Теперь нам нужно настроить демон Docker для использования плагина для авторизации.

Нам нужно предоставить имя плагина авторизации OPA, как показано ниже.

$ sudo cat /etc/docker/daemon.json
{
"authorization-plugins": ["opa-docker-authz"]
}

Перезагрузите демон Docker с обновленной конфигурацией.

Вы также можете перезапустить службу Docker.

sudo kill -HUP $(pidof dockerd)

Если все настроено правильно, вы все равно сможете без проблем перечислить контейнеры.

Однако в журналах демона Docker будет показано, как он использует политику OPA перед предоставлением доступа.

Попробуйте проверить журналы службы Docker, чтобы убедиться, что применение агента политики OPA работает.

Шаг 8: Проверка применения политики OPA

Теперь пришло время запустить контейнер httpd, как показано ниже.

Политика OPA позволит запустить этот контейнер, так как у него не установлен флаг “privileged” в значение “true”.

docker run -d -p 8080:80 httpd:latest

Теперь, если мы попытаемся запустить тот же контейнер с установленным флагом “privileged” в значение “true”, вы получите ошибку “авторизация отклонена плагином”, как показано ниже.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий