Как создать пользовательскую роль платформы
Содержание
1. Обзор2. Основные понятия3. Технические изменения4. Поддерживаемые методы конфигурации5. Конфигурация5.1 YAML RoleTemplateМетод FunctionResource (поддерживается до v4.5)Метод агрегации ClusterRole (v4.2+)Метод customRules5.2 Получение ClusterRoles, сгенерированных из RoleTemplate6. Копирование и сокращение (примеры)6.1 Сокращение системного RoleTemplate YAML6.2 Сокращение namespace-developer-system до роли аудитора1. Обзор
В этом документе объясняются основные концепции пользовательских ролей и как настроить RoleTemplate.
2. Основные понятия
- RoleTemplate: Шаблон пользовательской роли. Определяет семантику роли и наборы разрешений, которые контроллер преобразует в ClusterRoles.
- FunctionResource: Абстракция ресурсов K8s, используемых функционалом продукта; ссылается через
functionResourceRefв RoleTemplate. - ClusterRole: Набор правил RBAC; может агрегироваться в системные роли с помощью меток.
- UserBinding: Связь между пользователями и ролями/областями; контроллер на основе UserBinding генерирует RoleBinding/ClusterRoleBinding для окончательной авторизации.
- Значение
functionResourceRefберётся изmetadata.nameFunctionResource. - Отображаемые имена обычно находятся в
metadata.annotations, которые можно использовать для сопоставления с модулями UI.
3. Технические изменения
Начиная с ACP v4.3, разрешения функций постепенно мигрируют с FunctionResource на нативное управление ClusterRole в K8s. Разрешения модуля RoleTemplate будут агрегированы в системные роли через метки ClusterRole. Управление на основе FunctionResource будет снято с поддержки в v4.5.
4. Поддерживаемые методы конфигурации
- Метод FunctionResource: Выбор разрешений по модулям продукта и управление глаголами с тонкой детализацией.
- Метод агрегации ClusterRole (aggregationRules): Централизованная агрегация через метки ClusterRole; рекомендуется для v4.2+.
- customRules: Настройка разрешений с использованием нативного синтаксиса RBAC K8s; формат правил такой же, как в ClusterRole
rules.
5. Конфигурация
5.1 YAML RoleTemplate
Метод FunctionResource (поддерживается до v4.5)
Пример FunctionResource:
Метод агрегации ClusterRole (v4.2+)
ClusterRole с метками агрегации:
Метод customRules
Справочник полей RoleTemplate (с диапазонами):
spec.rules и spec.aggregationRules взаимоисключающие.
Системные метки для matchLabels
Метки агрегации системных ролей:
rbac.cpaas.io/aggregate-to-platform-admin: "true"rbac.cpaas.io/aggregate-to-platform-auditor: "true"rbac.cpaas.io/aggregate-to-cluster-admin: "true"rbac.cpaas.io/aggregate-to-project-admin: "true"rbac.cpaas.io/aggregate-to-namespace-admin: "true"rbac.cpaas.io/aggregate-to-namespace-developer: "true"rbac.cpaas.io/aggregate-to-basic-user: "true"
Метки агрегации по областям:
rbac.cpaas.io/aggregate-to-scope-cluster: "true"rbac.cpaas.io/aggregate-to-scope-project-ns: "true"rbac.cpaas.io/aggregate-to-scope-business-ns: "true"rbac.cpaas.io/aggregate-to-scope-system-ns: "true"rbac.cpaas.io/aggregate-to-scope-kube-public: "true"
Поддерживаются также пользовательские метки для агрегации.
Справочник полей FunctionResource:
acp-namespace-resource-manage не разрешён в пользовательских ролях.
5.2 Получение ClusterRoles, сгенерированных из RoleTemplate
Запросить ClusterRoles, сгенерированные RoleTemplate, можно по меткам:
6. Копирование и сокращение (примеры)
Для пользовательских ролей рекомендуется копировать встроенный системный шаблон и сокращать его, чтобы не пропустить разрешения модулей.
6.1 Сокращение системного RoleTemplate YAML
Шаги:
- Оставить необходимые FunctionResources.
- Сократить глаголы до только чтения (get/list/watch).
- Удалить неиспользуемые модули.
Пример роли: developer auditor без разрешений на секреты
- В пользовательских ролях не настраивайте Namespace Resource Management (FunctionResource:
acp-namespace-resource-manage). - Удалите User Secret Dictionary (FunctionResource:
acp-user-secret). - Установите все глаголы в get/list/watch.
Пример YAML:
6.2 Сокращение namespace-developer-system до роли аудитора
Подход:
- Сохранить структуру областей (cluster / project-ns / business-ns / system-ns / kube-public).
- Заменить метки агрегации на метки аудитора (требуются промаркированные ClusterRoles).
Пример (фрагмент):
aggregate-to-namespace-auditor должен совпадать с метками на существующих ClusterRoles. Если нет, сначала создайте ClusterRole только для чтения и добавьте метку.