Для выдачи прав в 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

Права, которые получит пользователь

Права, которые получит пользователь, будут ограничены рамками пространств имён, начинающихся с d8- или kube-.

Пользователю будут доступны следующие права:

  • Просмотр, изменение, удаление и создание ресурсов Kubernetes и модулей DKP.
  • Изменение конфигурации модулей (просмотр, изменение, удаление и создание ресурсов ModuleConfig).
  • Выполнение следующих команд к подам и сервисам:
    • kubectl attach;
    • kubectl exec;
    • kubectl port-forward;
    • kubectl proxy.

Назначение прав сетевому администратору (экспериментальная ролевая модель)

Для назначения прав сетевому администратору на управление сетевой подсистемой кластера используйте 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

Список прав, которые получит пользователь

Права, которые получит пользователь, будут ограничены следующим списком пространств имён модулей DKP из подсистемы networking (фактический список зависит от списка включённых в кластере модулей):

  • d8-cni-cilium;
  • d8-cni-flannel;
  • d8-cni-simple-bridge;
  • d8-ingress-nginx;
  • d8-istio;
  • d8-metallb;
  • d8-network-gateway;
  • d8-openvpn;
  • d8-static-routing-manager;
  • d8-system;
  • kube-system.

Пользователю будут доступны следующие права:

  • Просмотр, изменение, удаление и создание стандартных ресурсов Kubernetes в пространстве имён модулей из подсистемы networking.

    Пример ресурсов, которыми сможет управлять пользователь (список не полный):

    • Certificate;
    • CertificateRequest;
    • ConfigMap;
    • ControllerRevision;
    • CronJob;
    • DaemonSet;
    • Deployment;
    • Event;
    • HorizontalPodAutoscaler;
    • Ingress;
    • Issuer;
    • Job;
    • Lease;
    • LimitRange;
    • NetworkPolicy;
    • PersistentVolumeClaim;
    • Pod;
    • PodDisruptionBudget;
    • ReplicaSet;
    • ReplicationController;
    • ResourceQuota;
    • Role;
    • RoleBinding;
    • Secret;
    • Service;
    • ServiceAccount;
    • StatefulSet;
    • VerticalPodAutoscaler;
    • VolumeSnapshot.
  • Просмотр, изменение, удаление и создание ресурсов в пространстве имён модулей из подсистемы networking.

    Список ресурсов, которыми сможет управлять пользователь:

    • EgressGateway;
    • EgressGatewayPolicy;
    • FlowSchema;
    • IngressClass;
    • IngressIstioController;
    • IngressNginxController;
    • IPRuleSet;
    • IstioFederation;
    • IstioMulticluster;
    • RoutingTable.
  • Изменение конфигурации модулей (просмотр, изменение, удаление и создание ресурсов ModuleConfig) из подсистемы networking.

    Список модулей, которыми сможет управлять пользователь:

    • cilium-hubble;
    • cni-cilium;
    • cni-flannel;
    • cni-simple-bridge;
    • flow-schema;
    • ingress-nginx;
    • istio;
    • kube-dns;
    • kube-proxy;
    • metallb;
    • network-gateway;
    • network-policy-engine;
    • node-local-dns;
    • openvpn;
    • static-routing-manager.
  • Выполнение следующих команд к подам и сервисам в пространстве имён модулей из подсистемы networking:

    • kubectl attach;
    • kubectl exec;
    • kubectl port-forward;
    • kubectl proxy.

Назначение административных прав пользователю в рамках пространства имён (экспериментальная ролевая модель)

Чтобы назначить/ограничить права пользователя конкретными пространствами имён, используйте в 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

Список прав, которые получит пользователь

В рамках пространства имён myapp пользователю будут доступны следующие права:

  • Просмотр, изменение, удаление и создание ресурсов Kubernetes. Например, следующих ресурсов:
    • Certificate;
    • CertificateRequest;
    • ConfigMap;
    • ControllerRevision;
    • CronJob;
    • DaemonSet;
    • Deployment;
    • Event;
    • HorizontalPodAutoscaler;
    • Ingress;
    • Issuer;
    • Job;
    • Lease;
    • LimitRange;
    • NetworkPolicy;
    • PersistentVolumeClaim;
    • Pod;
    • PodDisruptionBudget;
    • ReplicaSet;
    • ReplicationController;
    • ResourceQuota;
    • Role;
    • RoleBinding;
    • Secret;
    • Service;
    • ServiceAccount;
    • StatefulSet;
    • VerticalPodAutoscaler;
    • VolumeSnapshot.
  • Просмотр, изменение, удаление и создание следующих ресурсов модулей DKP:
    • DexAuthenticator;
    • DexClient;
    • PodLoggingConfig.
  • Выполнение следующих команд к подам и сервисам:
    • kubectl attach;
    • kubectl exec;
    • kubectl port-forward;
    • kubectl proxy.