Модуль отвечает за генерацию RBAC для пользователей и реализует простейший режим multi-tenancy с разграничением доступа по namespace.
Реализует role-based-подсистему сквозной авторизации, расширяя функционал стандартного механизма RBAC.
Вся настройка прав доступа происходит с помощью custom resources.
Возможности модуля
- Управление доступом пользователей и групп на базе механизма RBAC Kubernetes.
- Управление доступом к инструментам масштабирования (параметр
allowScale
ресурсаClusterAuthorizationRule
или AuthorizationRule). - Управление доступом к форвардингу портов (параметр
portForwarding
ресурсаClusterAuthorizationRule
или AuthorizationRule). - Управление списком разрешенных namespace в формате labelSelector (параметр
namespaceSelector
custom resourceClusterAuthorizationRule
).
Ролевая модель
В модуле, кроме прямого использования RBAC, можно использовать удобный набор высокоуровневых ролей:
User
— позволяет получать информацию обо всех объектах (включая доступ к журналам подов), но не позволяет заходить в контейнеры, читать Secret’ы и выполнять port-forward;PrivilegedUser
— то же самое, что иUser
, но позволяет заходить в контейнеры, читать Secret’ы, а также удалять поды (что обеспечивает возможность перезагрузки);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 (авторизация по namespace) в данный момент реализован по временной схеме и не гарантирует безопасность!
В случае, если в ClusterAuthorizationRule
-ресурсе используется namespaceSelector
, limitNamespaces
и allowAccessToSystemNamespace
параметры не учитываются.
Если webhook, который реализовывает систему авторизации, по какой-то причине будет недоступен, в это время опции allowAccessToSystemNamespaces
, namespaceSelector
и limitNamespaces
в custom resource перестанут применяться и пользователи будут иметь доступ во все namespace. После восстановления доступности webhook’а опции продолжат работать.
Список доступа для каждой роли модуля по умолчанию
Сокращения для verbs
:
- read -
get
,list
,watch
- read-write -
get
,list
,watch
,create
,delete
,deletecollection
,patch
,update
- write -
create
,delete
,deletecollection
,patch
,update
Роль User
:
read:
- apiextensions.k8s.io/customresourcedefinitions
- apps/daemonsets
- apps/deployments
- apps/replicasets
- apps/statefulsets
- autoscaling.k8s.io/verticalpodautoscalers
- autoscaling/horizontalpodautoscalers
- batch/cronjobs
- batch/jobs
- configmaps
- discovery.k8s.io/endpointslices
- endpoints
- events
- events.k8s.io/events
- extensions/daemonsets
- extensions/deployments
- extensions/ingresses
- extensions/replicasets
- extensions/replicationcontrollers
- limitranges
- metrics.k8s.io/nodes
- metrics.k8s.io/pods
- namespaces
- 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
- serviceaccounts
- services
- storage.k8s.io/storageclasses
Роль PrivilegedUser
(включает все правила из роли User
):
create:
- pods/eviction
create,get:
- pods/attach
- pods/exec
delete,deletecollection:
- pods
read:
- secrets
Роль Editor
(включает все правила из роли User
, PrivilegedUser
):
read-write:
- apps/deployments
- apps/statefulsets
- autoscaling.k8s.io/verticalpodautoscalers
- autoscaling/horizontalpodautoscalers
- batch/cronjobs
- batch/jobs
- configmaps
- discovery.k8s.io/endpointslices
- endpoints
- extensions/deployments
- extensions/ingresses
- networking.k8s.io/ingresses
- persistentvolumeclaims
- policy/poddisruptionbudgets
- serviceaccounts
- services
write:
- secrets
Роль Admin
(включает все правила из роли User
, PrivilegedUser
, Editor
):
create,patch,update:
- pods
delete,deletecollection:
- apps/replicasets
- extensions/replicasets
Роль ClusterEditor
(включает все правила из роли User
, PrivilegedUser
, Editor
):
read:
- rbac.authorization.k8s.io/clusterrolebindings
- rbac.authorization.k8s.io/clusterroles
write:
- apiextensions.k8s.io/customresourcedefinitions
- apps/daemonsets
- extensions/daemonsets
- storage.k8s.io/storageclasses
Роль ClusterAdmin
(включает все правила из роли User
, PrivilegedUser
, Editor
, Admin
, ClusterEditor
):
read-write:
- deckhouse.io/clusterauthorizationrules
write:
- limitranges
- namespaces
- networking.k8s.io/networkpolicies
- rbac.authorization.k8s.io/clusterrolebindings
- rbac.authorization.k8s.io/clusterroles
- rbac.authorization.k8s.io/rolebindings
- rbac.authorization.k8s.io/roles
- resourcequotas
Вы можете получить дополнительный список правил доступа для роли модуля из кластера (существующие пользовательские правила и нестандартные правила из других модулей 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