Реализация модели доступа на основе ролей в Nova на основе групп LDAP
Данный сценарий описывает реализацию политики доступа на основе ролей в Nova Container Platform для доступа к ресурсам kubernetes в воображаемом процессе разработки приложения. Для этого проектируется и реализуется ряд уровней доступа, соответствующих различных ролям в команде разработки.
В Nova уже имеются средства для настройки аутентификации и авторизации в режиме единого окна. Задача реализации матрицы доступа сводится к подключению провайдера аутентификации и конфигурации соответствующих ролей внутри kubernetes и StarVault. В примере используется LDAP в качестве провайдера аутентификации.
1. Проектирование модели доступа на основе ролей
В примере предполагается наличие ролей QA, DevOps, разработчиков, технических менеджеров, служебных учетных записей конвейера разработки и администраторов кластера.
Атрибутирование ролей пользователям осуществляется с помощью групп Active Directory или другого LDAP-каталога.
Ниже представлена таблица соответствия ролей воображаемой модели доступа ролям Kubernetes.
| Роль в модели | Описание | Соответствие кластерным ролям Kubernetes в каждом пространстве имён | Соответствие кластерным ролям в масштабе кластера | Группа в LDAP-каталоге |
|---|---|---|---|---|
QA |
Получать список и содержимое объектов, журналы контейнеров, но не секреты. |
|
|
|
DevOps |
Изменять и удалять объекты, кроме ресурсных квот. |
|
|
|
Разработчики |
Изменять объекты, кроме секретов. |
|
|
|
Технические менеджеры |
Дополнительно к правам DevOps: изменять ресурсные квоты, создавать и удалять. |
|
|
|
Служебные учетные записи |
Дополнительно к правам технических менеджеров: создавать CRD. |
|
|
отсутствует, создаются служебные учетные записи kubernetes + |
Администраторы кластера |
Полный доступ, распределение квот, сетевых политик и политик доступа. |
|
|
Особенности использования встроенных ролей на разных уровнях пространства имен и кластера:
-
роль
viewна кластерном уровне используется, чтобы избежать ошибок непредвиденных ошибок доступа, мешающих осуществлять навигацию внутри веб-консоли или получать базовые списки с помощью утилитыkubectl; -
использования кластерных ролей в пространстве имен требует создания объекта
RoleBinding, а на уровне кластера -ClusterRoleBinding; -
в данном примере для простоты конфигурации используются только кластерные роли
ClusterRole, подробнее о средствах реализации доступа на основе ролей можно ознакомиться в разделе Использование RBAC для разграничения доступа в Kubernetes.
2. Создание групп в LDAP-каталоге
Создайте группы в LDAP-каталоге и внесите в них соответствующих пользователей. Ниже представлен шаблон таблицы для создания групп, заполненный данными для примера сценария.
| Группа | Группа в LDAP | Члены группы |
|---|---|---|
Администраторы кластера |
auth-demo-sre |
ivan-petrov |
Члены вымышленной проектной группы |
auth-demo-project-users |
auth-demo-qa-user, auth-demo-devops-user, auth-demo-dev-user, auth-demo-owner-user |
QA-инженеры проекты |
auth-demo-qa-users |
auth-demo-qa-user |
DevOps-инженеры проекта |
auth-demo-devops-users |
auth-demo-devops-user |
Технический менеджер проекта |
auth-demo-owner-users |
auth-demo-owner-user |
3. Конфигурация метода аутентификации
Выполните действия, согласно инструкции.
-
Для каждой роли сопоставьте группу пользователей LDAP согласно разделу Настройка групп пользователей.
-
Для каждой созданной группы сопоставьте oidc assignment согласно разделу Настройка назначений.
-
Единожды разрешите доступ в приложения Nova по созданному сопоставлению согласно разделу* Привязка назначений к приложениям
4. Создание сервисной учетной записи
В целях демонстрации в данном примере используется вымышленная сервисная учетная запись. Чтобы ее использовать, создайте следующий объект в kubernetes.
apiVersion: v1
kind: ServiceAccount
metadata:
name: ci-service-account
namespace: auth-demo-namespace
О получении реквизитов доступа этой учетной записи можно подробнее ознакомиться в статье базы знаний "Создание учетной записи для не интерактивного доступа".
5. Конфигурация модели RBAC в kubernetes
В данном примере используется имя auth-demo-namespace. Перед началом работы замените имена auth-demo-namespace, а также наименования групп на соответствующие вашему сценарию
-
Выдайте права администраторам кластера. Для этого создайте следующий объект в kubernetes:
-
ClusterRoleBindingдля администраторов кластера.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: cluster-admin-binding roleRef: name: cluster-admin kind: ClusterRole subjects: - kind: Group name: auth-demo-sre apiGroup: rbac.authorization.k8s.ioВ дополнение ко встроенным кластерным ролям в данной модели используются специфичные для сценария роли. Поэтому в начале процесса конфигурации kubernetes необходимо создать эти роли. Для этого создайте следующие объекты в kubernetes:
-
ClusterRoleдля технических менеджеров.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: tech-man rules: - apiGroups: [""] resources: ["resourcequotas", "resourcequotas/status"] verbs: ["create", "get", "list", "watch", "update", "delete"] -
ClusterRoleдля служебных учетных записей.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: ci-job rules: - apiGroups: ["apiextensions.k8s.io"] resources: ["customresourcedefinitions"] verbs: ["create", "get", "list", "watch", "update"]
-
-
Сопоставьте созданные роли группам в конкретных пространствах имён:
-
RoleBindingдля QA в пространстве именauth-demo-namespace.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: qa-view-binding namespace: auth-demo-namespace roleRef: name: view kind: ClusterRole subjects: - kind: Group name: auth-demo-qa-users apiGroup: rbac.authorization.k8s.io -
RoleBindingдля DevOps в пространстве именauth-demo-namespace.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: devops-admin-binding namespace: auth-demo-namespace roleRef: name: admin kind: ClusterRole subjects: - kind: Group name: auth-demo-devops-users apiGroup: rbac.authorization.k8s.io -
RoleBindingдля разработчиков в пространстве именauth-demo-namespace.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: dev-edit-binding namespace: auth-demo-namespace roleRef: name: edit kind: ClusterRole subjects: - kind: Group name: auth-demo-dev-users apiGroup: rbac.authorization.k8s.io -
RoleBindingдля технических менеджеров в пространстве именauth-demo-namespace.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: tech-man-admin-binding namespace: auth-demo-namespace roleRef: name: admin kind: ClusterRole subjects: - kind: Group name: auth-demo-owner-users apiGroup: rbac.authorization.k8s.io -
RoleBindingдля служебной учетной записи в пространстве именauth-demo-namespace.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: ci-admin-binding namespace: auth-demo-namespace roleRef: name: admin kind: ClusterRole subjects: - kind: ServiceAccount name: ci-service-account namespace: auth-demo-namespace -
RoleBindingдля технических менеджеров в пространстве именauth-demo-namespace.apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: tech-man-quota-binding namespace: auth-demo-namespace roleRef: name: tech-man kind: ClusterRole subjects: - kind: Group name: auth-demo-owner-users apiGroup: rbac.authorization.k8s.io
-
-
Выдайте права на уровне кластера:
-
ClusterRoleBindingдля QA на уровне кластера.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: auth-demo-view-cluster-binding roleRef: name: view kind: ClusterRole subjects: - kind: Group name: auth-demo-project-users apiGroup: rbac.authorization.k8s.io -
ClusterRoleBindingдля служебных учетных записей на уровне кластера.apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: ci-job-cluster-binding roleRef: name: ci-job kind: ClusterRole subjects: - kind: ServiceAccount name: ci-service-account namespace: auth-demo-namespace
-