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

Экспериментальные модули

В этом разделе описаны сервисы, которые входят в поставку, но не входят в ядро и не поднимаются по умолчанию: Policy Decision Point (policy-service) и сервис лицензирования (entitlement-service). Раздел нужен тем, кто хочет попробовать эти модули или оценить, на что они способны, и тем, кто эксплуатирует инсталляцию, где они уже включены.

Статус: experimental и frozen

Оба модуля работают и проверяются CI, но новых возможностей не получают: дефекты исправляются, только если ломают сборку профиля. Судьба policy будет решена на одной из следующих вех платформы (TAI-ADR-0040); entitlement заморожен (TAI-ADR-0034 п.4). Не стройте на них критичные сценарии без оценки рисков: API может измениться или модуль может быть выведен из поставки.

Сводка

Модуль Профиль compose Статус Что делает Кто им пользуется
Policy Service policy experimental ReBAC-решения «может ли principal P выполнить действие A над ресурсом R» поверх OpenFGA Control Plane (CP_AUTHZ_MODE = shadow или policy), memory-service (CB_POLICY_ENABLED)
Entitlement Service entitlement frozen лицензии, планы, места и квоты продуктов Control Plane (CP_ENTITLEMENT_ENABLED)

Общие свойства

Оба модуля — resource services платформы и устроены одинаково:

  • собственная PostgreSQL в своём профиле, миграции Alembic при старте контейнера (alembic upgrade head);
  • принимают только короткоживущий access token IAM своего audience и проверяют его через platform-auth-sdk (RS256 по JWKS, точные issuer и audience, fail closed);
  • административные операции первого среза — через bootstrap-заголовок (X-Policy-Bootstrap-Token, X-Entitlement-Bootstrap-Token); это временная граница, а не замена ролевой модели;
  • публикуют журнал событий с курсором (GET /api/v1/events) — потребители читают его сами, push-доставки нет;
  • порт на хосте — только 127.0.0.1; через Caddy наружу они не публикуются.
Модуль Audience IAM Scopes Порт в сети Порт на хосте
policy-service policy-service policy:check, policy:check-on-behalf, policy:admin 8030 POL_HOST_PORT (18040)
entitlement-service entitlement-service entitlement:check-on-behalf 8020 ENT_HOST_PORT (18020)

Audiences и потолки scopes заводит make bootstrap (реестр AUDIENCES в deploy/bootstrap.py) — даже если профиль не поднят.

Включение

# ядро + нужный экспериментальный профиль
make up PROFILES="core policy edge"
make up PROFILES="core entitlement edge"

# после первого подъёма профиля — повторить bootstrap:
# он создаёт service accounts, env-файлы и регистрацию каталогов
make bootstrap
# для профиля policy — с ожиданием сервиса, чтобы шаг 7 не пропустился
make bootstrap ARGS=--policy

Что делает bootstrap для каждого профиля:

Профиль Шаг bootstrap Результат
policy 7 (если в .env задан POL_BOOTSTRAP_TOKEN и policy-service отвечает) каталоги действий, публикация модели, store tenant'а, роль tenant-admin оператору, service accounts памяти и воркера проекции, файлы secrets/memory-service-iam.env и secrets/policy-service-cp.env
entitlement — только audience entitlement-service; каталог продуктов и лицензии заводятся через API сервиса

Шаг 7 и профиль policy

make secrets заполняет POL_BOOTSTRAP_TOKEN, но шаг 7 выполняется, только если policy-service уже отвечает на /healthz (одна проверка, без ожидания). Если профиль policy не поднят, bootstrap печатает «7. policy-service не отвечает (профиль policy не поднят) — шаг пропущен» и завершается успешно. Сразу после up профиля сервис может ещё не отвечать — запускайте make bootstrap ARGS=--policy: скрипт подождёт /healthz до 30 с и упадёт не дождался …, если профиль так и не поднялся (сделанное до шага 7 уже сохранено в state).

После появления env-файлов пересоздайте сервисы, которые их читают (policy-worker, memory-service).

Выключение

Модули не являются зависимостями ядра, но ядро может быть настроено на них:

Перед остановкой профиля Иначе
CP_AUTHZ_MODE=local для Control Plane (если было shadow/policy) в режиме policy все проверки прав с IAM-субъектом получают 503 policy_unavailable
MEMORY_POLICY_ENABLED=false память отдаёт 503 на операции, требующие видимости
CP_ENTITLEMENT_ENABLED=false запросы к Control Plane получают 503 entitlement_unavailable после истечения кэша
docker compose --profile policy stop

Тома (policy_db, entitlement_db) сохраняются; для полного удаления данных удалите их явно.

См. также