Стадия жизненного цикла модуля: 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 управление правами доступа включено по умолчанию и не может быть отключено. Полномочия необходимо назначить в ходе первичной настройки прав доступа.
На чистой установке, когда полномочия администратора ещё не назначены, Deckhouse Commander автоматически перенаправляет первого авторизовавшегося пользователя на страницу первичной настройки (/bootstrap). Страница запрашивает токен первичной настройки — одноразовое значение с ограниченным сроком действия, которое генерируется при развёртывании и хранится в секрете bootstrap-token в неймспейсе d8-commander.
Чтобы прочитать значение токена, выполните:
$ d8 k -n d8-commander get secret bootstrap-token -o jsonpath='{.data.token}' | base64 -dЛибо откройте секрет в веб-интерфейсе DKP. Введите значение токена на странице настройки и нажмите «Получить доступ». Права администратора выдаются немедленно, после чего токен становится недействительным.
Токен действителен в течение 5 минут с момента, когда Deckhouse Commander впервые его прочитал. Если токен истёк до использования, удалите секрет bootstrap-token: Deckhouse Commander перевыпустит токен, автоматически перезапустится, и токен снова будет действителен в течение 5 минут.
Удалять секрет bootstrap-token после использования не требуется. Использованный токен нельзя применить повторно, даже если его значение станет известно, поэтому хранить секрет безопасно. Удаление секрета приводит к выпуску нового токена, которым потребуется воспользоваться в течение 5 минут. Удаляйте секрет только тогда, когда нужно восстановить утраченный доступ (см. Восстановление утраченного доступа администратора).
После этого можно переходить к настройке прав доступа через веб-интерфейс.
Восстановление утраченного доступа администратора
Если административный доступ к Deckhouse Commander утрачен (например, при смене IdP или случайном удалении роли), восстановите его с помощью токена первичной настройки:
-
Удалите секрет
bootstrap-tokenв неймспейсеd8-commander:$ d8 k -n d8-commander delete secret bootstrap-token -
Deckhouse Commander сгенерирует новый токен и перезапустится автоматически.
-
Прочитайте новое значение токена и откройте
/bootstrapв веб-интерфейсе Deckhouse Commander. -
Введите токен и нажмите «Получить доступ». Права администратора восстановлены, токен становится недействительным.
Удаление секрета не затрагивает существующих администраторов, кластеры или какие-либо другие данные. Механизм восстановления доступа независим от состояния RBAC внутри Deckhouse Commander.
Настройка прав доступа в веб-интерфейсе 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>вручную. ↩︎