Доступно с ограничениями в редакциях: Open/CE
Доступно без ограничений в редакциях: Core, BE, SE, SE+, Ultimate/EE, Certified Core/CSE Lite (1.73), Certified Pro/CSE Pro (1.73)
Стадия жизненного цикла модуля: General Availability
Модуль отвечает за генерацию объектов ролевой модели доступа, основанной на базе стандартного механизма RBAC Kubernetes. Модуль создает набор кластерных ролей (ClusterRole), подходящий для большинства задач по управлению доступом пользователей и групп.
С версии Deckhouse Platform v1.64 в модуле реализована экспериментальная модель ролевого доступа.
Функциональность экспериментальной и текущей моделей ролевого доступа несовместимы. Автоматическая конвертация ресурсов невозможна.
Экспериментальная ролевая модель
В отличие от текущей ролевой модели DP, экспериментальная ролевая модель не использует ресурсы ClusterAuthorizationRule и AuthorizationRule. Настройка прав доступа выполняется стандартным для RBAC Kubernetes способом: с помощью создания ресурсов RoleBinding или ClusterRoleBinding, с указанием в них одной из подготовленных модулем user-authz ролей.
Модуль создаёт специальные агрегированные кластерные роли (ClusterRole). Используя эти роли в RoleBinding или ClusterRoleBinding можно решать следующие задачи:
-
Управлять доступом к модулям определённой подсистеме применения.
Например, чтобы дать возможность пользователю, выполняющему функции сетевого администратора, настраивать сетевые модули (например,
cni-cilium,ingress-nginx,istioи т. д.), можно использовать в ClusterRoleBinding рольd8:manage:networking:manager. -
Управлять доступом к пользовательским ресурсам модулей в рамках пространства имён.
Например, использование роли
d8:use:role:managerв RoleBinding, позволит удалять/создавать/редактировать ресурс PodLoggingConfig в пространстве имён, но не даст доступа к cluster-wide-ресурсам ClusterLoggingConfig и ClusterLogDestination модуляlog-shipper, а также не даст возможность настраивать сам модульlog-shipper.
Роли, создаваемые модулем, делятся на два класса:
- Use-роли — для назначения прав пользователям (например, разработчикам приложений) в конкретном пространстве имён.
- Manage-роли — для назначения прав администраторам.
Совместное использование ClusterAuthorizationRule, AuthorizationRule и RBAC
Если в кластере включён режим мультитенантности (параметр enableMultiTenancy: true), итоговые права пользователя представляют собой объединение прав, полученных из всех следующих источников:
- права из ClusterAuthorizationRule — применяются только внутри неймспейсов, разрешённых параметрами
limitNamespacesилиnamespaceSelector; - права из AuthorizationRule — применяются внутри неймспейса, в котором создан ресурс AuthorizationRule;
- права из обычных RoleBinding — применяются внутри неймспейса, в котором создан ресурс RoleBinding;
- права из обычных ClusterRoleBinding, не созданных модулем
user-authz— применяются во всём кластере.
Ограничения по неймспейсам, заданные в ClusterAuthorizationRule, распространяются только на права, выданные этим ClusterAuthorizationRule. Они не отменяют права, выданные через RoleBinding, ClusterRoleBinding или AuthorizationRule в других неймспейсах. При этом права, предоставляемые ClusterAuthorizationRule, на эти неймспейсы не распространяются.
Например, если у пользователя есть ClusterAuthorizationRule с уровнем доступа accessLevel: Editor, ограниченный неймспейсом ns-a, а также RoleBinding с ролью view в неймспейсе ns-b, то он получит права уровня Editor в неймспейсе ns-a и права только на чтение в неймспейсе ns-b. Права, предоставленные через RoleBinding, не ограничиваются ClusterAuthorizationRule, а уровень доступа Editor, заданный ClusterAuthorizationRule, не распространяется на неймспейс ns-b.
Начиная с DP 1.76.5, RoleBinding и ClusterAuthorizationRule можно использовать совместно для одного пользователя. В более ранних версиях DP вебхук модуля user-authz отклонял все запросы в неймспейсы, не указанные в ClusterAuthorizationRule пользователя, даже при наличии соответствующих ресурсов RoleBinding.
Use-роли
Use-роль можно использовать только в ресурсе RoleBinding.
Use-роли предназначены для назначения прав пользователю в конкретном пространстве имён. Под пользователями понимаются, например, разработчики, которые используют настроенный администратором кластер для развёртывания своих приложений. Таким пользователям не нужно управлять модулями DP или кластером, но им нужно иметь возможность, например, создавать свои Ingress-ресурсы, настраивать аутентификацию приложений и сбор логов с приложений.
Use-роль определяет права на доступ к namespaced-ресурсам модулей и стандартным namespaced-ресурсам Kubernetes (Pod, Deployment, Secret, ConfigMap и т. п.).
Модуль создаёт следующие use-роли:
d8:use:role:viewer— позволяет в конкретном пространстве имён просматривать стандартные ресурсы Kubernetes, кроме секретов и ресурсов RBAC, а также выполнять аутентификацию в кластере;d8:use:role:user— дополнительно к ролиd8:use:role:viewerпозволяет в конкретном пространстве имён просматривать секреты и ресурсы RBAC, подключаться к подам, удалять поды (но не создавать или изменять их), выполнятьkubectl port-forwardиkubectl proxy, изменять количество реплик контроллеров;d8:use:role:manager— дополнительно к ролиd8:use:role:userпозволяет в конкретном пространстве имён управлять ресурсами модулей (например, Certificate, PodLoggingConfig и т. п.) и стандартными namespaced-ресурсами Kubernetes (Pod, ConfigMap, CronJob и т. п.);d8:use:role:admin— дополнительно к ролиd8:use:role:managerпозволяет в конкретном пространстве имён управлять ресурсами ResourceQuota, ServiceAccount, Role, RoleBinding, NetworkPolicy.
Manage-роли
Manage-роль не дает доступа к пространству имён пользовательских приложений.
Manage-роль определяет доступ только к системным пространствам имён (начинающимся с d8- или kube-), и только к тем из них, в которых работают модули соответствующей подсистемы роли.
Manage-роли предназначены для назначения прав на управление всей платформой или её частью (подсистемой), но не самими приложениями пользователей. С помощью manage-роли можно, например, дать возможность администратору безопасности управлять модулями, отвечающими за безопасность кластера. В таком случае администратор безопасности сможет настраивать аутентификацию, авторизацию, политики безопасности и другие соответствующие параметры.
Manage-роль сама по себе не даёт права раздавать доступ другим людям.
Создать User или Group, которых ещё нет среди субъектов грантов, можно как обычный объект.
Создать User на email, на котором грант уже есть, или записать ClusterAuthorizationRule — это раздача ролей. Запрос пройдёт, только если у запрашивающего уже есть покрывающие права или ему явно разрешено назначать эти роли.
У ClusterAuthorizationRule поле spec.accessLevel задаёт уровень текущей ролевой модели: User, PrivilegedUser, Editor, Admin, ClusterEditor, ClusterAdmin, SuperAdmin. Менеджер подсистемы security может назначить любой из них, кроме SuperAdmin. Кластерную роль Kubernetes cluster-admin он тоже назначить не может. Роли экспериментальной модели подсистемы security — не выше d8:subsystem:security:admin.
Запрашивающий, у которого есть все права во всём кластере, в этих проверках приравнивается к SuperAdmin и может назначить любую роль, которая есть в кластере, в том числе SuperAdmin и cluster-admin. Например, такие права есть у субъекта кластерной роли Kubernetes cluster-admin, если роль выдана через ClusterRoleBinding или через ClusterAuthorizationRule без namespaceSelector и limitNamespaces. Если включён режим мультитенантности, такое правило должно ещё задавать allowAccessToSystemNamespaces: true, иначе оно не даёт доступа к системным неймспейсам. Права из ClusterAuthorizationRule с namespaceSelector или limitNamespaces в эту проверку не входят, даже если правило выдаёт cluster-admin. Любой непустой limitNamespaces намеренно считается ограничением, даже если его записи подходят под все неймспейсы, например .* вместе с allowAccessToSystemNamespaces: true. По accessLevel такое правило учитывается как обычно: например, accessLevel: SuperAdmin даёт диапазон SuperAdmin независимо от ограничений неймспейсов в правиле.
limitNamespaces и namespaceSelector ограничивают только доступ к ресурсам в неймспейсах. Субъект с уровнем доступа ClusterAdmin или SuperAdmin по-прежнему может создавать объекты ClusterRoleBinding и ClusterAuthorizationRule, поэтому эти поля не ограничивают то, что он может выдать на весь кластер. Выдавайте эти уровни только тем, кому можно иметь доступ ко всему кластеру.
В тексте отказа вебхука уровни accessLevel называются basic, чтобы не путать их с уровнями manage-ролей (viewer / manager).
Права модуля user-authn создать User или Group для этого недостаточны: они не раздают роли, которые уже висят на этом email.
Manage-роль определяет права на доступ:
- к cluster-wide-ресурсам Kubernetes;
- к управлению модулями DP (ресурсы ModuleConfig) в рамках подсистемы роли, или всеми модулями DP для роли
d8:manage:all:*; - к управлению cluster-wide-ресурсами модулей DP в рамках подсистемы роли или всеми ресурсами модулей DP для роли
d8:manage:all:*; - к системным пространствам имён (начинающимся с
d8-илиkube-), в которых работают модули подсистемы роли, или ко всем системным пространствам имён для ролиd8:manage:all:*.
Формат названия manage-роли — d8:manage:<SUBSYSTEM>:<ACCESS_LEVEL>, где:
SUBSYSTEM— подсистема роли. Может быть либо одной из подсистем списка, либоallдля доступа в рамках всех подсистем;-
ACCESS_LEVEL— уровень доступа.Примеры manage-ролей:
d8:manage:all:viewer— доступ на просмотр конфигурации всех модулей DP (ресурсы ModuleConfig), их cluster-wide-ресурсов, их namespaced-ресурсов и стандартных объектов Kubernetes (кроме секретов и ресурсов RBAC) во всех системных пространствах имён (начинающихся сd8-илиkube-);d8:manage:all:manager— аналогично ролиd8:manage:all:viewer, только доступ на уровнеadmin, т. е. просмотр/создание/изменение/удаление конфигурации всех модулей DP (ресурсы ModuleConfig), их cluster-wide-ресурсов, их namespaced-ресурсов и стандартных объектов Kubernetes во всех системных пространствах имён (начинающихся сd8-илиkube-);d8:manage:observability:viewer— доступ на просмотр конфигурации модулей DP (ресурсы ModuleConfig) из подсистемыobservability, их cluster-wide-ресурсов, их namespaced-ресурсов и стандартных объектов Kubernetes (кроме секретов и ресурсов RBAC) в системных пространствах имёнd8-log-shipper,d8-monitoring,d8-okmeter,d8-operator-prometheus,d8-upmeter,kube-prometheus-pushgateway.
Модуль предоставляет два уровня доступа для администратора:
viewer— позволяет просматривать стандартные ресурсы Kubernetes, конфигурацию модулей (ресурсы ModuleConfig), cluster-wide-ресурсы модулей и namespaced-ресурсы модулей в пространстве имен модуля;manager— дополнительно к ролиviewerпозволяет управлять стандартными ресурсами Kubernetes, конфигурацией модулей (ресурсы ModuleConfig), cluster-wide-ресурсами модулей и namespaced-ресурсами модулей в пространстве имен модуля;
Подсистемы ролевой модели
Каждый модуль DP принадлежит определённой подсистеме. Для каждой подсистемы существует набор ролей с разными уровнями доступа. Роли обновляются автоматически при включении или отключении модуля.
Например, для подсистемы networking существуют следующие manage-роли, которые можно использовать в ClusterRoleBinding:
d8:manage:networking:viewerd8:manage:networking:manager
Область действия роли зависит от того, к какой подсистеме она принадлежит:
- Область действия ролей из подсистемы
all— все системные (начинающиеся сd8-илиkube-) неймспейсы кластера. - Область действия ролей из других подсистем — неймспейсы, в которых работают модули подсистемы (подробнее — в таблице состава подсистем), а также все cluster-wide объекты модулей подсистемы.
Таблица состава подсистем ролевой модели.
| Подсистема | Модули подсистемы | Неймспейсы, используемые модулями подсистемы |
|---|---|---|
| all | Все модули | Все неймспейсы |
| deckhouse |
|
|
| infrastructure |
|
|
| kubernetes |
|
|
| networking |
|
|
| observability |
|
|
| security |
|
|
Миграция на новые имена ролей в DP 1.78
До DP 1.78 роли продолжают работать под существующими именами.
В DP 1.78 роли экспериментальной модели будут переименованы, а текущие имена (d8:manage:<подсистема>:<уровень>, d8:manage:all:<уровень> и d8:use:role:<уровень>) станут устаревшими. Для обратной совместимости они будут сохранены как роли-псевдонимы ровно на один релиз: существующие привязки продолжат работать и давать те же права, что и новые роли, после чего псевдонимы будут удалены.
Соответствие имён:
| Текущее имя (станет устаревшим) | Новое имя |
|---|---|
d8:manage:all:<уровень> |
d8:system:<уровень> |
d8:manage:<подсистема>:<уровень> |
d8:subsystem:<подсистема>:<уровень> |
d8:use:role:<уровень> |
d8:namespace:<уровень> |
В новой модели также появится уровень доступа superadmin (например, d8:namespace:superadmin, d8:system:superadmin) — для управления системными ресурсами.
Роль d8:use:role:admin будет соответствовать роли d8:namespace:admin и, как следствие, перестанет давать права на выпуск токенов для сервисных аккаунтов и выполнение impersonation — для этого понадобится уровень superadmin.
Capabilities (роли-кирпичики d8:manage:permission:* и d8:use:capability:*) будут переименованы без псевдонимов совместимости, поскольку они предназначены для агрегации в роли, а не для прямой привязки. Если у вас есть объекты RoleBinding или ClusterRoleBinding на такую capability, после обновления они перестанут давать права. Пересоздайте привязку на подходящую роль (или на собственную роль, агрегирующую новую capability).
Алерт D8UserAuthzLegacyRBACv2CapabilityBindingFound перечисляет привязки к capabilities модулей Deckhouse Platform и называет новое имя каждой capability. Как меняются имена, описано в разделе «FAQ». Модуль, установленный из источника модулей, переименовывает свои capabilities в собственном релизе.
Как подготовиться к миграции:
-
Найдите привязки, использующие текущие имена ролей:
d8 k get clusterrolebindings,rolebindings -A -o json \ | jq -r '.items[] | select(.roleRef.name | test("^d8:(manage|use):")) | "\(.kind) \(.metadata.namespace // "-") \(.metadata.name) -> \(.roleRef.name)"' -
После обновления на DP 1.78 переведите эти объекты RoleBinding и ClusterRoleBinding на новые имена ролей в течение одного релизного цикла. Поскольку поле
roleRefнеизменяемо, привязку нужно удалить и создать заново с новым именем роли.
Порядок миграции кастомных ролей описан в разделе «FAQ».
Текущая ролевая модель
Особенности:
- Модуль реализует role-based-подсистему сквозной авторизации, расширяя функционал стандартного механизма RBAC.
- Настройка прав доступа происходит с помощью ресурсов.
- Управление доступом к инструментам масштабирования (параметр
allowScaleресурса ClusterAuthorizationRule или AuthorizationRule). - Управление доступом к форвардингу портов (параметр
portForwardingресурса ClusterAuthorizationRule или AuthorizationRule). - Управление списком разрешённых пространств имён в формате labelSelector (параметр
namespaceSelectorресурса ClusterAuthorizationRule).
В модуле, кроме использования RBAC, можно использовать удобный набор высокоуровневых ролей:
User— позволяет получать информацию обо всех объектах (включая доступ к журналам подов), но не позволяет заходить в контейнеры, читать секреты и выполнять port-forward;PrivilegedUser— то же самое, что иUser, но позволяет заходить в контейнеры, читать секреты, а также удалять поды (что обеспечивает возможность перезагрузки);Editor— то же самое, что иPrivilegedUser, но предоставляет возможность создавать, изменять и удалять все объекты, которые обычно нужны для прикладных задач;Admin— то же самое, что иEditor, но позволяет удалять служебные объекты (производные ресурсы, например ReplicaSet,certmanager.k8s.io/challengesиcertmanager.k8s.io/orders);ClusterEditor— то же самое, что иEditor, но позволяет управлять ограниченным набором cluster-wide-объектов, которые могут понадобиться для прикладных задач (ClusterXXXMetric, KeepalivedInstance, DaemonSet и т. д). Роль для работы оператора кластера;ClusterAdmin— то же самое, что иClusterEditor+Admin, но позволяет управлять служебными cluster-wide-объектами (производные ресурсы, например MachineSets, Machines, OpenstackInstanceClasses и т. п., а также ClusterAuthorizationRule, ClusterRoleBindings и ClusterRole). Роль для работы администратора кластера. Важно, чтоClusterAdmin, поскольку он уполномочен редактировать ClusterRoleBindings, может сам себе расширить полномочия;SuperAdmin— разрешены любые действия с любыми объектами, при этом ограниченияnamespaceSelectorиlimitNamespacesпродолжат работать.
Режим multi-tenancy (авторизация по пространству имён) в данный момент реализован по временной схеме и не гарантирует безопасность!
В случае, если в ClusterAuthorizationRule-ресурсе используется namespaceSelector, параметры limitNamespaces и allowAccessToSystemNamespace не учитываются.
Если вебхук, который реализовывает систему авторизации, по какой-то причине будет недоступен, опции allowAccessToSystemNamespaces, namespaceSelector и limitNamespaces в custom resource перестанут применяться и пользователи будут иметь доступ во все пространства имён. После восстановления доступности вебхука опции продолжат работать.
Список доступа для каждой роли модуля по умолчанию
Каждая следующая роль наследует права предыдущих ролей. В блоке роли показаны только права, которые она добавляет.
Список ниже включает:
- стандартные права текущей ролевой модели (права k8s);
- права, создаваемые встроенными модулями Deckhouse.
В нем отсутствуют права модулей из источника.
Модули из источника при включении в кластере создают права на предоставляемые ими ресурсы. При выключении модуля из источника созданные им права удаляются.
Для просмотра прав, созданных модулями из источника, используйте команду.
Сокращения для verbs:
- read -
get,list,watch - read-write -
get,list,watch,create,delete,deletecollection,patch,update - write -
create,delete,deletecollection,patch,update
Роль User:
read:
- acme.cert-manager.io/challenges
- acme.cert-manager.io/orders
- apiextensions.k8s.io/customresourcedefinitions
- apps/daemonsets
- apps/deployments
- apps/replicasets
- apps/statefulsets
- autoscaling.k8s.io/verticalpodautoscalercheckpoints
- autoscaling.k8s.io/verticalpodautoscalers
- autoscaling/horizontalpodautoscalers
- batch/cronjobs
- batch/jobs
- cert-manager.io/certificaterequests
- cert-manager.io/certificates
- cert-manager.io/clusterissuers
- cert-manager.io/issuers
- cilium.io/ciliumclusterwidenetworkpolicies
- cilium.io/ciliumnetworkpolicies
- config.gatekeeper.sh/configs
- configmaps
- connection.gatekeeper.sh/connections
- constraints.gatekeeper.sh/*
- deckhouse.io/applications
- deckhouse.io/awsinstanceclasses
- deckhouse.io/azureinstanceclasses
- deckhouse.io/deschedulers
- deckhouse.io/dexauthenticators
- deckhouse.io/dexclients
- deckhouse.io/dvpinstanceclasses
- deckhouse.io/dynamixinstanceclasses
- deckhouse.io/gcpinstanceclasses
- deckhouse.io/huaweicloudinstanceclasses
- deckhouse.io/hubblemonitoringconfigs
- deckhouse.io/instances
- deckhouse.io/keepalivedinstances
- deckhouse.io/localpathprovisioners
- deckhouse.io/nodegroups
- deckhouse.io/openstackinstanceclasses
- deckhouse.io/operationpolicies
- deckhouse.io/projecttemplates
- deckhouse.io/securitypolicies
- deckhouse.io/securitypolicyexceptions
- deckhouse.io/vcdaffinityrules
- deckhouse.io/vcdinstanceclasses
- deckhouse.io/vsphereinstanceclasses
- deckhouse.io/yandexinstanceclasses
- deckhouse.io/zvirtinstanceclasses
- discovery.k8s.io/endpointslices
- endpoints
- events
- events.k8s.io/events
- expansion.gatekeeper.sh/expansiontemplate
- extensions.istio.io/wasmplugins
- extensions/daemonsets
- extensions/deployments
- extensions/ingresses
- extensions/replicasets
- extensions/replicationcontrollers
- externaldata.gatekeeper.sh/providers
- gateway.networking.k8s.io/backendtlspolicies
- gateway.networking.k8s.io/gatewayclasses
- gateway.networking.k8s.io/gateways
- gateway.networking.k8s.io/grpcroutes
- gateway.networking.k8s.io/httproutes
- gateway.networking.k8s.io/listenersets
- gateway.networking.k8s.io/referencegrants
- gateway.networking.k8s.io/tcproutes
- gateway.networking.k8s.io/tlsroutes
- gateway.networking.k8s.io/udproutes
- infrastructure.cluster.x-k8s.io/deckhouseclusters
- infrastructure.cluster.x-k8s.io/deckhousemachines
- infrastructure.cluster.x-k8s.io/deckhousemachinetemplates
- infrastructure.cluster.x-k8s.io/dynamixclusters
- infrastructure.cluster.x-k8s.io/dynamixmachines
- infrastructure.cluster.x-k8s.io/dynamixmachinetemplates
- infrastructure.cluster.x-k8s.io/huaweicloudclusters
- infrastructure.cluster.x-k8s.io/huaweicloudmachines
- infrastructure.cluster.x-k8s.io/huaweicloudmachinetemplates
- infrastructure.cluster.x-k8s.io/vcdclusters
- infrastructure.cluster.x-k8s.io/vcdclustertemplates
- infrastructure.cluster.x-k8s.io/vcdmachines
- infrastructure.cluster.x-k8s.io/vcdmachinetemplates
- infrastructure.cluster.x-k8s.io/zvirtclusters
- infrastructure.cluster.x-k8s.io/zvirtmachines
- infrastructure.cluster.x-k8s.io/zvirtmachinetemplates
- limitranges
- metrics.k8s.io/nodes
- metrics.k8s.io/pods
- multitenancy.deckhouse.io/availableclusterresources
- mutations.gatekeeper.sh/assign
- mutations.gatekeeper.sh/assignimage
- mutations.gatekeeper.sh/assignmetadata
- mutations.gatekeeper.sh/modifyset
- namespaces
- network.deckhouse.io/egressgatewaypolicies
- network.deckhouse.io/egressgateways
- network.deckhouse.io/metalloadbalancerbgppeers
- network.deckhouse.io/metalloadbalancerclasses
- network.deckhouse.io/metalloadbalancerconfigurations
- network.deckhouse.io/metalloadbalancerpools
- network.deckhouse.io/servicewithhealthchecks
- networking.istio.io/destinationrules
- networking.istio.io/gateways
- networking.istio.io/serviceentries
- networking.istio.io/sidecars
- networking.istio.io/virtualservices
- networking.istio.io/workloadentries
- networking.istio.io/workloadgroups
- networking.k8s.io/ingresses
- networking.k8s.io/networkpolicies
- nodes
- persistentvolumeclaims
- persistentvolumes
- pods
- pods/log
- policy/poddisruptionbudgets
- rbac.authorization.k8s.io/rolebindings
- rbac.authorization.k8s.io/roles
- replicationcontrollers
- resourcequotas
- security.istio.io/authorizationpolicies
- security.istio.io/peerauthentications
- security.istio.io/requestauthentications
- serviceaccounts
- services
- status.gatekeeper.sh/configpodstatuses
- status.gatekeeper.sh/connectionpodstatuses
- status.gatekeeper.sh/constraintpodstatuses
- status.gatekeeper.sh/constrainttemplatepodstatuses
- status.gatekeeper.sh/expansiontemplatepodstatuses
- status.gatekeeper.sh/mutatorpodstatuses
- status.gatekeeper.sh/providerpodstatuses
- storage.k8s.io/storageclasses
- syncset.gatekeeper.sh/syncsets
- telemetry.istio.io/telemetries
- templates.gatekeeper.sh/constrainttemplates
Роль PrivilegedUser (включает все правила из роли User):
create:
- pods/eviction
create,get:
- pods/attach
- pods/exec
delete,deletecollection:
- pods
read:
- secrets
Роль Editor (включает все правила из роли User, PrivilegedUser):
write:
- apps/deployments
- apps/statefulsets
- autoscaling.k8s.io/verticalpodautoscalers
- autoscaling/horizontalpodautoscalers
- batch/cronjobs
- batch/jobs
- cert-manager.io/certificates
- cert-manager.io/issuers
- configmaps
- deckhouse.io/dexauthenticators
- deckhouse.io/dexclients
- discovery.k8s.io/endpointslices
- endpoints
- extensions/deployments
- extensions/ingresses
- gateway.networking.k8s.io/backendtlspolicies
- gateway.networking.k8s.io/gateways
- gateway.networking.k8s.io/grpcroutes
- gateway.networking.k8s.io/httproutes
- gateway.networking.k8s.io/listenersets
- gateway.networking.k8s.io/referencegrants
- gateway.networking.k8s.io/tcproutes
- gateway.networking.k8s.io/tlsroutes
- gateway.networking.k8s.io/udproutes
- network.deckhouse.io/servicewithhealthchecks
- networking.istio.io/destinationrules
- networking.istio.io/gateways
- networking.istio.io/serviceentries
- networking.istio.io/sidecars
- networking.istio.io/virtualservices
- networking.istio.io/workloadentries
- networking.istio.io/workloadgroups
- networking.k8s.io/ingresses
- networking.k8s.io/networkpolicies
- persistentvolumeclaims
- policy/poddisruptionbudgets
- secrets
- security.istio.io/authorizationpolicies
- security.istio.io/peerauthentications
- security.istio.io/requestauthentications
- serviceaccounts
- services
Роль Admin (включает все правила из роли User, PrivilegedUser, Editor):
create,patch,update:
- pods
delete,deletecollection:
- acme.cert-manager.io/challenges
- acme.cert-manager.io/orders
- apps/replicasets
- cert-manager.io/certificaterequests
- extensions/replicasets
read:
- deckhouse.io/applicationpackages
- deckhouse.io/applicationpackageversions
read-write:
- deckhouse.io/authorizationrules
write:
- autoscaling.k8s.io/verticalpodautoscalercheckpoints
- deckhouse.io/applications
- extensions.istio.io/wasmplugins
- rbac.authorization.k8s.io/rolebindings
- rbac.authorization.k8s.io/roles
- telemetry.istio.io/telemetries
Роль ClusterEditor (включает все правила из роли User, PrivilegedUser, Editor):
delete,deletecollection:
- acme.cert-manager.io/challenges
- acme.cert-manager.io/orders
- cert-manager.io/certificaterequests
patch,update:
- nodes
read:
- deckhouse.io/applicationpackages
- deckhouse.io/applicationpackageversions
- deckhouse.io/containerdintegritypolicies
- deckhouse.io/ingressistiocontrollers
- deckhouse.io/istiofederations
- deckhouse.io/istiomulticlusters
- install.istio.io/istiooperators
- multitenancy.deckhouse.io/grantableclusterresourcedefinitions
- multitenancy.deckhouse.io/grantableclusterresourcereferences
- rbac.authorization.k8s.io/clusterrolebindings
- rbac.authorization.k8s.io/clusterroles
- sailoperator.io/istiocnis
- sailoperator.io/istiorevisions
- sailoperator.io/istiorevisiontags
- sailoperator.io/istios
- sailoperator.io/ztunnels
read-write:
- deckhouse.io/nodegroupconfigurations
- deckhouse.io/staticinstances
- multitenancy.deckhouse.io/clusterresourcegrantpolicies
write:
- apiextensions.k8s.io/customresourcedefinitions
- apps/daemonsets
- autoscaling.k8s.io/verticalpodautoscalercheckpoints
- cert-manager.io/clusterissuers
- deckhouse.io/applications
- deckhouse.io/hubblemonitoringconfigs
- deckhouse.io/instances
- deckhouse.io/keepalivedinstances
- deckhouse.io/nodegroups
- extensions.istio.io/wasmplugins
- extensions/daemonsets
- gateway.networking.k8s.io/gatewayclasses
- network.deckhouse.io/egressgatewaypolicies
- network.deckhouse.io/egressgateways
- storage.k8s.io/storageclasses
- telemetry.istio.io/telemetries
Роль ClusterAdmin (включает все правила из роли User, PrivilegedUser, Editor, Admin, ClusterEditor):
create:
- deckhouse.io/dexauthenticators/allow-access-to-kubernetes
- deckhouse.io/dexclients/allow-access-to-kubernetes
delete,deletecollection,get,list,patch,update,watch:
- machine.sapcloud.io/alicloudmachineclasses
- machine.sapcloud.io/awsmachineclasses
- machine.sapcloud.io/azuremachineclasses
- machine.sapcloud.io/gcpmachineclasses
- machine.sapcloud.io/machinedeployments
- machine.sapcloud.io/machines
- machine.sapcloud.io/machinesets
- machine.sapcloud.io/openstackmachineclasses
- machine.sapcloud.io/packetmachineclasses
- machine.sapcloud.io/vspheremachineclasses
- machine.sapcloud.io/yandexmachineclasses
get,list,patch,update,watch:
- control-plane.deckhouse.io/controlplanenodes
patch,update:
- deckhouse.io/vcdaffinityrules
- infrastructure.cluster.x-k8s.io/deckhouseclusters
- infrastructure.cluster.x-k8s.io/deckhousemachines
- infrastructure.cluster.x-k8s.io/deckhousemachinetemplates
- infrastructure.cluster.x-k8s.io/dynamixclusters
- infrastructure.cluster.x-k8s.io/dynamixmachines
- infrastructure.cluster.x-k8s.io/dynamixmachinetemplates
- infrastructure.cluster.x-k8s.io/huaweicloudclusters
- infrastructure.cluster.x-k8s.io/huaweicloudmachines
- infrastructure.cluster.x-k8s.io/huaweicloudmachinetemplates
- infrastructure.cluster.x-k8s.io/vcdclusters
- infrastructure.cluster.x-k8s.io/vcdclustertemplates
- infrastructure.cluster.x-k8s.io/vcdmachines
- infrastructure.cluster.x-k8s.io/vcdmachinetemplates
- infrastructure.cluster.x-k8s.io/zvirtclusters
- infrastructure.cluster.x-k8s.io/zvirtmachines
- infrastructure.cluster.x-k8s.io/zvirtmachinetemplates
- machine.sapcloud.io/machinedeployments/scale
proxy:
- nodes
read:
- cluster.x-k8s.io/machinedrainrules
- control-plane.deckhouse.io/controlplaneoperations
- infrastructure.cluster.x-k8s.io/deckhousecontrolplanes
- infrastructure.cluster.x-k8s.io/staticclusters
- infrastructure.cluster.x-k8s.io/staticmachines
- nfd.k8s-sigs.io/nodefeaturegroups
- nfd.k8s-sigs.io/nodefeaturerules
- nfd.k8s-sigs.io/nodefeatures
read-write:
- cluster.x-k8s.io/clusters
- cluster.x-k8s.io/machinedeployments
- cluster.x-k8s.io/machinehealthchecks
- cluster.x-k8s.io/machinepools
- cluster.x-k8s.io/machines
- cluster.x-k8s.io/machinesets
- deckhouse.io/clusterauthorizationrules
- deckhouse.io/deckhousereleases
- deckhouse.io/dexproviderchecks
- deckhouse.io/dexproviders
- deckhouse.io/groups
- deckhouse.io/moduleconfigs
- deckhouse.io/moduledocumentations
- deckhouse.io/modulepulloverrides
- deckhouse.io/modulereleases
- deckhouse.io/modules
- deckhouse.io/modulesources
- deckhouse.io/moduleupdatepolicies
- deckhouse.io/nodeusers
- deckhouse.io/packagerepositories
- deckhouse.io/packagerepositoryoperations
- deckhouse.io/sshcredentials
- deckhouse.io/useraccounts
- deckhouse.io/useroperations
- deckhouse.io/users
- infrastructure.cluster.x-k8s.io/staticmachinetemplates
- nodes/configz
- nodes/healthz
- nodes/log
- nodes/metrics
- nodes/pods
- nodes/proxy
- nodes/stats
write:
- cilium.io/ciliumclusterwidenetworkpolicies
- cilium.io/ciliumnetworkpolicies
- cluster.x-k8s.io/machinedeployments/scale
- config.gatekeeper.sh/configs
- connection.gatekeeper.sh/connections
- constraints.gatekeeper.sh/*
- deckhouse.io/applicationpackages
- deckhouse.io/applicationpackageversions
- deckhouse.io/awsinstanceclasses
- deckhouse.io/azureinstanceclasses
- deckhouse.io/containerdintegritypolicies
- deckhouse.io/deschedulers
- deckhouse.io/dvpinstanceclasses
- deckhouse.io/dynamixinstanceclasses
- deckhouse.io/gcpinstanceclasses
- deckhouse.io/huaweicloudinstanceclasses
- deckhouse.io/ingressistiocontrollers
- deckhouse.io/istiofederations
- deckhouse.io/istiomulticlusters
- deckhouse.io/localpathprovisioners
- deckhouse.io/openstackinstanceclasses
- deckhouse.io/operationpolicies
- deckhouse.io/projects
- deckhouse.io/projecttemplates
- deckhouse.io/securitypolicies
- deckhouse.io/securitypolicyexceptions
- deckhouse.io/vcdinstanceclasses
- deckhouse.io/vsphereinstanceclasses
- deckhouse.io/yandexinstanceclasses
- deckhouse.io/zvirtinstanceclasses
- expansion.gatekeeper.sh/expansiontemplate
- externaldata.gatekeeper.sh/providers
- install.istio.io/istiooperators
- limitranges
- mutations.gatekeeper.sh/assign
- mutations.gatekeeper.sh/assignimage
- mutations.gatekeeper.sh/assignmetadata
- mutations.gatekeeper.sh/modifyset
- namespaces
- network.deckhouse.io/metalloadbalancerbgppeers
- network.deckhouse.io/metalloadbalancerclasses
- network.deckhouse.io/metalloadbalancerconfigurations
- network.deckhouse.io/metalloadbalancerpools
- rbac.authorization.k8s.io/clusterrolebindings
- rbac.authorization.k8s.io/clusterroles
- resourcequotas
- sailoperator.io/istiocnis
- sailoperator.io/istiorevisions
- sailoperator.io/istiorevisiontags
- sailoperator.io/istios
- sailoperator.io/ztunnels
- status.gatekeeper.sh/configpodstatuses
- status.gatekeeper.sh/connectionpodstatuses
- status.gatekeeper.sh/constraintpodstatuses
- status.gatekeeper.sh/constrainttemplatepodstatuses
- status.gatekeeper.sh/expansiontemplatepodstatuses
- status.gatekeeper.sh/mutatorpodstatuses
- status.gatekeeper.sh/providerpodstatuses
- syncset.gatekeeper.sh/syncsets
- templates.gatekeeper.sh/constrainttemplates
Вы можете получить дополнительный список правил доступа для роли модуля из кластера (существующие пользовательские правила и нестандартные правила из других модулей Deckhouse):
D8_ROLE_NAME=Editor
kubectl get clusterrole -A -o jsonpath="{range .items[?(@.metadata.annotations.user-authz\.deckhouse\.io/access-level=='$D8_ROLE_NAME')]}{.rules}{'\n'}{end}" | jq -s add