Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
Описание
Для управления доступом используется модель RBAC (Role-Based Access Control) — модель, основанная на ролях пользователей. Вместо того чтобы каждый пользователь получал индивидуальный набор прав, права доступа группируются в роли, и пользователи получают доступ на основе своих ролей.
Принцип работы RBAC
- Определение ролей: Определяются роли, соответствующие различным обязанностям и функциям в системе.
- Определение прав для ролей: Определяются права, которые должны быть предоставлены каждой роли.
- Назначение ролей пользователям: Пользователям назначаются роли, соответствующие их обязанностям и функциям.
- Контроль доступа: Система использует ролевую модель для контроля доступа к ресурсам, основываясь на назначенных ролях пользователей.
Глоссарий
- Пользователи — учётные записи пользователей в базе Deckhouse Commander.
- Группы — учётные записи групп в базе Deckhouse Commander.
- Роли — задают перечень разрешённых действий над определёнными типами ресурсов.
- Назначения — связывают роли с пользователями или группами.
- Ресурсы — объекты Deckhouse Commander, к которым возможно применение прав доступа.
- Права — описывают конкретные действия, которые могут быть выполнены над ресурсами.
Поддерживаемые ресурсы Deckhouse Commander
users— пользователи.groups— группы.globalroles— глобальные роли.globalrolebindings— глобальные назначения.workspaces— рабочие пространства.workspaceroles— роли рабочих пространств.workspacerolebindings— назначения рабочих пространств.clusters— кластеры.clustertemplates— шаблоны кластеров.authtokens— токены.catalogs— инвентарь.projects— проекты.projectrolebindings— назначения участников проекта.billingdashboard— биллинг: дашборд и аналитика.billingtariffs— биллинг: управление тарифами.billingresources— биллинг: управление вычислительными классами и классами хранилища.billingreports— биллинг: управление отчётами.
Только просмотр
workspaceroles/audit— история изменений ролей рабочих пространств.workspacerolebindings/audit— история изменений назначений рабочих пространств.clusters/audit— история изменений кластеров.clustertemplates/audit— история изменений шаблонов.authtokens/audit— история изменений токенов.catalogs/audit— история изменений инвентаря.projects/audit— история изменений проектов.
Роли и назначения
Глобальные роли и назначения действуют на глобальном уровне для всех ресурсов Deckhouse Commander, а Kubernetes ресурсы создаются во всех кластерах под управлением Deckhouse Commander. Для каждой роли формируется ClusterRole с заданными правилами Kubernetes и для каждого назначения роли формируется ClusterRoleBinding.
Ресурсы транслируются с префиксом d8:commander:. Например, роль viewer будет создана во всех кластерах как ClusterRole/d8:commander:viewer. Это же правило работает для назначения прав и соответствующего ресурса ClusterRoleBinding.
Роли и назначения рабочего пространства (РП) действуют на уровне конкретного РП, а Kubernetes ресурсы создаются во всех кластерах данного РП. Для каждой роли формируется ClusterRole с заданными правилами Kubernetes и для каждого назначения роли формируется ClusterRoleBinding.
Ресурсы уровня РП транслируются с префиксом d8:commander:workspace:, например роль viewer будет создана во всех кластерах РП как ClusterRole/d8:commander:workspace:viewer. Это же правило работает для назначения прав в РП и соответствующего ресурса ClusterRoleBinding.
В кластерах создается специальная группа ресурсов «Права доступа», которая автоматически заполнена актуальными ролями и назначениями (как глобальными, так и в рамках РП). Эти манифесты — ClusterRole и ClusterRoleBinding — актуализируются в кластерах с помощью агента (модуль commander-agent). Все назначения, изменения и удаления прав в кластерах актуализируются автоматически.
Интерфейс платформы (Кластер → вкладка «Администрирование») подстраивается под права пользователя в этом кластере.
Пользовательский интерфейс
Панель настройки глобальных прав
На данную страницу можно попасть из панели рабочих пространств (/workspaces), выбрав пункт меню «Пользователи и права» в шапке.
- Вкладка «Пользователи» — просмотр списка пользователей и их групп, зарегистрированных в Deckhouse Commander.
- Вкладка «Группы» — просмотр списка групп и их членов, зарегистрированных в Deckhouse Commander.
- Вкладка «Роли» — управление ролями.
- Вкладка «Назначения» — управление назначениями.
Панель настройки прав рабочего пространства
На данную страницу можно попасть, выбрав пункт меню «Пользователи и права» в шапке внутри рабочего пространства.
Содержимое аналогично панели настройки глобальных прав, но для пользователей и групп РП.
Конфигурация
Требования для работы прав доступа в Deckhouse Commander
- Настроенная интеграция с внешним IdP через dex-provider в управляющем кластере.
- Роль и назначение1 для пользователя или группы созданное в интерфейсе Deckhouse Commander.
- Пользователь, входящий в систему через Dex.
Для доступа в прикладные кластеры Commander использует ту же учётную запись. О том, как выстроена доверительная связка и какие ресурсы создаются автоматически, см. Аутентификация в прикладных кластерах через DexProvider.
Назначение временных администраторов для настройки прав доступа
Начиная с версии 1.13 управление правами доступа включено по умолчанию и не может быть отключено. Полномочия необходимо назначить в ходе первичной настройки прав доступа.
Для первоначальной настройки, а также для случаев, когда полномочия администратора были утрачены, предусмотрена возможность назначения временных администраторов.
Создайте ConfigMap commander-admins в неймспейсе d8-commander, указав пользователей и группы, которым требуется временный административный доступ:
apiVersion: v1
kind: ConfigMap
metadata:
name: commander-admins
namespace: d8-commander
data:
users: |
john.doe@example.com
jane.doe@example.com
groups: |
Enterprise Admins
AdministratorsПользователи и участники групп указанных выше получат максимальные права в интерфейсе Deckhouse Commander. После этого можно переходить к настройке прав доступа через веб-интерфейс.
Внимание! После завершения настройки необходимых ролей и назначений, ConfigMap commander-admins, а также глобальную роль autogenerated-commander-admin и глобальное назначение autogenerated-commander-admins необходимо удалить. После удаления временный доступ будет отозван и в силу вступят только вручную выданные полномочия.
Настройка прав доступа в веб-интерфейсе Deckhouse Commander
Для настройки прав доступа необходимо выполнить следующие шаги:
- Открыть панель настройки прав.
- Перейти на вкладку «Роли» и создать роль:
- Нажать на кнопку «Добавить глобальную роль».
- Задать уникальное имя роли и комментарий.
- Нажать на кнопку «Добавить правило Commander».
- Указать права и ресурсы.
- При необходимости можно создать несколько правил.
- Нажать кнопку «Сохранить».
- Перейти на вкладку «Назначения» и создать назначение:
- Нажать на кнопку «Добавить глобальное назначение».
- Задать имя или включить переключатель «Генерировать из роли». В этом случае для генерации имени будут использованы имя роли и случайный набор букв.
- Выбрать роль.
- Выбрать пользователей или группы. Если пользователь или группа ещё не существуют в Deckhouse Commander, можно указать их вручную в формате
user:<login>/group:<name>. - Нажать кнопку «Сохранить».
Права применены.
Права доступа в проектах
Модель прав доступа в проектах Deckhouse Commander двухуровневая:
- Глобальные роли Commander определяют полномочия над проектами как ресурсами Commander: доступ к разделу «Проекты», создание, изменение и удаление проектов, управление участниками проектов.
- Роли внутри проекта определяют полномочия над ресурсами проекта в прикладном кластере. Назначения транслируются в манифест AuthorizationRule, который применяет в кластере модуль multitenancy-manager как часть ресурсов проекта.
Ресурсы Commander для управления проектами
К перечню поддерживаемых ресурсов относятся:
projects— проекты.projectrolebindings— назначения участников проекта. Доступ к управлениюprojectrolebindingsконкретного проекта проверяется по участию пользователя в ролиAdminэтого проекта, а не только по глобальной роли.
Раздел «Проекты» отображается в веб-интерфейсе только пользователям, у которых есть хотя бы verb get на ресурсе projects, и при условии, что в Deckhouse Commander включена функциональность проектов.
Предустановленные глобальные роли
Deckhouse Commander поставляет две предустановленные глобальные роли для работы с проектами:
autogenerated-projects-user— роль с правиломverbs: ["get"], resources: ["projects"]. Автоматически назначается пользователю, которого добавили хотя бы в один проект, через единое назначение уровня рабочего пространстваautogenerated-projects-users. Даёт доступ к разделу «Проекты» и к страницам проектов, но не позволяет создавать, изменять и удалять проекты, а также управлять участниками проектов, в которых пользователь не состоит в ролиAdmin. Роль и её назначение форсируются Deckhouse Commander: при ручном удалении они будут пересозданы при следующем добавлении участника в любой проект.projects-admin— роль с правиломverbs: ["*"], resources: ["projects"]. Предназначена для пользователей, которым требуется создавать, изменять и удалять проекты. Назначается вручную администратором системы в разделе «Пользователи и права».
Для более тонкой настройки администратор системы может создавать собственные глобальные роли с произвольными комбинациями verbs на ресурсах projects и projectrolebindings.
Видимость проектов в списке
Состав проектов, доступных пользователю в списке, определяется его правами на ресурс projects:
Права на projects |
Видимые проекты |
|---|---|
только get (в том числе через роль autogenerated-projects-user) |
только проекты, в которых пользователь является участником (назначен напрямую или через группу); проекты типа deckhouse скрыты |
update и/или delete (в том числе *) |
все проекты рабочего пространства, включая проекты типа deckhouse |
Роли внутри проекта
В каждом проекте доступны четыре предустановленные роли. Их имена в Commander соответствуют значениям spec.accessLevel в манифесте AuthorizationRule, формируемом для каждой роли проекта:
| Роль | Что можно делать |
|---|---|
Admin |
Всё, что у Editor, плюс удаление служебных объектов. Полный контроль над проектом в Commander, включая управление участниками на вкладке «Доступы». |
Editor |
Всё, что у PrivilegedUser, плюс создание, изменение и удаление прикладных ресурсов проекта. |
PrivilegedUser |
Всё, что у User, плюс d8 k exec, чтение Secret’ов, d8 k port-forward и удаление Pod’ов (в том числе чтобы перезапускать их). |
User |
Смотреть ресурсы проекта и читать логи Pod’ов (d8 k logs). |
Перечень Kubernetes-ресурсов и действий, соответствующих каждому accessLevel, определяет модуль user-authz.
Для каждой роли проекта Commander создаёт в прикладном кластере отдельный AuthorizationRule (admins, editors, privileged-users, users). Участники перечисляются в spec.subjects[]. Манифесты доставляются агентом Deckhouse Commander.
Разделение ответственности
- Администратор системы управляет параметрами проекта на вкладке «Конфигурация» страницы проекта, включая поле «Администраторы».
- Администратор проекта (пользователь в роли
Admin) управляет назначениямиUser,PrivilegedUserиEditorна вкладке «Доступы» страницы проекта. Назначения ролиAdminна этой вкладке отображаются в режиме только для чтения и изменяются через вкладку «Конфигурация». - Пользователи в ролях
Editor,PrivilegedUser,Userвкладку «Доступы» не видят.
Если один пользователь совмещает обе функции (например, администратор системы одновременно назначен Admin проекта), в интерфейсе ему доступны обе вкладки.
Сопровождение форс-назначения autogenerated-projects-users
При добавлении участника в любой проект Commander добавляет его как subject в единое назначение autogenerated-projects-users уровня рабочего пространства. На одно рабочее пространство создаётся одно такое назначение, в котором аккумулированы участники всех проектов рабочего пространства.
При удалении участника из проекта subject из autogenerated-projects-users не удаляется автоматически, чтобы не отзывать доступ у пользователя, который остаётся участником других проектов. При необходимости subject может удалить вручную администратор системы в разделе «Пользователи и права». Если назначение autogenerated-projects-users удалено целиком, оно будет пересоздано при следующем добавлении участника в любой проект рабочего пространства.
Валидация
- В проекте должен быть назначен хотя бы один администратор (роль
Admin): удалить последнее назначениеAdminнельзя. - При множественном членстве пользователя (через несколько групп или напрямую и через группу) итоговые права в кластере определяются модулем user-authz по приоритету
Admin > Editor > PrivilegedUser > User.
Ограничения
- Проекты типа
deckhouse— это проекты DKP, созданные непосредственно в прикладном кластере и не находящиеся под управлением Deckhouse Commander. В списке проектов они помечаются значком. В веб-интерфейсе Deckhouse Commander для таких проектов не предусмотрены форма редактирования и вкладка «Доступы» — управление такими проектами выполняется непосредственно в Deckhouse с помощью модуля multitenancy-manager, в том числе через манифест AuthorizationRule. - В этой версии управление участниками проектов и предустановленными ролями (
autogenerated-projects-user,projects-admin) возможно только через веб-интерфейс Deckhouse Commander.
Аудит
Все изменения ролей и назначений логируются. Информация доступна во вкладке «История изменений» на уровне РП.
-
Поддерживается назначение как существующим пользователям и группам, так и указание
user:<login>/group:<name>вручную. ↩︎