Встроенные роли Kubernetes: Права view, edit, admin и cluster-admin. Сценарии применения и создание кастомных ролей | 2026 | AdminWiki

Встроенные роли Kubernetes: Права view, edit, admin и cluster-admin. Сценарии применения и создание кастомных ролей | 2026

05 апреля 2026 12 мин. чтения
Содержание статьи

Как не выдать разработчику права на удаление продакшн-базы? Как дать CI/CD доступ только к нужному namespace? Ответ — в правильном использовании встроенных ролей Kubernetes. В этой статье мы детально разберем точные границы разрешений каждой стандартной роли (view, edit, admin, cluster-admin), предоставим готовые сценарии их назначения для разработчиков, тестировщиков и операторов, а также дадим четкие критерии, когда создание кастомной роли оправдано, а когда достаточно предопределенной. Материал основан на актуальных версиях Kubernetes 2026 года и проверенных на практике подходах.

Содержание

Краткий ответ: какую роль выбрать?

Если вам нужно быстро принять решение, вот суть: для чтения — view, для разработки — edit, для управления namespace — admin, для полного контроля над кластером — cluster-admin. Ниже — таблица для мгновенного сравнения.

Роль Доступ к Secrets Право удаления Уровень Кому подходит Ключевой риск
view Нет Нет Namespace QA, наблюдатели, аудиторы Минимальный, только чтение
edit Нет Нет Namespace Разработчики Изменение рабочих нагрузок без удаления
admin Да Да Namespace Ответственные за проект/среду Полный контроль внутри namespace, включая RBAC
cluster-admin Да Да Кластер Системные администраторы кластера Полный контроль над кластером, включая удаление данных

Шпаргалка: Команды и примеры для быстрого старта

Сохраните эту шпаргалку для быстрого доступа к ключевым командам:

  • Просмотр прав роли: kubectl describe clusterrole <role-name>
  • Создание RoleBinding для пользователя: kubectl create rolebinding <name> --clusterrole=<role> --user=<user> --namespace=<ns>
  • Создание RoleBinding для ServiceAccount: kubectl create rolebinding <name> --clusterrole=<role> --serviceaccount=<ns>:<sa-name> --namespace=<ns>
  • Проверка своих прав: kubectl auth can-i <verb> <resource> [--namespace <ns>] (например, kubectl auth can-i create deployment)
  • Поиск всех привязок ролей: kubectl get rolebindings --all-namespaces и kubectl get clusterrolebindings
  • Шаблон кастомной Role:
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      namespace: default
      name: custom-role-example
    rules:
    - apiGroups: [""]
      resources: ["pods"]
      verbs: ["get", "list"]
    

Что такое встроенные роли Kubernetes и почему они важны для безопасности

Система управления доступом на основе ролей (RBAC) в Kubernetes — это стандартный механизм для контроля того, кто и что может делать в кластере. Её основными строительными блоками являются Role и ClusterRole, которые определяют набор правил (разрешений), и RoleBinding или ClusterRoleBinding, которые связывают эти роли с конкретными пользователями, группами или ServiceAccount.

Встроенные роли — это предопределенные ClusterRole, которые поставляются вместе с Kubernetes. Их ключевое преимущество — они проверены сообществом, стандартизированы и значительно снижают риск ошибок конфигурации по сравнению с созданием ролей с нуля. Использование готовых ролей напрямую поддерживает принцип минимальных необходимых прав (Principle of Least Privilege), который является краеугольным камнем безопасности: пользователь или система должны получать ровно те разрешения, которые необходимы для выполнения их задач, и не более того. В контексте Kubernetes 2026 года эти роли остаются стабильными и рекомендуемым первым выбором для большинства типовых сценариев.

Полный справочник: Права и границы каждой встроенной роли

Понимание точных границ каждой роли критично для оценки рисков и предотвращения предоставления избыточных прав. Ниже приведен детальный разбор четырех ключевых встроенных ролей. Для проверки прав конкретной роли в вашем кластере всегда используйте команду kubectl describe clusterrole <role-name>.

Какие права дает роль view и когда ее использовать?

