Роли пользователей
Заметка
В статье описана работа с ролями с точки зрения интеграции боцмана с 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 имя интересующего кластера
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
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'
Проверить созданную привязку можно в меню кластера - Cluster and Project Members

Пример для создания 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







