Модуль отвечает за генерацию RBAC для пользователей и реализует простейший режим multi-tenancy с разграничением доступа по namespace.
Реализует role-based-подсистему сквозной авторизации, расширяя функционал стандартного механизма RBAC.
Вся настройка прав доступа происходит с помощью custom resources.
Возможности модуля
- Управление доступом пользователей и групп на базе механизма RBAC Kubernetes.
- Управление доступом к инструментам масштабирования (параметр
allowScaleресурсаClusterAuthorizationRuleили AuthorizationRule). - Управление доступом к форвардингу портов (параметр
portForwardingресурсаClusterAuthorizationRuleили AuthorizationRule). - Управление списком разрешенных namespace в формате labelSelector (параметр
namespaceSelectorcustom 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