Роль view предоставляет права только на чтение (get, list, watch) для большинства ресурсов в пределах namespace. Это делает её идеальной для ситуаций, когда необходимо предоставить доступ для мониторинга, аудита или наблюдения без возможности какого-либо вмешательства.

  • Ключевые разрешения: get, list, watch.
  • Охватываемые ресурсы (в namespace): Pods, Deployments, StatefulSets, DaemonSets, Jobs, CronJobs, Services, Ingresses, ConfigMaps, HorizontalPodAutoscalers (HPA) и многие другие.
  • Критичные ограничения:
    • Нет доступа к Secrets: Просмотр конфиденциальных данных невозможен.
    • Нет доступа к ресурсам управления доступом: Нельзя просматривать или изменять Roles и RoleBindings.
    • Нет прав на создание, изменение или удаление любых ресурсов.

Использование view — это отправная точка для любого нового пользователя или системы, которым нужен лишь обзор состояния.

Роль edit: Модификация без удаления и доступа к Secrets

Роль edit предназначена для пользователей, которым необходимо изменять рабочие нагрузки и конфигурации приложений, но без предоставления полного контроля над namespace или доступа к критически важным данным.

  • Ключевые разрешения: create, get, list, watch, update, patch.
  • Охватываемые ресурсы (в namespace): Включает все ресурсы из view, а также позволяет их изменять.
  • Критичные ограничения (актуально для K8s 1.28+):
    • Нет права delete для большинства ресурсов: Разработчик не может удалить Deployment, Service или Pod напрямую (хотя удаление Pod, управляемого Deployment, может быть вызвано обновлением).
    • Нет доступа к Secrets: Как и в view, чтение и изменение секретов запрещено.
    • Нет доступа к Roles и RoleBindings: Пользователь не может изменять правила доступа внутри namespace.

Эта роль — стандартный выбор для разработчиков, работающих в своем namespace.

Чем отличается admin от cluster-admin?

Роль admin предоставляет полные права (create, read, update, delete) на все ресурсы внутри одного конкретного namespace, включая возможность управлять доступом внутри этого пространства.

  • Ключевые разрешения: Полный набор (*) для всех ресурсов в namespace.
  • Особые возможности:
    • Доступ к Secrets: Позволяет читать, создавать и изменять секреты внутри namespace.
    • Управление доступом внутри namespace: Позволяет создавать и привязывать Roles и RoleBindings только в пределах этого же namespace. Это позволяет администратору namespace делегировать часть своих полномочий.
  • Ключевое ограничение: Не предоставляет прав на ресурсы кластерного уровня: Nodes, PersistentVolumes, StorageClasses, ClusterRoles, ClusterRoleBindings, а также на ресурсы в других namespaces.

admin — это роль для ответственного за конкретный проект или среду (например, namespace production), который должен иметь полный контроль в его границах, но не за их пределами.

Роль cluster-admin: Абсолютные права на весь кластер

Роль cluster-admin — это аналог суперпользователя (root) для всего кластера Kubernetes. Её назначение должно быть крайне осмотрительным.

  • Ключевые разрешения: Полный набор (*) для всех ресурсов во всех namespaces, включая кластерные ресурсы (Nodes, PersistentVolumes) и сами namespaces.
  • Особые возможности: Разрешает любые действия, включая управление RBAC на уровне кластера, создание/удаление namespaces, доступ к любым Secrets в любом namespace, управление узлами.
  • Критичный риск: Пользователь или ServiceAccount с этой ролью может полностью вывести кластер из строя, удалить все данные или скомпрометировать любую информацию. Назначать её следует только доверенным системным администраторам и только для выполнения задач, требующих такого уровня доступа (например, аварийное восстановление, настройка инфраструктурных компонентов кластера).

Для повседневных операций администраторам кластера рекомендуется использовать комбинацию ролей admin в необходимых namespaces, а не cluster-admin.

Практические сценарии применения: Как назначать роли членам команды

Теория становится полезной, когда её можно применить на практике. Рассмотрим типовые сценарии назначения встроенных ролей с готовыми командами.

Разработчик (Developer): Роль edit в конкретном namespace

Сценарий: Разработчик команды «Альфа» работает с приложениями в namespace dev-alpha. Ему нужно развертывать, обновлять и масштабировать приложения, но не требуется доступ к секретам или право удалять целые сервисы.

Решение: Назначить роль edit в namespace dev-alpha.

