Как происходит назначение прав доступа
Цепочка событий при назначении прав пользователю или группе.
-
- Краткий обзор процесса
- Схема потока
- Пошаговый процесс
- Зависимости от уровня назначения
- Типичные причины сбоев
На этой странице
-
- Краткий обзор процесса
- Схема потока
- Пошаговый процесс
- Зависимости от уровня назначения
- Типичные причины сбоев
Краткий обзор процесса
Если вы ещё не знакомы с особенностями ресурсов для управления правами доступа в платформе «Штурвал», начните с ознакомления со статьей Кастомные ресурсы для управления правами доступа.
- Администратор назначает права в GUI (пользователь или группа + один или несколько наборов доступов).
- Backend создаёт или обновляет
Scope(граница уровня) иUserRole/GroupRole(субъект + списокPermission). - Оператор согласования прав (shturval-permission-operator, Deployment
shturval-permission-operator-controller) выполняет reconcile:Permission→ClusterRoleв кластере управления и клиентских кластерах;UserRole/GroupRole→ применение через плагины (Argo CD, Kubeflow).
- Параллельно оператор обновляет OPA bundle (HTTP
/bundle, порт 8082) — данные для Authz (OPA) при проверке запросов в Backend. - Статус отражается в
UserRole/GroupRole.statusи в GUI.
Схема потока

Подробные диаграммы reconcile — в Операторе согласования прав.
Пошаговый процесс
Шаг 1. Действие в интерфейсе
Администратор на странице Управление ролями:
- Выбирает уровень (Платформа, Тенант, Кластер или Неймспейс).
- Нажимает + рядом с «Пользователи» или «Группы».
- Указывает имя пользователя или группы (из LDAP или вручную).
- Выбирает один или несколько наборов доступов.
- Нажимает Сохранить.
Подробнее: Назначение прав доступа.
Шаг 2. Область и привязка (Scope, UserRole / GroupRole)
Backend сохраняет назначение в виде кастомных ресурсов Kubernetes (API-группа permissions.shturval.tech, неймспейс shturval-backend кластера управления).
2a. Область (Scope)
Backend создаёт или использует Scope, соответствующий выбранному уровню (платформа, тенант, кластер, неймспейс). Границы области задаются полем spec.objects.
На уровне Тенант связанный Scope также создаётся оператором из объекта Tenant (имя scope совпадает с именем тенанта).
2b. Привязка (UserRole / GroupRole)
- UserRole — назначение пользователю;
- GroupRole — назначение группе.
В спецификации указываются:
| Поле | UserRole | GroupRole |
|---|---|---|
| Область | spec.scope — имя Scope |
spec.scope — имя Scope |
| Субъект | spec.username |
spec.claim |
| Наборы доступов | spec.permissions — имена Permission |
spec.permissions — имена Permission |
Обратите внимание! после создания объекта spec.username (UserRole) и spec.claim (GroupRole) нельзя изменить — validating webhook отклонит Update.
Подробнее: Кастомные ресурсы для управления правами доступа.
Шаг 3. Согласование наборов (Permission)
Каждый набор доступов в платформе соответствует CR Permission. Его согласует PermissionReconciler оператора shturval-permission-operator:
granted_platform_permissions→ агрегирующийClusterRoleна платформе (префикс имёнplatform:);granted_cluster_rules→ClusterRoleв клиентских кластерах (префиксshturval:); доступ к API клиентского кластера — через Secret<имя-кластера>-kubeconfig, ключvalue.
События CAPI Cluster (готовность control plane, удаление, пауза) инициируют повторное согласование затронутых Permission.
Шаг 4. Согласование привязки через shturval-permission-operator
UserRoleReconciler и GroupRoleReconciler (оператор shturval-permission-operator, Deployment shturval-permission-operator-controller) выполняют reconcile привязки:
- Читают связанный
Scopeи наборыPermissionизspec.permissions. - Определяют целевые кластеры по
Scope(см. таблицу уровней ниже). - Последовательно вызывают плагины для каждого permission:
- RBAC — привязка субъекта к
ClusterRole, созданным на шаге 3; - Argo CD, Kubeflow, tenant — если соответствующие поля заданы в
Permission.
- RBAC — привязка субъекта к
- При ошибке плагина — немедленный повтор reconcile; при успехе — обновление
status.
Подробнее об архитектуре оператора: Оператор согласования прав (permissions operator).
Шаг 5. Плагины Kubeflow и Argo CD
Если в наборе доступов (Permission) указаны роли Kubeflow (kubeflow-admin, kubeflow-edit, kubeflow-view), плагин Kubeflow применяет соответствующие права:
- Платформа — профили (неймспейсы) во всех кластерах;
- Кластер — профили кластера;
- Неймспейс — профиль одного неймспейса.
Если указана роль Argo CD (admin, edit, view), плагин Argo CD создаёт или обновляет роли в проектах:
- Платформа — все проекты;
- Кластер — проекты кластера;
- Неймспейс — проект одного неймспейса.
Шаг 6. Статус применения
Оператор записывает результат в UserRole.status / GroupRole.status: вложенная карта status.permissions → кластер или платформа → имя плагина → PluginApplyStatus.
GUI отображает сводный статус по каждому целевому контуру:
| GUI | Значение в CR | Смысл |
|---|---|---|
| Зелёный | applied |
Плагин успешно применён |
| Красный | undefined или ошибка reconcile |
Сетевая или иная ошибка, сбой плагина |
| Серый | not required |
Право не требуется (например, нет роли Kubeflow или Argo CD в наборе) |
| Ожидание | not applied |
Reconcile ещё не завершён |
Для отладки: kubectl describe userrole <имя> -n shturval-backend (или grouprole).
Зависимости от уровня назначения
| Уровень | Где хранится UserRole/GroupRole | Куда применяются права |
|---|---|---|
| Платформа | shturval-backend | Кластер управления + все клиентские кластеры |
| Тенант | shturval-backend | Кластер управления + все кластеры тенанта |
| Кластер | shturval-backend | Кластер управления (для объектов платформы) + выбранный клиентский кластер |
| Неймспейс | shturval-backend | Кластер управления + выбранный неймспейс в клиентском кластере |
Границы уровня задаёт Scope, на который ссылается UserRole.spec.scope / GroupRole.spec.scope.
Обратите внимание! объекты кластеров (Cluster, Machine и др.) и объекты permissions.shturval.tech хранятся в кластере управления. Поэтому даже при назначении на уровне «кластер» или «неймспейс» часть прав применяется в кластере управления.
Типичные причины сбоев
| Симптом | Возможная причина |
|---|---|
| Красный статус в кластере управления | Платформенные разрешения в наборе отсутствуют или некорректны |
| Красный статус в клиентском кластере | Кластер недоступен; нет Secret <имя-кластера>-kubeconfig или неверный ключ value; конфликт имён RoleBinding |
| Долго «не применяется» | Статус not applied — reconcile ещё идёт; проверьте Pod shturval-permission-operator-controller в неймспейсе shturval-backend |
| Ошибка при ручном patch UserRole/GroupRole | Изменение spec.username или spec.claim после создания (validating webhook) |
| Права пропали или не обновились после паузы кластера | CAPI Cluster.Spec.Paused — оператор пересогласовывает при изменении состояния кластера |
| Пользователь не видит кластер | Назначение не применено или применено с ошибкой; проверьте статус в GUI |
| Группа не получает права | Группа не найдена в LDAP; при OIDC — проверьте маппинг групп в токене |
Подробнее: Траблшутинг доступа.