Разверните OpenClaw в облаке в один клик
Вход/ Регистрация
На главную
Облачные сервисы

Управление пользователями

В кластерах Kubernetes доступ к кластеру настраивается средствами самого Kubernetes. Конфигурационный файл kubeconfig, который скачивается из панели управления, содержит административные учетные данные и подходит для первичной настройки кластера.

Если с кластером работают несколько сотрудников, не рекомендуется использовать один общий административный kubeconfig. Если такой файл попадет к постороннему человеку или останется у сотрудника после увольнения, отозвать доступ только для него не получится. Безопаснее создать отдельную учетную запись для каждого пользователя и выдать необходимые права через RBAC.

Рассмотрим настройку персонального доступа через ServiceAccount, RoleBinding или ClusterRoleBinding и отдельный kubeconfig с токеном.

Подготовка

Для выполнения действий потребуется кластер Kubernetes, административный kubeconfig, скачанный из панели управления, и установленная утилита kubectl.

Чтобы скачать kubeconfig, перейдите на страницу управления кластером Kubernetes в панели управления. Во вкладке «Дашборд» нажмите ссылку «скачайте файл конфигурации». Скачанный файл будет иметь имя twc-имя_кластера.yaml.

Проверьте подключение к кластеру:

    
kubectl --kubeconfig=twc-имя_кластера.yaml get nodes

Если команда возвращает список нод, можно переходить к созданию учетной записи.

Создание пространства для учетных записей

Для управления учетными записями удобно создать отдельный неймспейс, например kube-users:

    
kubectl create namespace kube-users

Создадим учетную запись для пользователя twcuser:

    
kubectl create serviceaccount twcuser -n kube-users

В дальнейшем имя этой учетной записи будет использоваться при выдаче прав и выпуске токена.

Выдача прав пользователю

Права в Kubernetes выдаются через RBAC. Для этого используются:

  • RoleBinding — выдает права в пределах одного неймспейса;

  • ClusterRoleBinding — выдает права на уровне всего кластера.

Выдавайте пользователю только минимально необходимые права. Если достаточно доступа к одному неймспейсу, используйте RoleBinding вместо ClusterRoleBinding.

Доступ к одному неймспейсу

Если пользователю нужен доступ только к одному неймспейсу, создайте RoleBinding в этом неймспейсе. В примере ниже пользователь twcuser получает права на изменение ресурсов в неймспейсе app-prod:

    
kubectl create namespace app-prod kubectl create rolebinding twcuser-app-prod-edit \ --namespace app-prod \ --clusterrole edit \ --serviceaccount kube-users:twcuser

Вместо роли edit можно использовать другую встроенную роль:

Роль

Описание

view

Просмотр ресурсов без возможности изменять их.

edit

Создание и изменение большинства ресурсов в неймспейсе.

admin

Управление ресурсами в неймспейсе, включая роли и привязки ролей.

cluster-admin

Полный административный доступ ко всему кластеру.

В таблице перечислены стандартные пользовательские ClusterRole Kubernetes. Но также можно создать собственные ClusterRole с нужными правилами, если стандартных ролей недостаточно. 

Для проверки прав выполните:

    
kubectl auth can-i create deployments \ --as system:serviceaccount:kube-users:twcuser \ -n app-prod

Если доступ выдан корректно, команда вернет:

    
yes

Доступ ко всему кластеру

Если пользователю нужен полный административный доступ ко всему кластеру, создайте ClusterRoleBinding:

    
kubectl create clusterrolebinding twcuser-cluster-admin \ --clusterrole cluster-admin \ --serviceaccount kube-users:twcuser

Используйте роль cluster-admin только для администраторов кластера. Для команд разработчиков безопаснее выдавать доступ в пределах нужного неймспейса.

Создание токена

Для подключения через kubectl пользователю нужен токен. В Kubernetes можно использовать временный токен или долгоживущий токен, сохраненный в Secret.

Временный токен

Временный токен создается командой kubectl create token. Например, выпустим токен на 24 часа:

    
TOKEN=$(kubectl create token twcuser -n kube-users --duration=24h)

Посмотреть значение токена можно командой:

    
echo "${TOKEN}"

Временный токен автоматически перестанет работать после окончания срока действия.

У временных токенов нет отдельного объекта в кластере, поэтому отозвать один конкретный временный токен до истечения срока действия нельзя. Если нужно срочно закрыть доступ, удалите права пользователя или сам ServiceAccount.

Долгоживущий токен

Если нужен токен без заданного срока действия, создайте Secret типа kubernetes.io/service-account-token. Такой токен можно отозвать удалением Secret.