kubectl create rolebinding dev-alpha-editor \
  --clusterrole=edit \
  --user=developer-alpha@company.com \
  --namespace=dev-alpha

Почему edit, а не admin? Это автоматически накладывает важные ограничения: запрет на удаление ресурсов и доступ к Secrets, что повышает безопасность и предотвращает случайные инциденты.

Итог: Роль edit — оптимальный баланс между продуктивностью разработчика и безопасностью namespace. Она позволяет работать с приложениями, но блокирует удаление и доступ к секретам.

Тестировщик (QA) или наблюдатель: Роль view в нескольких namespace

Сценарий: Специалист по качеству должен отслеживать состояние подов и развертываний в средах dev, staging и qa, но не вмешиваться в их работу.

Решение: Использовать ClusterRoleBinding для роли view, которая предоставит права на чтение во всех namespaces. Внимание: Это также даст доступ на чтение ко всем namespace, включая системные (kube-system), что может быть избыточно.

kubectl create clusterrolebinding qa-viewer \
  --clusterrole=view \
  --user=qa-engineer@company.com

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

Итог: Для наблюдателей view — правильный выбор, но лучше ограничивать область видимости конкретными namespaces через RoleBinding, чтобы не раскрывать лишнюю информацию.

Оператор кластера (Cluster Operator): Комбинация admin и view

Сценарий: Системный администратор отвечает за рабочие среды prod и monitoring, а также должен иметь возможность просматривать состояние в других namespaces для диагностики.

Решение: Назначить роль admin в целевых namespaces и view на уровне кластера или в остальных namespaces. Это безопаснее, чем выдача cluster-admin, так как ограничивает права на запись четко очерченными областями.

# Полный контроль в production
kubectl create rolebinding prod-admin \
  --clusterrole=admin \
  --user=operator@company.com \
  --namespace=production

# Возможность просмотра во всем кластере для диагностики
kubectl create clusterrolebinding operator-viewer \
  --clusterrole=view \
  --user=operator@company.com

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

Сервисы CI/CD: ServiceAccount с ролью edit или admin

Сценарий: Система CI/CD (например, Jenkins или GitLab Runner) должна развертывать приложения в namespace staging.

Решение: Создать dedicated ServiceAccount и назначить ему роль edit или admin (если CI/CD должен управлять Secrets или RBAC внутри namespace).

# 1. Создать ServiceAccount
kubectl create serviceaccount cicd-agent -n staging

# 2. Привязать роль edit к этому ServiceAccount
kubectl create rolebinding cicd-editor \
  --clusterrole=edit \
  --serviceaccount=staging:cicd-agent \
  --namespace=staging

Использование ServiceAccount вместо пользовательских учетных записей — это лучшая практика для автоматизированных систем. Подробнее о настройке автоматизированного управления приложениями вы можете узнать в нашем полном руководстве по Kubernetes Deployment.

Итог: Для CI/CD всегда используйте ServiceAccount с минимально необходимой ролью. edit достаточно для деплоя, admin нужен только если пайплайн управляет секретами или RBAC.

Как создать кастомную роль для разработчика: критерии и примеры

Несмотря на удобство встроенных ролей, бывают ситуации, когда они не соответствуют принципу минимальных привилегий. Используйте следующий чек-лист для принятия решения:

  1. Нужен ли доступ только к определенному подмножеству ресурсов? (Например, только к Pods и ConfigMaps, но не к Services).
  2. Требуется ли запретить конкретное действие? (Например, разрешить создание и обновление Deployments, но запретить их удаление).
  3. Нужны ли права, объединяющие части разных стандартных ролей? (Например, чтение Pods из view и изменение ConfigMaps из edit).
  4. Существует ли готовый агрегированный ClusterRole? (Например, system:monitoring).

Если ответ «да» на вопросы 1-3, стоит рассмотреть создание кастомной роли.

Пример 1: Кастомная роль для мониторинга только Pods и Deployments

Потребность: Внешней системе мониторинга нужен доступ только к метрикам Pods и Deployments. Роль view дает избыточный доступ к другим ресурсам.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: custom-monitoring-view
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["apps", "extensions"]
  resources: ["deployments"]
  verbs: ["get", "list", "watch"]

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

Пример 2: Роль «разработчик без удаления»

