Для выдачи прав в Deckhouse Kubernetes Platform в пользовательских ресурсах указывается блок subjects.
Для пользователя он указывается в формате:
subjects:
- kind: User
name: <email пользователя>
В случае использования модуля user-authn и статических пользователей, указывайте в subjects именно email пользователя, а не имя ресурса User.
или
subjects:
- kind: Group
name: <группа, в которой состоит пользователь>
Для сервисного аккаунта блок subjects указывается в формате:
subjects:
- kind: ServiceAccount
name: <имя сервисного аккаунта>
namespace: <пространство имён, в котором создан сервисный аккаунт>
Предоставление прав с помощью AuthorizationRule и ClusterAuthorizationRule (текущая ролевая модель)
При использовании текущей ролевой модели в Deckhouse Kubernetes Platform для предоставления прав пользователям можно использовать ресурсы AuthorizationRule и ClusterAuthorizationRule.
Предоставление прав пользователю в рамках одного пространства имен
Если нужно предоставить права пользователю в рамках одного пространства имен, используйте ресурс AuthorizationRule. Он действует в рамках одного пространства имен. Пример:
apiVersion: deckhouse.io/v1
kind: AuthorizationRule
metadata:
name: dev-access
namespace: dev-namespace
spec:
subjects:
- kind: User
name: dev-user@example.com
accessLevel: Admin
portForwarding: true
Предоставление прав пользователю во всех пространствах имен
Если нужно предоставить права пользователю во всех пространствах имен, включая системные (например, для предоставления прав администратора), используйте ресурс ClusterAuthorizationRule. Он действует во всем кластере.
При необходимости можно ограничить область действия прав, предоставляемых с помощью ClusterAuthorizationRule, одним или несколькими пространствами имен. Для этого в его манифесте укажите соответствующие ограничения (но, если позволяет возможность, рекомендуемый вариант для этого — использование AuthorizationRule). Пример:
apiVersion: deckhouse.io/v1
kind: ClusterAuthorizationRule
metadata:
name: admin-access
spec:
subjects:
- kind: User
name: dev-user@example.com
# Опция доступна только при включенном режиме enableMultiTenancy
# в модуле user-authz (версия Enterprise Edition).
namespaceSelector:
labelSelector:
matchLabels:
env: review
accessLevel: SuperAdmin
portForwarding: true
Предоставление прав с помощью ClusterRoleBinding и RoleBinding (экспериментальная ролевая модель)
При использовании экспериментальной ролевой модели в Deckhouse Kubernetes Platform для предоставления прав пользователям можно использовать ресурсы ClusterRoleBinding и RoleBinding.
Назначение прав администратору кластера (экспериментальная ролевая модель)
Для назначения прав администратору кластера используйте manage-роль d8:manage:all:manager в ClusterRoleBinding.
Пример назначения прав администратору кластера (User joe):
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: cluster-admin-joe
subjects:
- kind: User
name: joe
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: d8:manage:all:manager
apiGroup: rbac.authorization.k8s.io
Назначение прав сетевому администратору (экспериментальная ролевая модель)
Для назначения прав сетевому администратору на управление сетевой подсистемой кластера используйте manage-роль d8:manage:networking:manager в ClusterRoleBinding.
Пример назначения прав сетевому администратору (User joe):
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: network-admin-joe
subjects:
- kind: User
name: joe
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: d8:manage:networking:manager
apiGroup: rbac.authorization.k8s.io
Назначение административных прав пользователю в рамках пространства имён (экспериментальная ролевая модель)
Чтобы назначить/ограничить права пользователя конкретными пространствами имён, используйте в RoleBinding use-роль с соответствующим уровнем доступа.
Например, для назначения прав на управление ресурсами приложений в рамках пространства имён, но без возможности настройки модулей DKP, используйте роль d8:use:role:admin в RoleBinding в соответствующем пространстве имён.
Пример назначения прав разработчику приложений (User app-developer) в пространстве имён myapp:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: myapp-developer
namespace: myapp
subjects:
- kind: User
name: app-developer
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: ClusterRole
name: d8:use:role:admin
apiGroup: rbac.authorization.k8s.io