Создайте файл twcuser-token-secret.yaml:

    
apiVersion: v1 kind: Secret metadata: name: twcuser-token namespace: kube-users annotations: kubernetes.io/service-account.name: twcuser type: kubernetes.io/service-account-token

Примените манифест:

    
kubectl apply -f twcuser-token-secret.yaml

Получите значение секрета:

    
TOKEN=$(kubectl get secret twcuser-token \ -n kube-users \ -o jsonpath='{.data.token}' | base64 -d)

Долгоживущие токены следует использовать только там, где временного токена недостаточно. Такой токен необходимо хранить как секретные учетные данные.

Создание kubeconfig для пользователя

Создадим отдельный файл kubeconfig, в котором будут данные кластера и токен пользователя twcuser.

Сначала получим параметры текущего кластера из административного kubeconfig:

    
CLUSTER_NAME=$(kubectl config view --minify -o jsonpath='{.clusters[0].name}') CLUSTER_SERVER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}') kubectl config view --raw --minify -o jsonpath='{.clusters[0].cluster.certificate-authority-data}' | base64 -d > ca.crt

Создайте новый файл конфигурации:

    
kubectl config --kubeconfig=twcuser.kubeconfig set-cluster "${CLUSTER_NAME}" \ --server="${CLUSTER_SERVER}" \ --certificate-authority=ca.crt \ --embed-certs=true kubectl config --kubeconfig=twcuser.kubeconfig set-credentials twcuser \ --token="${TOKEN}" kubectl config --kubeconfig=twcuser.kubeconfig set-context twcuser-context \ --cluster="${CLUSTER_NAME}" \ --user=twcuser kubectl config --kubeconfig=twcuser.kubeconfig use-context twcuser-context

Если пользователь должен работать в конкретном неймспейсе, добавьте его в контекст:

    
kubectl config --kubeconfig=twcuser.kubeconfig set-context twcuser-context \ --cluster="${CLUSTER_NAME}" \ --user=twcuser \ --namespace=app-prod

После этого файл twcuser.kubeconfig можно передать пользователю.

Пример готового kubeconfig

Ниже приведен пример пользовательского kubeconfig с авторизацией по токену. Значения certificate-authority-data, server и token будут отличаться в вашем кластере.

    
apiVersion: v1 clusters: - cluster: certificate-authority-data: <CA_DATA> server: https://<API_SERVER>:6443 name: twc-example-cluster contexts: - context: cluster: twc-example-cluster namespace: app-prod user: twcuser name: twcuser-context current-context: twcuser-context kind: Config preferences: {} users: - name: twcuser user: token: <TOKEN>

В готовом файле не должно быть административного пользователя, клиентского сертификата или приватного ключа из исходного kubeconfig. Перед передачей файла пользователю убедитесь, что в секции users осталась только учетная запись с токеном пользователя.

Проверка доступа

Проверьте работу нового kubeconfig:

    
kubectl --kubeconfig=twcuser.kubeconfig get pods -n app-prod

Если пользователю выдан доступ только к неймспейсу app-prod, запросы к другим неймспейсам будут запрещены. Например:

    
kubectl --kubeconfig=twcuser.kubeconfig get pods -n default

В этом случае Kubernetes вернет ошибку доступа:

    
Error from server (Forbidden): pods is forbidden

Для проверки конкретного действия можно использовать команду kubectl auth can-i:

    
kubectl --kubeconfig=twcuser.kubeconfig auth can-i update deployments -n app-prod

Отзыв доступа

Способ отзыва зависит от того, какой доступ нужно отключить.

Удаление прав пользователя

Чтобы запретить пользователю выполнять действия в неймспейсе, удалите соответствующий RoleBinding:

    
kubectl delete rolebinding twcuser-app-prod-edit -n app-prod

Если пользователю был выдан доступ на уровне всего кластера, удалите ClusterRoleBinding:

    
kubectl delete clusterrolebinding twcuser-cluster-admin

После удаления привязки токен может оставаться технически действительным, но прав на выполнение действий у пользователя уже не будет.

Отзыв долгоживущего токена

Если токен был создан через Secret, удалите этот Secret:

    
kubectl delete secret twcuser-token -n kube-users

После удаления Secret токен перестанет проходить аутентификацию.

Полное удаление учетной записи

Чтобы полностью удалить пользователя, удалите его ServiceAccount:

    
kubectl delete serviceaccount twcuser -n kube-users

При удалении ServiceAccount выпущенные для него токены перестанут работать. Отзыв может примениться не мгновенно: Kubernetes может кэшировать результаты проверки токенов в течение короткого времени.

После удаления учетной записи также удалите связанные RoleBinding и ClusterRoleBinding, если они больше не нужны.

Была ли статья полезна?
Ваша оценка очень важна
Пока нет комментариев