Что такое RoleBinding

Автор Itworkroom

RoleBinding — это объект Kubernetes, который связывает (привязывает) набор разрешений, определенных в Role или ClusterRole, с конкретными пользователями, группами или сервисными аккаунтами. Проще говоря, RoleBinding «наделяет правами» субъектов в кластере.

Архитектура RBAC

Система RBAC состоит из трех основных компонентов:

  1. Role/ClusterRole — ЧТО можно делать (набор правил)
  2. Subject — КТО (пользователь, группа, сервисный аккаунт)
  3. RoleBinding/ClusterRoleBinding — связывает первые два компонента

Role vs ClusterRole

Role

  • Действует в пределах одного namespace

  • Используется для предоставления прав к ресурсам в конкретном namespace

ClusterRole

  • Действует на уровне всего кластера

  • Используется для:

    • Доступа к cluster-scoped ресурсам (nodes, persistentvolumes)

    • Доступа к ресурсам во всех namespaces

    • Доступа к non-resource endpoints (/healthz)

Структура RoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-binding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pod-reader
subjects:
- kind: User
  name: alice
  apiGroup: rbac.authorization.k8s.io
- kind: ServiceAccount
  name: frontend-sa
  namespace: default
- kind: Group
  name: developers
  apiGroup: rbac.authorization.k8s.io

Пример 1: RoleBinding с Role

Создаем Role:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list", "watch"]

Создаем RoleBinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: bob
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

Пример 2: RoleBinding с ClusterRole

Используем предопределенную ClusterRole:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: admin-in-development
  namespace: development
subjects:
- kind: User
  name: developer1
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin
  apiGroup: rbac.authorization.k8s.io

В этом случае пользователь developer1 получает права admin только в namespace development.

RoleBinding vs ClusterRoleBinding

Аспект RoleBinding ClusterRoleBinding
Область действия Один namespace Весь кластер
Связывание с Role или ClusterRole Только ClusterRole
Использование Лимитированный доступ Глобальный доступ

Best Practices (лучшие практики применения)

1. Принцип минимальных привилегий

# ХОРОШО: Только необходимые права
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"]

# ПЛОХО: Избыточные права
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["*"]

2. Использование сервисных аккаунтов

subjects:
- kind: ServiceAccount
  name: ci-cd-bot
  namespace: ci-cd

3. Группировка пользователей

subjects:
- kind: Group
  name: devops-team
  apiGroup: rbac.authorization.k8s.io

4. Именование

  • Четкие, описательные имена (monitoring-read-onlyci-deployer)

  • Указание namespace в имени при необходимости

Практическое применение в CI/CD

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: jenkins-deployer
  namespace: production
subjects:
- kind: ServiceAccount
  name: jenkins
  namespace: jenkins
roleRef:
  kind: ClusterRole
  name: edit
  apiGroup: rbac.authorization.k8s.io

Управление и мониторинг

Проверка прав:

bash
kubectl auth can-i get pods --as=system:serviceaccount:default:my-sa
kubectl get rolebindings,clusterrolebindings --all-namespaces

Аудит:

bash
kubectl describe rolebinding my-binding
kubectl get rolebinding -o yaml

RoleBinding — это мощный инструмент для реализации принципа наименьших привилегий в Kubernetes. Правильное использование RoleBinding в сочетании с хорошо продуманными Roles и ClusterRoles позволяет создать безопасную и управляемую систему доступа, что особенно важно в production-средах и при работе с множеством команд и приложений.

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

Добавить комментарий

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