Код найма-5
Код найма-5
Код найма-5

Обзор RBAC Wizard — инструмента для анализа и визуализации конфигурации RBAC в кластере Kubernetes

Логотип компании Флант
Отредактировано

DevOps-инженер «Фланта» Юрий Дубовик расскажет о RBAC Wizard — удобном инструменте для тех, кому периодически нужно проводить аудит прав доступа в кластере Kubernetes.

228 открытий2К показов
Обзор RBAC Wizard — инструмента для анализа и визуализации конфигурации RBAC в кластере Kubernetes
Будь собой, остальные роли заняты.
Оскар Уайльдирландский писатель и поэт

Меня зовут Юрий Дубовик, я DevOps-инженер компании «Флант». Мы занимаемся DevOps-сопровождением — помогаем другим компаниям делать инфраструктуру надёжной и создавать комфортную среду для разработки.

Мы много работаем с Kubernetes, и иногда нашим инженерам нужно разобраться с настроенными правами доступа к разным объектам в K8s-кластере клиента. Приходится тратить много времени на сбор и упорядочивание информации, а потом сопоставлять, кому какие роли были назначены. Но сравнительно недавно появился Open Source-инструмент, который упрощает этот процесс, — RBAC Wizard.

RBAC Wizard позволяет быстро проанализировать конфигурации RBAC (Role-based access control) в кластере, а главное, может визуализировать всю собранную информацию. В этом обзоре я покажу, как установить этот инструмент с помощью Helm, и сравню его использование с ручным подходом.

Зачем нужен аудит конфигураций RBAC

RBAC — это механизм распределения прав доступа к объектам в Kubernetes-кластере. Подробно останавливаться на принципах работы RBAC я не буду, поскольку об этом уже написано множество материалов.

Вместо этого скажу пару слов о том, зачем нужен анализ конфигураций RBAC. Он помогает убедиться, что пользователи и сервисы имеют в кластере Kubernetes только те права, которые им действительно нужны для работы. Такой анализ позволяет выявить избыточные или ненужные привилегии, минимизировать риски случайных или злонамеренных действий, а также повысить безопасность и соответствие политике доступа в кластере.

Что такое RBAC Wizard

RBAC Wizard — это инструмент на Go с открытым исходным кодом, который помогает анализировать и визуализировать конфигурации RBAC вашего кластера Kubernetes. Он обеспечивает табличное и графическое представление объектов RBAC Kubernetes.

Хотя проект появился на GitHub недавно, в 2024 году, он уже успел привлечь интерес сообщества. Сейчас у RBAC Wizard чуть больше 270 звёзд.

Как установить RBAC Wizard

RBAC Wizard можно установить локально, запустить в контейнере или развернуть в кластере с помощью Helm. Процесс просто и понятно описан в самом репозитории.

Я выбрал вариант установки с помощью Helm:

			# Сначала добавим Helm-репозиторий и получим Helm-чарты.
helm repo add rbac-wizard https://rbac-wizard.pehli.dev 
helm pull rbac-wizard/rbac-wizard
# Установим RBAC Wizard из Helm-чарта в пространство имён rbac-wizard.
helm install rbac-wizard rbac-wizard/rbac-wizard --namespace rbac-wizard --create-namespace
		

После установки в кластере Kubernetes в пространстве имён rbac-wizard появится одноимённый ингресс rbac-wizard:

			kubectl -n rbac-wizard get ing
NAME          CLASS   HOSTS               ADDRESS   PORTS   AGE
rbac-wizard   nginx   rbac-wizard.local             80      13s
		

У ингресса указан хост rbac-wizard.local. Заменяем его на нужный нам адрес — домен, который находится под нашим управлением, например new.example.com. По этому адресу мы потом увидим RBAC Wizard в браузере.

			kubectl -n rbac-wizard patch ing rbac-wizard --type='json' -p='[{"op": "replace", "path": "/spec/rules/0/host", "value": "new.example.com"}]'
		

Это всё! Больше никаких настроек не требуется. У меня на установку ушло 5–10 минут.

Подготовка тестовых ролей

