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

Всем привет! На связи Максим Кульвинский, DevOps-инженер компании «Флант». Сегодня поговорим про RBAC Wizard — Open Source-инструмент для визуализации системы доступов на основе ролей (Role-Based Access Control, RBAC) в Kubernetes-кластере. Установим его, посмотрим на возможности и поймём, в каких случаях он может быть полезен.

Описание RBAC Wizard

Утилита наблюдает за ресурсами типа RoleBinding и ClusterRoleBinding и на основе этой информации рисует зависимости с Role, ClusterRole, User или Group в виде графов, которые можно все вместе или выборочно объединять в одну визуальную карту. То есть она показывает в графической форме, какие RBAC есть в кластере и как они связаны, что делает контроль над доступами более понятным. Утилита делает это каждый раз при входе или обновлении в пользовательском интерфейсе. 

19 мая 2024 года на просторах GitHub появился первый релиз rbac-wizard v0.0.1. Спустя ещё 6 релизов вышел rbac-wizard-0.1.0, где добавили Helm-чарт, с помощью которого мы и будем выкатывать утилиту в кластер Kubernetes. Помимо этого, доступна установка с помощью Homebrew и go install.

Установка RBAC Wizard

Устанавливать RBAC Wizard будем в небольшом Deckhouse-кластере. На странице проекта описана классическая установка с помощью Helm:

# to add the Helm repository
helm repo add rbac-wizard https://rbac-wizard.pehli.dev
# to pull the latest Helm charts
helm pull rbac-wizard/rbac-wizard
# to install the Helm charts with the default values
helm install rbac-wizard rbac-wizard/rbac-wizard --namespace rbac-wizard --create-namespace

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

helm repo add rbac-wizard https://rbac-wizard.pehli.dev
helm repo update
helm fetch rbac-wizard/rbac-wizard --untar

Его содержимое кладу в директорию .helm, добавляю .gitlab-ci.yml и werf.yaml, так как выкатывать буду с помощью werf — CLI-инструмента для реализации полного цикла CI/CD. Также сделал certificate.yaml с заказом LE-сертификата, потому что по умолчанию он не предусмотрен. В итоге получаю такой репозиторий:

├── .gitignore
├── .gitlab-ci.yml
├── .helm
│   ├── Chart.yaml
│   ├── templates
│   │   ├── _helpers.tpl
│   │   ├── certificate.yaml
│   │   ├── clusterrole.yaml
│   │   ├── clusterrolebinding.yaml
│   │   ├── deployment.yaml
│   │   ├── hpa.yaml
│   │   ├── ingress.yaml
│   │   ├── service.yaml
│   │   ├── serviceaccount.yaml
│   │   └── tests
│   │       └── test-connection.yaml
│   └── values.yaml
├── README.md
└── werf.yaml

Минимально правлю values.yaml, а именно следующие поля:

  • ingress.annotations.kubernetes.io/ingress.class — указываю нужный;

  • ingress.hosts.host — указываю нужный; 

  • ingress.tls — указываю нужный хост и имя секрета, который создал ранее;

  • resources — указываю дефолтные 100m/128Mi.

Выкатываю в кластер и захожу на указанный домен.

Обзор возможностей RBAC Wizard

Интерфейс крайне прост и минималистичен. На основной странице Dashboard есть два блока:

  1. RBAC Table — таблица, где перечислены ClusterRoleBinding и RoleBinding с основными параметрами (roleRef и subjects). Есть возможность сортировать и убирать колонки, а также смотреть ресурс в YAML-формате:

  2. RBAC Map — сама визуализация RBAC. По умолчанию отображается полная карта со всеми правилами, которую можно использовать разве что для общего представления их количества и взаимосвязей:

    Поэтому аналогично первому блоку можно выбирать необходимые ClusterRoleBinding, RoleBinding и смотреть их связь с Role, ClusterRole, User или Group:

    Элементы можно интерактивно перемещать курсором, но в ситуации, когда их слишком много, это особо не помогает и получается «каша»:

Также есть отдельная вкладка «What If?» — здесь можно вписать свой манифест ClusterRoleBinding или RoleBinding и получить его визуализацию:

Стоит отметить, что изначально такого функционала не было. Идею предложил пользователь Reddit в комментарии к посту о первом релизе инструмента. Автору она понравилась, и он её довольно быстро реализовал — это вселяет некоторую надежду, что инструмент будет поддерживаться и развиваться, хоть последний релиз был 1 декабря 2024 года.

Заключение

RBAC Wizard — это интуитивно понятный инструмент для визуализации прав в кластере. Хорошо подходит для небольших кластеров — можно увидеть общую картину, проверить конкретные роли. А в больших кластерах с сотнями и тысячами ролей он может выступать в качестве инструмента точечной диагностики, чтобы найти нужный субъект и посмотреть его связи.

Я думаю, что этот инструмент может хорошо подойти для:

  • новичков, которые осваивают основы RBAC;

  • администраторов, DevOps-инженеров, специалистов по информационной безопасности, которым нужно быстро разобраться в правах в кластере;

  • команд, которые проводят аудит кластера.

Однако стоит учитывать, что утилита не отображает, какие именно права (verbs) есть у той или иной роли (list, create, update, delete и т. д.), — я бы отнёс это к основному недостатку. При наличии такого функционала можно было бы реализовать поиск/фильтрацию по правам, что довольно полезно. Поэтому смотреть права нужно будет вручную в кластере либо с помощью дополнительных инструментов, например rakkess.

Подводя итог, выделил следующие плюсы:

  • простая установка с помощью Helm;

  • понятный интерфейс и визуализация;

  • возможность тестировать и визуализировать свои правила через «What If?»;

  • подходит для быстрого анализа и обучения.

И минусы: 

  • не отображаются конкретные права (verbs) в ролях;

  • отсутствует экспорт схем в PNG/PDF, что было бы удобно для написания документации или аудита кластера.

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

P. S. 

Читайте также в нашем блоге:

Комментарии (0)