Как не выдать разработчику права на удаление продакшн-базы? Как дать CI/CD доступ только к нужному namespace? Ответ — в правильном использовании встроенных ролей Kubernetes. В этой статье мы детально разберем точные границы разрешений каждой стандартной роли (view, edit, admin, cluster-admin), предоставим готовые сценарии их назначения для разработчиков, тестировщиков и операторов, а также дадим четкие критерии, когда создание кастомной роли оправдано, а когда достаточно предопределенной. Материал основан на актуальных версиях Kubernetes 2026 года и проверенных на практике подходах.
Содержание
- Краткий ответ: какую роль выбрать?
- Шпаргалка: команды для быстрого старта
- Что такое встроенные роли Kubernetes и почему они важны для безопасности
- Полный справочник: Права и границы каждой встроенной роли
- Практические сценарии применения: Как назначать роли членам команды
- Как создать кастомную роль для разработчика: критерии и примеры
- Ошибки и лучшие практики безопасности при работе с ролями
Краткий ответ: какую роль выбрать?
Если вам нужно быстро принять решение, вот суть: для чтения — 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.
Как создать кастомную роль для разработчика: критерии и примеры
Несмотря на удобство встроенных ролей, бывают ситуации, когда они не соответствуют принципу минимальных привилегий. Используйте следующий чек-лист для принятия решения:
- Нужен ли доступ только к определенному подмножеству ресурсов? (Например, только к Pods и ConfigMaps, но не к Services).
- Требуется ли запретить конкретное действие? (Например, разрешить создание и обновление Deployments, но запретить их удаление).
- Нужны ли права, объединяющие части разных стандартных ролей? (Например, чтение Pods из
viewи изменение ConfigMaps изedit). - Существует ли готовый агрегированный 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 как инструментами конфигурации.
Ошибки и лучшие практики безопасности при работе с ролями
Избегайте этих распространенных ошибок, чтобы повысить безопасность вашего кластера:
- Назначение cluster-admin для простых задач: Никогда не используйте
cluster-adminдля CI/CD-пайплайнов, мониторинга или разработчиков. Это создает катастрофические риски. - Использование admin вместо edit для разработчиков: Это дает им ненужный доступ к Secrets и возможность управлять правами доступа внутри namespace, что нарушает принцип разделения обязанностей.
- Использование пользовательских учетных записей для автоматизированных систем: Всегда создавайте отдельные ServiceAccount для CI/CD, операторов и других автоматических процессов. Это упрощает аудит и управление.
- Отсутствие регулярного аудита: Периодически проверяйте назначенные роли командами
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).