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

Роли пользователей

Заметка

В статье описана работа с ролями с точки зрения интеграции боцмана с Active Directory

Предупреждение

Все действия в статье производятся в управляющем (менеджмент) кластере.

Типы ролей

На данный момент существует три типа ролей:

  • Глобальная (GlobalRole)
  • Кластерная (RoleTemplate context: cluster)
  • Проектная (RoleTemplate context: project)

Глобальная роль

Глобальная роль это служебный обьект. С её помощью нельзя выдать определённые права на все кластеры - она используется только для выдачи полных прав ко всем кластерам, которые обслуживает данная инсталяция боцмана. Эта роль назначается встроенному аккаунту admin и связанному с ним AD аккаунту.

Кластерная роль

Кластерная роль - это способ выдать пользователям доступ ко всем обьектам кластера. Существуют две предварительно созданные роли:

  • Cluster Admin
    • Выдаёт административный доступ ко всем объектам кластера.
  • Cluster Member
    • Выдаёт доступ на чтение почти ко всем объектам кластера и позволяет создавать свои проекты.

Проектная роль

Заметка

Подробнее о проектах можно прочитать в статье О проектах

Проектная роль - один из лучших способов выдавать гранулированный доступ к ресурсам кластера.
В боцмане есть набор типовых ролей:

  • Bootsman project viewer
    • Ресурсы проекта доступны в режиме read only
    • Секреты проекта недоступны
    • Настройки проекта недоступны
  • Bootsman project member
    • Все ресурсы проекта доступны в режиме CRUD
    • Настройки проекта недоступны
  • Bootsman project admin
    • Все ресурсы проекта доступны
    • Настройка проекта Доступна в части добавления новых пользователей и управления их правами
    • остальные настройки проекта недоступны

Привязки ролей

Привязка ролей используется, чтобы связать роль и объект аутентификационного провайдера (например, AD группы).
Этот функционал работает на уровне управляюшего (management) кластера и автоматически распространяет все необходимые настройки в подчинённые (workload) кластеры.
Для создания привязки постребуется clusterID, который можно узнать с помощью kubectl или в web:

kubectl get clusters.provisioning.bootsman.tech workload-cluster-name -o jsonpath="{['status.rancherClusterRef.name']}"
где workload-cluster-name имя интересующего кластера

  • С главной страницы web панели нажмите кнопку manage
  • Выберите кластер (рис. 1)
  • В контекстном меню (рис. 2) выберите пункт view yaml (рис. 3) image
  • Копируйте id кластера (рис. 4) image

ClusterRoleTemplateBinding

Используется для привязки кластерной роли к пользователю/группе, аналогично ClusterRoleBinding в ванильном Kubernetes.
Пример для создания ClusterRoleTemplateBinding

Внимание

В этом примере аннотация lifecycle.cattle.io/create.cluster-prtb-sync_c-m-jmwpj6dh - это составная строка.
c-m-jmwpj6dh - id кластера.

# создаётся в namespace кластера
apiVersion: management.cattle.io/v3
kind: ClusterRoleTemplateBinding
metadata:
  annotations:
    authz.management.cattle.io/creator-owner-binding: "true"
    lifecycle.cattle.io/create.cluster-crtb-sync_c-m-jmwpj6dh: "true" # в ключе также задаётся ID кластера
    lifecycle.cattle.io/create.mgmt-auth-crtb-controller: "true"
  labels:
    auth.management.cattle.io/crb-rb-labels-updated: "true"
    authz.cluster.cattle.io/crb-rb-labels-updated: "true"
    cattle.io/creator: norman
  name: cluster-owner-bootsman
  namespace: c-m-jmwpj6dh # namespace соответствует clusterID
clusterName: c-m-jmwpj6dh # clusterID
roleTemplateName: cluster-owner # роль из списка roletemplates.management.cattle.io, встроенная или созданная пользователем
groupPrincipalName: activedirectory_group://CN=bootsman-test-group-2,OU=Groups,OU=bootsman-v2-show,DC=bootsman,DC=team
  • Перейдите в интересующий кластер (рис. 1)
  • В меню Cluster and Project Members выберите Cluster Membership (рис. 2)
  • Нажмите кнопку Add (рис. 3) image
  • В появившемся меню введите имя пользователя или имя группы в текстовом поле (рис. 1)
  • Выберите необходимую роль (рис. 2) image

ProjectRoleTemplateBinding

Используется для привязки роли к пользователю/группе в конкретном проекте, аналог RoleBinding

Для создания потребуется получить projectID и clusterID:

Заметка

В этом примере astra1 - имя тестового подчинённого кластера. Используйте имя вашего кластера.

    export CLUSTER_NAME=${astra1} && \
    export CLUSTER_ID=`kubectl get clusters.provisioning.bootsman.tech ${CLUSTER_NAME} -o jsonpath="{['status.rancherClusterRef.name']}"` && \
    echo "Projects in cluster ${CLUSTER_NAME} with id ${CLUSTER_ID} is:" && \
    kubectl get project -o json -n ${CLUSTER_ID} | jq -r '.items[] | .spec.displayName + " " + .metadata.name'

Откройти список проектов в кластере и нажмите пункт меню View YAML у нужного проекта: image

В открывшемся окне найдите поля metadata.name (id проекта) и spec.clusterName (id кластера)

image

Проверить созданную привязку можно в меню кластера - Cluster and Project Members image

Пример для создания ProjectRoleTemplateBinding

Внимание

В этом примере аннотация lifecycle.cattle.io/create.cluster-prtb-sync_c-m-jmwpj6dh - это составная строка.
c-m-jmwpj6dh - id кластера.

apiVersion: management.cattle.io/v3
kind: ProjectRoleTemplateBinding
metadata:
  annotations:
    field.cattle.io/creatorId: user-wsnnq
    lifecycle.cattle.io/create.cluster-prtb-sync_c-m-jmwpj6dh: "true" # в имени должен быть указан clusterID
    lifecycle.cattle.io/create.mgmt-auth-prtb-controller: "true"
  generateName: custom-boosman-
  labels:
    auth.management.cattle.io/crb-rb-labels-updated: "true"
    authz.cluster.cattle.io/crb-rb-labels-updated: "true"
    cattle.io/creator: norman
  name: custom-test-2-rolebinding
  namespace: p-s6xpk # namespace соответствует projectID
projectName: c-m-jmwpj6dh:p-s6xpk # clusterID:projectID, для которого создаем привязку
roleTemplateName: project-member # роль из списка roletemplates.management.cattle.io, встроенная или созданная пользователем
groupPrincipalName: activedirectory_group://CN=bootsman-test-group-2,OU=Groups,OU=bootsman-v2-show,DC=bootsman,DC=team
  • Перейдите в интересующий кластер
  • Откройте меню Cluster and Project Members (рис. 1)
  • Найдите интересующий проект, в нашем случае используем System (рис. 2)
  • Нажмите кнопку Add (рис. 3)
  • Начните вводить имя группы или пользователя в текстовое поле (рис. 4)
  • Виберите нужную роль (рис. 5)
  • Нажмите Create image

Проверить созданную привязку можно в меню кластера - Cluster and Project Members image