Потребность: Дать разработчикам возможность полноценно работать с приложениями, но полностью запретить удаление Deployments и Services, даже случайное.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: developer-no-delete
rules:
# Разрешить всё для Deployments, кроме delete
- apiGroups: ["apps", "extensions"]
  resources: ["deployments"]
  verbs: ["get", "list", "watch", "create", "update", "patch"]
# Разрешить всё для Services, кроме delete
- apiGroups: [""]
  resources: ["services"]
  verbs: ["get", "list", "watch", "create", "update", "patch"]
# Взять остальные права из роли edit (кроме delete для других ресурсов)
- apiGroups: [""]
  resources: ["pods", "configmaps", ...]
  verbs: ["get", "list", "watch", "create", "update", "patch"]

Итог: Такая роль — компромисс между стандартной edit и полным запретом на изменения. Она подходит, когда нужно исключить даже случайное удаление критичных ресурсов.

Агрегированные ClusterRoles: «почти стандартные» решения

Kubernetes использует механизм aggregationRule для создания ролей, которые автоматически объединяют правила из других ClusterRoles с определенными метками. Например, роли в группе system:monitoring (как system:controller:node-controller) являются агрегированными. Прежде чем создавать свою роль, проверьте, нет ли уже агрегированной, которая покрывает ваши потребности: kubectl get clusterroles -l kubernetes.io/bootstrapping=rbac-defaults. Для сложных сценариев автоматизации, где кастомные роли могут быть частью более крупного решения, полезно понимать различия между CRD и ConfigMap как инструментами конфигурации.

Ошибки и лучшие практики безопасности при работе с ролями

Избегайте этих распространенных ошибок, чтобы повысить безопасность вашего кластера:

  1. Назначение cluster-admin для простых задач: Никогда не используйте cluster-admin для CI/CD-пайплайнов, мониторинга или разработчиков. Это создает катастрофические риски.
  2. Использование admin вместо edit для разработчиков: Это дает им ненужный доступ к Secrets и возможность управлять правами доступа внутри namespace, что нарушает принцип разделения обязанностей.
  3. Использование пользовательских учетных записей для автоматизированных систем: Всегда создавайте отдельные ServiceAccount для CI/CD, операторов и других автоматических процессов. Это упрощает аудит и управление.
  4. Отсутствие регулярного аудита: Периодически проверяйте назначенные роли командами kubectl get rolebindings --all-namespaces и kubectl get clusterrolebindings.

Лучшие практики:

  • Начинайте с минимальной роли: Всегда стартуйте с view и повышайте привилегии только при явной необходимости.
  • Используйте namespaces для изоляции: Разделяйте среды (dev, staging, prod) и команды по разным namespaces, чтобы ограничить область воздействия.
  • Комбинируйте RBAC с другими механизмами безопасности: Используйте Pod Security Standards (PSS), Security Context и network policies для создания многоуровневой защиты.
  • Проверяйте права перед действием: Используйте kubectl auth can-i delete pod или kubectl auth can-i create deployment --namespace=prod для проверки своих или чужих прав.

Часто задаваемые вопросы

Может ли роль edit удалить под?

Напрямую — нет. Роль edit не имеет права delete для Pods. Однако если Pod управляется Deployment, обновление Deployment может привести к удалению и пересозданию Pod. Поэтому косвенное удаление возможно через изменение родительского ресурса.

Чем отличается admin от cluster-admin?

Роль admin дает полные права только внутри одного namespace, включая управление RBAC в его пределах. Роль cluster-admin предоставляет абсолютные права на весь кластер: все namespaces, узлы, PersistentVolumes и кластерные RBAC.

Какую роль дать разработчику, чтобы он не удалил продакшн?

Используйте роль edit в namespace разработки. Она позволяет создавать и изменять ресурсы, но не дает права на удаление и доступ к Secrets. Для продакшн-namespace разработчику лучше вообще не давать прав или ограничиться view.

Когда нужно создавать кастомную роль Kubernetes?

Когда встроенные роли дают избыточные права. Например, если системе нужен доступ только к Pods и ConfigMaps, но не к Services, или если нужно запретить конкретное действие (например, удаление Deployments).

Поделиться:
Сохранить гайд? В закладки браузера