[Документация Yandex Cloud](../index.md) > [Yandex Cloud Stackland](index.md) > Управление доступом

# Управление доступом

В Stackland управление доступом включает аутентификацию и авторизацию. Платформа поддерживает два механизма авторизации: Kubernetes RBAC и IAM AccessBinding.

## Аутентификация {#authentication}

Аутентификация в Stackland построена на базе Identity and Access Management. Identity and Access Management выступает единой точкой аутентификации для всех компонентов платформы.

### Способы аутентификации {#auth-methods}

Платформа поддерживает следующие способы аутентификации:

* **Локальные пользователи** — учетные записи, созданные непосредственно в Identity and Access Management. Подходят для небольших команд и тестовых окружений.
* **Федеративные пользователи** — учетные записи из корпоративного провайдера идентификации (IdP). Поддерживаются протоколы SAML и LDAP.
* **Сервисные аккаунты** — учетные записи для автоматизации и межсервисного взаимодействия. Используют долгоживущие токены или API-ключи.

### Аутентификация в веб-консоли {#web-auth}

Веб-консоль Stackland интегрирована с Identity and Access Management. При входе пользователь перенаправляется на страницу аутентификации, где может выбрать способ входа:

* ввести логин и пароль локальной учетной записи;
* войти через корпоративный IdP (если настроена федерация).

### Аутентификация в Kubernetes API {#k8s-auth}

Для доступа к Kubernetes API используется kubeconfig.

### Сервисный доступ {#service-access}

Для автоматизации (например, из CI/CD-систем) доступны два способа аутентификации:

* **Токен сервисного аккаунта** — долгоживущий токен Kubernetes ServiceAccount. Подходит для систем, которые не поддерживают обмен токенов.
* **API-ключи** — ключи, созданные через Identity and Access Management для доступа к API платформенных сервисов.

### Федерации {#federations}

Федерация позволяет использовать корпоративный провайдер идентификации для аутентификации в Stackland. Для настройки SAML-федерации используется ресурс `SAMLFederation`:

```yaml
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: SAMLFederation
metadata:
  name: corporate-idp
spec:
  issuer: "https://idp.example.com/realms/main"
  ssoUrl: "https://idp.example.com/realms/main/protocol/saml"
  ssoBinding: POST
  autoCreateAccountOnLogin: true
  cookieMaxAge: "12h"
  certificates:
    - name: "idp-signing-cert"
      data: |
        -----BEGIN CERTIFICATE-----
        ...
        -----END CERTIFICATE-----
  groupMapping:
    enabled: true
    mapping:
      - externalId: "idp-admins"
        internalName: "stackland-cluster-admins"
```

При настройке федерации можно включить маппинг групп. Группы из внешнего IdP автоматически сопоставляются с группами в Identity and Access Management.

## Авторизация {#authorization}

Stackland поддерживает два механизма авторизации, которые работают параллельно:

* **Kubernetes RBAC** — стандартный механизм управления доступом Kubernetes. Используется для управления доступом к ресурсам Kubernetes (Pod, Deployment, Service и др.).
* **IAM AccessBinding** — механизм Identity and Access Management для назначения прав субъектам на разных уровнях — кластеров, проектов и т.д.
* **Доступ к платформенным сервисам** — реализуется механизмами самих платформенных сервисов, например, проверка происходит с помощью логина и пароля самой СУБД. В компоненте [YTsaurus](concepts/components/ytsaurus.md) учетные данные администратора хранятся в Secret `ytadminsec`; для входа в веб-интерфейс пользователей также можно аутентифицировать через Identity and Access Management по OAuth.

### Kubernetes RBAC {#k8s-rbac}

Kubernetes RBAC использует роли и привязки ролей для управления доступом. Роль определяет набор разрешений (какие действия можно выполнять с какими ресурсами), а привязка назначает роль субъекту.

Стандартные ресурсы RBAC:

#|
|| Ресурс | Область действия | Описание ||
|| `ClusterRole` | Кластер | Набор разрешений на уровне кластера ||
|| `ClusterRoleBinding` | Кластер | Привязка `ClusterRole` к субъекту на уровне кластера ||
|| `Role` | Пространство имен | Набор разрешений в конкретном пространстве имен ||
|| `RoleBinding` | Пространство имен | Привязка роли к субъекту в пространстве имен ||
|#

Дополнительно Stackland предоставляет ресурсы для управления доступом на уровне проекта:

