Кастомные ресурсы для управления правами доступа
Ресурсы Kubernetes, в которых хранятся назначения прав.
На этой странице
API-группа
Все кастомные ресурсы управления доступом относятся к API-группе permissions.shturval.tech.
Объекты этой группы хранятся в кластере управления в неймспейсе shturval-backend и в неймспейсах клиентских кластеров (при синхронизации). Для избежания коллизий с возможным дублированием имен, для кастомных ресурсов UserRole и GroupRole добавляется автогененируемый постфикс.
Общий обзор кастомных ресурсов платформы «Штурвал» и их API-групп см. на странице «Кастомные ресурсы в платформе».
Основные ресурсы
Scope
Хранит указание, к каким кластерам/неймспейсам какие наборы доступов могут быть применены, а также какие пути покрывает этот скоуп в рамках API. Scope может быть разных уровней. В зависимости от уровня Scope(scope_level) права будут применены к разному уровню объектов:
- Платформенный - ко всем кластерам в платформе;
- Кластерный - к кластеру или совокупности кластеров, объединенных в тенант;
- Неймспейсный - к неймспейсу или совокупности неймспейсов, объединенных в тенант;
Scope_level указывается в объекте Permission (набор доступов). В графическом интерфейсе наборы доступов разделены по уровням скоупа, например, при выборе прав доступа в неймспейсе будут доступны только permissions с неймспейсным уровнем скоупа.
Scope - это системный объект, который создается автоматически. Администратору не требуется его создавать или изменять.
Пример манифеста Scope:
apiVersion: permissions.shturval.tech/v1beta1
kind: Scope
metadata:
annotations:
clusters: prod
name: cluster-prod
namespace: prod
ownerReferences:
- apiVersion: permissions.shturval.tech/v1beta1
blockOwnerDeletion: true
controller: true
kind: Tenant
name: cluster-prod
spec:
objects:
clusters:
- prod
namespaces:
- "*"
tenants:
- sometenants
status:
objectsStatus:
- metadata:
kind: Cluster
name: prod
namespace: prod
state: exists
paths:
- /clusters
- /clusters/prod
- /clusters/prod/*
- /clusters/prod/ingressclasses/names
- /clusters/prod/namespaces/*
- /clusters/prod/namespaces/*/*
- /clusters/prod/namespaces/permissions/groups
- /clusters/prod/namespaces/permissions/roles
- /clusters/prod/persistentvolumes/names
- /clusters/prod/storageclasses/names
- /clusters/permissions/groups
- /clusters/permissions/roles
- /clusters?page*
- /platform/auth/ldap/search
- /platform/clusters/kubeconfigs
- /platform/clustersinfo
- /platform/clustersinfo/statistics
- /platform/license
- /platform/loginplugin/config
- /platform/permissions/access-map/groups
- /platform/permissions/access-map/groups/*
- /platform/permissions/access-map/roles
- /platform/permissions/access-map/roles/*
- /platform/permissions/custom
- /platform/permissions/custom/*
- /platform/permissions/custom/roles
- /platform/permissions/groups
- /platform/permissions/groups/*
- /platform/permissions/roles
- /platform/permissions/roles/*
- /platform/permissions/scope
- /platform/scopepermissions
- /platform/version
- prod/cluster-prod
permissions:
- cluster-admin
- cluster-admin-restricted
- custom-permission-set
- sec-cluster-audit
- sec-cluster-audit-full
- sec-security-report
Permissions
Наборы доступов (Permissions) — это отдельные ресурсы, которые описывают:
- Платформенные разрешения (granted_platform_permissions) — закрытый набор ClusterRoles для предоставления доступа к объектам платформы (cluster, provider, ippool и др.), расположенным в кластере управления. Создает назначения в кластере управления;
- Кластерные разрешения (granted_cluster_rules) — RBAC в формате Kubernetes (apiGroups, resources, verbs) для применения в клиентских кластерах;
- Права Kubeflow — роли Kubeflow (kubeflow-admin, kubeflow-edit, kubeflow-view), которые применяются к профилям в зависимости от уровня назначения;
- Роль в ArgoCD — admin, edit или view.
Пример манифеста Permission:
apiVersion: permissions.shturval.tech/v1beta1
kind: Permission
metadata:
annotations:
helm.sh/resource-policy: keep
isDefault: "true"
meta.helm.sh/release-name: shturval-backend
meta.helm.sh/release-namespace: shturval-backend
permissions.shturval.tech/description: 'Доступ на просмотр разделов "Нагрузки",
"Сеть", страниц: PersistentVolumeClaims, Configmaps, Quotas'
labels:
app.kubernetes.io/managed-by: Helm
name: dev-basic
namespace: shturval-backend
spec:
argo_cd_roles:
- view
granted_cluster_rules:
- apiGroups:
- ""
resources:
- namespaces
- namespaces/status
- configmaps
- endpoints
- persistentvolumeclaims
- pods
- podtemplates
- replicationcontrollers
- resourcequotas
- services
- poddisruptionbudgets
verbs:
- get
- list
- watch
- apiGroups:
- batch
resources:
- jobs
- cronjobs
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses
- ingressclasses
verbs:
- get
- list
- watch
- apiGroups:
- gateway.networking.k8s.io
resources:
- gateways
- gateways/status
- httproutes
- httproutes/status
- grpcroutes
- grpcroutes/status
- tcproutes
- tcproutes/status
- tlsroutes
- tlsroutes/status
- udproutes
- udproutes/status
verbs:
- get
- list
- watch
- apiGroups:
- events.k8s.io
resources:
- events
verbs:
- get
- list
- watch
- apiGroups:
- apps
resources:
- deployments
- replicasets
- statefulsets
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- events
verbs:
- get
- list
- watch
- apiGroups:
- autoscaling
resources:
- horizontalpodautoscalers
- horizontalpodautoscalers/status
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- persistentvolumesclaims
verbs:
- get
- list
- watch
- apiGroups:
- aquasecurity.github.io
resources:
- configauditreports
verbs:
- get
- list
- watch
- apiGroups:
- aquasecurity.github.io
resources:
- exposedsecretreports
verbs:
- get
- list
- watch
- apiGroups:
- aquasecurity.github.io
resources:
- vulnerabilityreports
verbs:
- get
- list
- watch
- apiGroups:
- kyverno.io
resources:
- cleanuppolicies
- clustercleanuppolicies
- policies
- clusterpolicies
verbs:
- get
- list
- watch
- apiGroups:
- wgpolicyk8s.io
resources:
- policyreports
- clusterpolicyreports
verbs:
- get
- list
- watch
- apiGroups:
- kyverno.io
resources:
- admissionreports
- clusteradmissionreports
- backgroundscanreports
- clusterbackgroundscanreports
verbs:
- get
- list
- watch
- apiGroups:
- kyverno.io
resources:
- updaterequests
verbs:
- get
- list
- watch
granted_platform_permissions:
- cluster-get
- tenant-get
scope_level: namespaces
Подробнее: Настройка разрешений.
Существование набора доступов (объекта Permission) не выделяет никому прав доступа. Для связки набора доступов с пользователем создается объект UserRole, с группой - GroupRole.
UserRole и GroupRole указывают на один или несколько наборов доступов. При синхронизации контроллер объединяет разрешения из всех назначенных наборов, формирует ClusterRole и RoleBinding в целевых кластерах, а также применяет роли Kubeflow и ArgoCD, если они заданы в наборе.
UserRole
Назначение: хранит назначение прав пользователю.
| Поле | Описание |
|---|---|
| Субъект | Уникальное имя пользователя (например, из LDAP или OIDC) |
| Наборы доступов | Ссылки на наборы (Permissions) |
| Уровень | Платформа, Тенант, Кластер или Неймспейс |
| Целевой объект | Тенант, кластер или неймспейс (в зависимости от уровня) |
Расположение: неймспейс shturval-backend кластера управления.
Статус показывает, с каким результатом были применены права в каждом запрошенном уровне. Если применение было в платформе, то в статусе будет отражаться применение в каждый объект, входящий в платформу, в т.ч. в кластеры, которые будут созданы после назначения. Аналогично с тенантом.
Пример манифеста UserRole:
apiVersion: permissions.shturval.tech/v1beta1
kind: UserRole
metadata:
labels:
updatedByUser: username
name: p-petrov-user-88s5l
namespace: prod
ownerReferences:
- apiVersion: permissions.shturval.tech/v1beta1
blockOwnerDeletion: true
controller: true
kind: Scope
name: namespacename
spec:
permissions:
- namespace-admin
scope: namespacename
username: p.petrov
status:
permissions:
namespace-admin:
clusters:
prod:
namespaces:
namespacename:
plugins:
kubeflow:
previousstatus: not required
status: not required
rbac:
previousstatus: applied
status: applied
plugins:
argocd:
previousstatus: not required
status: not required
platform:
plugins:
rbac:
previousstatus: applied
status: applied
tenant:
previousstatus: applied
status: applied
GroupRole
Назначение: хранит назначение прав группе.
| Поле | Описание |
|---|---|
| Субъект | Имя группы (из LDAP или вручную) |
| Наборы доступов | Ссылки на наборы (Permissions) |
| Уровень | Платформа, Тенант, Кластер или Неймспейс |
| Целевой объект | Тенант, кластер или неймспейс |
Расположение: неймспейс shturval-backend кластера управления.
Все пользователи, входящие в группу, получают права, заданные в GroupRole.
Пример манифеста GroupRole:
apiVersion: permissions.shturval.tech/v1beta1
kind: GroupRole
metadata:
generateName: admins-group-
labels:
updatedByUser: username
name: admins-group-jpbgn
namespace: shturval-backend
ownerReferences:
- apiVersion: permissions.shturval.tech/v1beta1
blockOwnerDeletion: true
controller: true
kind: Scope
name: platform
spec:
claim: admins
permissions:
- platform-admin
scope: platform
status:
permissions:
platform-admin:
clusters:
managementcluster:
plugins:
argocd:
previousstatus: applied
status: applied
kubeflow:
previousstatus: not required
status: not required
rbac:
previousstatus: applied
status: applied
ml-cluster:
plugins:
argocd:
previousstatus: applied
status: applied
kubeflow:
previousstatus: not required
status: not required
rbac:
previousstatus: applied
status: applied
cluster-stage:
plugins:
argocd:
previousstatus: not required
status: not required
kubeflow:
previousstatus: not required
status: not required
rbac:
previousstatus: applied
status: applied
platform:
plugins:
rbac:
previousstatus: applied
status: applied
tenant:
previousstatus: applied
status: applied
Статус показывает, с каким результатом были применены права в каждом запрошенном уровне. Если применение было в платформе, то в статусе будет отражаться применение в каждый объект, входящий в платформу, в т.ч. в кластеры, которые будут созданы после назначения. Аналогично с тенантом.
Резервное копирование
UserRole и GroupRole входят в объекты, которые рекомендуется включать в резервные копии при настройке Disaster Recovery.
Пример Velero Backup для UserRole и GroupRole:
apiVersion: velero.io/v1
kind: Backup
metadata:
name: backup-platform-roles
namespace: velero
labels:
velero.io/storage-location: s3
spec:
includedNamespaces:
- shturval-backend
includedResources:
- GroupRole
- UserRole
storageLocation: s3
ttl: 24h
Подробнее: DR-конфигурация.
Важные замечания
-
Не редактируйте UserRole и GroupRole вручную без понимания структуры. Назначение прав рекомендуется выполнять через GUI платформы.
-
Платформенные разрешения необходимы для доступа к объектам API-групп
cluster.x-k8s.io,bootstrap.cluster.x-k8s.io,infrastructure.cluster.x-k8s.ioиpermissions.shturval.tech, так как они хранятся в кластере управления. -
Просмотр объектов возможен при наличии разрешения
access-map-getилиpermissions-getв наборе доступов.