Управление доступом в кластере Managed Kubernetes с помощью пользовательских ролей
Вы можете создавать новые пользовательские роли для управления доступом к ресурсам сервиса Managed Kubernetes, если стандартных ролей Kubernetes API недостаточно.
Чтобы создать пользовательскую роль, которая предоставляет права администратора в определенном пространстве имен:
От имени сервисного аккаунта, которому вы назначите новую роль, можно будет просматривать ресурсы и работать с ними только в выбранном пространстве имен. Вместо сервисного аккаунта также можно использовать федеративного пользователя.
Перед началом работы
Заголовок раздела «Перед началом работы»sa-adminс рольюmk8s.clusterAdmin;sa-userбез ролей — для этого сервисного аккаунта будет создана пользовательская роль Kubernetes API.
Создайте авторизованные ключи для сервисных аккаунтов.
Аутентифицируйтесь в MWS CLI от имени сервисного аккаунта
sa-admin:bash mws init --service-account-authorized-key "<путь к файлу с авторизованным ключом sa-admin>"Создайте кластер Managed Kubernetes любой подходящей вам конфигурации.
1. Создайте пространство имен
Заголовок раздела «1. Создайте пространство имен»Создайте пространство имен в кластере:
bash kubectl create namespace my-namespaceОжидаемый результат:
bash namespace/my-namespace created
2. Создайте роль
Заголовок раздела «2. Создайте роль»Сохраните спецификацию объекта
ClusterRoleв файлrole.yaml:yaml apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:name: namespace-adminrules:- apiGroups: ["", "apps", "batch", "extensions", "networking.k8s.io"]resources: ["*"]verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]Здесь:
rules.resources— ресурсы, на которые предоставляются разрешения.rules.verbs— действия, которые разрешается выполнять с ресурсами.
Подробнее о спецификации
ClusterRoleчитайте в документации Kubernetes.Создайте объект:
bash kubectl apply -f role.yamlОжидаемый результат:
bash clusterrole.rbac.authorization.k8s.io/namespace-admin created
3. Назначьте роль сервисному аккаунту
Заголовок раздела «3. Назначьте роль сервисному аккаунту»Сохраните спецификацию объекта
RoleBindingв файлrole-binding.yaml:yaml apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:name: binding-for-rolenamespace: my-namespacesubjects:- kind: Username: mws:projects/<имя проекта>/serviceAccounts/sa-userapiGroup: rbac.authorization.k8s.ioroleRef:kind: ClusterRolename: namespace-adminapiGroup: rbac.authorization.k8s.ioЗдесь
metadata.namespaceуказывает на пространство имен, к которому будет выдан доступ.Подробнее о спецификации
RoleBindingчитайте в документации Kubernetes.Создайте объект:
bash kubectl apply -f role-binding.yamlОжидаемый результат:
bash rolebinding.rbac.authorization.k8s.io/binding-for-role created
4. Подготовьте сервисный аккаунт к работе с кластером
Заголовок раздела «4. Подготовьте сервисный аккаунт к работе с кластером»Укажите в kubeconfig пространство имен по умолчанию:
yaml ...- context:cluster: mws-mk8s-mk8s-<имя проекта>-<имя кластера>user: mws-mk8s-mk8s-<имя проекта>-<имя кластера>namespace: my-namespace...Аутентифицируйтесь в MWS CLI от имени сервисного аккаунта
sa-user:bash mws init --service-account-authorized-key "<путь к файлу с авторизованным ключом sa-user>"
5. Проверьте права
Заголовок раздела «5. Проверьте права»Убедитесь, что есть доступ к пространству имен
my-namespace:bash kubectl auth can-i get pods -n my-namespaceОжидаемый результат:
yes.Убедитесь, что нет доступа к другим пространствам имен:
bash kubectl auth can-i get pods -n kube-systemОжидаемый результат:
no.(опционально) Передайте kubeconfig и файл с авторизованным ключом для аутентификации в MWS CLI тому, кто будет работать в пространстве имен
my-namespaceот имени сервисного аккаунтаsa-user.
Удалите платные ресурсы
Заголовок раздела «Удалите платные ресурсы»Кластер Managed Kubernetes, созданный в руководстве, тарифицируется. Если вы больше не планируете использовать его, удалите кластер.