Чтобы сравнить между собой решение задачи по анализу конфигураций в Kubernetes-кластере без RBAC Wizard и с ним, создадим тестовые ServiceAccount, ClusterRole и ClusterRoleBinding. Разумеется, если вы используете инструмент в готовом кластере, этот шаг стоит пропустить:

			kubectl create -f - <<EOF
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: test-sa
  namespace: rbac-wizard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: powergroup
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list", "create", "delete", "update", "patch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create"]
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: powergroup
subjects:
- kind: ServiceAccount
  name: test-sa
  namespace: rbac-wizard
roleRef:
  kind: ClusterRole
  name: powergroup
  apiGroup: rbac.authorization.k8s.io
EOF
		

Анализ конфигурации RBAC без RBAC Wizard

Давайте посмотрим, как можно решить задачу без RBAC Wizard.

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

			# Для Role.
kubectl get rolebindings -A -o json | jq '.items[] | select(.roleRef.name=="your-role-name")'

# Для ClusterRole.
kubectl get clusterrolebindings -o json | jq '.items[] | select(.roleRef.name=="your-cluster-role-name")'

		

Пример ответа:

			kubectl get clusterrolebindings -o json | jq '.items[] | select(.roleRef.name=="powergroup")'
{
  "apiVersion": "rbac.authorization.k8s.io/v1",
  "kind": "ClusterRoleBinding",
  "metadata": {
    "name": "powergroup",
  },
  "roleRef": {
    "apiGroup": "rbac.authorization.k8s.io",
    "kind": "ClusterRole",
    "name": "powergroup"
  },
  "subjects": [
    {
      "kind": "ServiceAccount",
      "name": "test-sa",
      "namespace": "rbac-wizard"
    }
  ]
}

		

Если же требуется найти все роли, которые закреплены за пользователем или ServiceAccount’ом, запрос будет таким:

			# Для Role.
kubectl get rolebindings --all-namespaces -o json | jq '.items[] | select(.subjects[]?.name == "имя-пользователя-либо-сервис-аккаунт") | {namespace: .metadata.namespace, roleName: .roleRef.name}'

# Для ClusterRole. 
kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[]?.name == "имя-пользователя-либо-сервис-аккаунт") | {roleName: .roleRef.name}'
		

Пример ответа:

			kubectl get clusterrolebindings -o json | jq '.items[] | select(.subjects[]?.name == "test-sa") | {namespace: .metadata.namespace, roleName: .roleRef.name}'
{
  "namespace": null,
  "roleName": "powergroup"
}

		

Если мы получим большой объём ролей и связей с пользователями или ServiceAccount’ами, то придётся заносить все информацию в таблицу для дальнейшего анализа. Держать в голове все связи невозможно — такой метод сбора информации займёт очень много времени.

Анализ конфигурации с помощью RBAC Wizard

Теперь перейдём в браузере по указанному нами адресу в поле host спеки ингресса rbac-wizard и посмотрим, удобнее ли анализировать конфигурации с RBAC Wizard.

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

Обзор RBAC Wizard — инструмента для анализа и визуализации конфигурации RBAC в кластере Kubernetes 1
Так отображается наша кластерная роль в таблице

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

Обзор RBAC Wizard — инструмента для анализа и визуализации конфигурации RBAC в кластере Kubernetes 2

Под таблицей отображается RBAC Map — граф с визуализацией объектов RBAC и их связей. В фильтре можно выбирать ClusterRoleBinding, RoleBinding и посмотреть их взаимосвязь с Role, ClusterRole, User или Group:

Обзор RBAC Wizard — инструмента для анализа и визуализации конфигурации RBAC в кластере Kubernetes 3
Так RBAC Wizard отображает связи нашей ClusterRole и ClusterRoleBindings

А так выглядят более сложные связи:

Обзор RBAC Wizard — инструмента для анализа и визуализации конфигурации RBAC в кластере Kubernetes 4
Это один из наших тестовых кластеров

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

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

Заключение

Буду краток. RBAC Wizard — простой как молоток инструмент. Но он неплохо упрощает жизнь, позволяя быстро проводить аудит ролей в кластере Kubernetes.

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

Минутка рекламы

Если перед вами стоят задачи по переходу на Kubernetes, внедрению DevOps-практик или сокращению Time to Market, а своих ресурсов и опыта недостаточно, обращайтесь к нам во «Флант». Мы внедрим проверенные технологии, возьмём на себя полный цикл работ и будем сопровождать вашу инфраструктуру силами выделенной команды с гарантиями по SLA.

Следите за новыми постами
Следите за новыми постами по любимым темам
228 открытий2К показов