#|
|| Ресурс | Область действия | Описание ||
|| `ProjectRole` | Проект | Набор разрешений на уровне проекта ||
|| `ProjectRoleBinding` | Проект | Привязка роли к субъекту во всех пространствах имен проекта ||
|#

Подробнее о ролях проекта см. в разделе [Настроить роли проекта](operations/projects/project-roles.md).

### Привязки ролей доступа {#iam-access-binding}

Привязки ролей доступа используются для управления доступом к платформенным сервисам. Привязка связывает субъект с ролью на определенном уровне ресурсной модели.

Типы привязок:

* `ClusterAccessBinding` — привязка роли на уровне всего кластера.
* `ProjectAccessBinding` — привязка роли на уровне проекта.
* `AccessBinding` — привязка роли на уровне пространства имен.

Пример назначения IAM-роли на уровне кластера:

```yaml
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: ClusterAccessBinding
metadata:
  name: user-admin-role
spec:
  roleID: admin
  subject:
    kind: User
    name: "alice@stackland"
```

Пример назначения роли на уровне пространства имен:

```yaml
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: AccessBinding
metadata:
  name: bob-storage-admin
  namespace: my-namespace
spec:
  roleID: storage.admin
  subject:
    kind: User
    name: "bob@stackland"
```

### Типы субъектов {#subject-types}

В привязках ролей поддерживаются следующие типы субъектов:

* `User` — локальный пользователь Identity and Access Management.
* `Group` — группа пользователей в Identity and Access Management.
* `ServiceAccount` — сервисный аккаунт Kubernetes.
* `FederatedUser` — пользователь из внешнего провайдера идентификации.

## Уровни доступа {#access-levels}

Доступ можно назначать на трех уровнях [ресурсной модели](concepts/resource-model.md):

### Уровень кластера {#cluster-level}

Доступ распространяется на все ресурсы кластера Stackland.

Механизмы: `ClusterRoleBinding`, `ClusterAccessBinding`.

### Уровень проекта {#project-level}

Доступ распространяется на все пространства имен проекта. Используется для:

* Администраторов проекта.
* Участников команды, работающей с проектом.
* CI/CD-систем.

Механизмы: `ProjectRoleBinding`, `ProjectAccessBinding`.

### Уровень пространства имен {#namespace-level}

Доступ ограничен конкретным пространством имен. Используется для:

* Разработчиков, работающих с конкретным окружением.
* Сервисных аккаунтов приложений.
* Ограниченного доступа к ресурсам платформенных сервисов.

Механизмы: `RoleBinding`, `AccessBinding`.

## Примитивные роли {#primitive-roles}

В Yandex Cloud Stackland действует набор примитивных ролей, которые можно назначать пользователям и группам через RoleBinding или ClusterRoleBinding в зависимости от требуемой области доступа.

### stackland:viewer

Позволяет просматривать все основные ресурсы кластера:

* Поды, сервисы, эндпоинты, ConfigMaps.
* Деплойменты, daemonsets, statefulsets, replicasets.
* Ingress-контроллеры, сетевые политики.
* Классы хранилищ, постоянные тома.
* Ресурсы PostgreSQL и Storage.
* Сертификаты и мониторинг.

### stackland:editor

Включает все права `stackland:viewer` и дает возможность управления приложениями:

* Создание, обновление и удаление подов, сервисов и деплойментов.
* Управление ConfigMaps и секретами.
* Доступ к логам подов и форвардингу портов.
* Управление PostgreSQL и ресурсами Object Storage.
* Управление сертификатами и мониторингом.

### stackland:admin

Роль stackland:admin предоставляет полные административные права на управление всеми ресурсами и пользователями в кластере.

### stackland:auditor

Расширенные права для аудита включают все права `stackland:viewer` плюс:

* Просмотр метаданных секретов (без содержимого).
* Доступ к RBAC-ресурсам (роли и привязки прав доступа).
* Просмотр сетевых политик и политик безопасности.
* Доступ к сертификатам и их статусам.

## Что дальше {#what-is-next}

* [Создать пользователя](operations/iam/create-user.md).
* [Создать группу пользователей](operations/iam/create-group.md).
* [Подключить SAML-федерацию](operations/iam/connect-saml-federation.md).
* [Назначить права доступа](operations/iam/assign-role.md).
* [Ресурсная модель](concepts/resource-model.md).