Identity and Access Management
Identity and Access Management — компонент для управления доступом пользователей и сервисных аккаунтов к ресурсам платформы. Компонент обеспечивает централизованную аутентификацию и авторизацию во всех сервисах платформы.
Основные возможности
Управление пользователями
Identity and Access Management поддерживает несколько способов управления пользователями:
- Локальные пользователи — создание и управление пользователям происходит непосредственно в Identity and Access Management. Подходит для небольших команд или тестовых окружений.
- Внешние провайдеры идентификации — интеграция с корпоративными системами управления пользователями по протоколу SAML. Позволяет использовать существующую инфраструктуру аутентификации.
Управление группами
Группы позволяют упростить управление правами доступа для команд пользователей. С помощью Identity and Access Management доступны:
- Создание локальных групп в Identity and Access Management.
- Управление членством пользователей в группах.
- Маппинг групп из внешних провайдеров идентификации на внутренние группы.
- Назначение ролей группам вместо отдельных пользователей.
Управление доступом
Identity and Access Management предоставляет гибкую систему управления правами доступа:
- Роли — набор разрешений для выполнения операций с ресурсами.
- Назначение ролей — выдача ролей пользователям, группам и сервисным аккаунтам на различных уровнях:
- Уровень организации — доступ ко всем ресурсам.
- Уровень проекта — доступ к ресурсам в конкретном пространстве имен.
- Уровень сервисных ресурсов — доступ к ресурсам сервисов.
Сервисные аккаунты
Сервисные аккаунты используются для автоматизации и межсервисного взаимодействия:
- Создание сервисных аккаунтов для приложений и сервисов.
- Генерация API-ключей для аутентификации.
- Назначение ролей сервисным аккаунтам.
- Интеграция с Kubernetes ServiceAccount.
Начало работы
Первый вход
При развертывании платформы автоматически создается администратор с логином admin@stackland. Временный пароль сохраняется в секрете admin-password в проекте stackland-secrets. При первом входе необходимо изменить пароль.
Создание пользователей
Администратор может создавать новых пользователей двумя способами:
- Создать локального пользователя непосредственно в Identity and Access Management через веб-интерфейс.
- Через внешний провайдер идентификации – настроить подключение к SAML-провайдеру. Пользователи будут автоматически создаваться при первом входе.
Назначение ролей
После создания пользователя ему можно назначить роли на различных уровнях:
- На уровне организации — для доступа ко всем ресурсам платформы.
- На уровне проекта — для доступа к ресурсам в конкретном пространстве имен.
- На уровне сервисных ресурсов — для доступа к специфичным ресурсам сервисов.
Примеры использования
Создание локального пользователя
Локальные пользователи создаются через IAM API. Для создания пользователя необходимо указать:
- Имя пользователя в формате
username@stackland. - Полное имя пользователя.
- Имя.
- Фамилию.
- Email.
- Пароль.
После создания пользователь может войти в систему, используя указанные учетные данные.
Назначение роли на уровне организации
Для назначения роли пользователю на уровне организации используется ресурс ClusterAccessBinding:
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: ClusterAccessBinding
metadata:
name: user-admin-role
spec:
# Роль для назначения
roleID: "admin"
# Субъект, которому назначается роль
subject:
kind: User
name: "username@stackland"
Где:
roleID— идентификатор роли IAM (например,admin,editor,viewer). Обязательное поле. Должен соответствовать существующей роли в Identity and Access Management.subject— субъект, которому назначается роль. Обязательное поле.kind— тип субъекта. Допустимые значения:User,Group,ServiceAccount,FederatedUser. Обязательное поле.name— имя субъекта. Для пользователей — имя пользователя из Identity and Access Management. Обязательное поле.
Назначение роли группе
Для назначения роли группе пользователей используется тот же ресурс ClusterAccessBinding с указанием типа субъекта Group:
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: ClusterAccessBinding
metadata:
name: stackland-cluster-admins
spec:
roleID: admin
subject:
kind: Group
name: stackland-cluster-admins
Где:
roleID— идентификатор роли IAM. Обязательное поле.subject.kind— тип субъектаGroupдля назначения роли группе. Обязательное поле.subject.name— имя группы в Identity and Access Management. Обязательное поле.
Назначение роли на уровне пространства имен
Для назначения роли на уровне пространства имен используется ресурс AccessBinding:
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: AccessBinding
metadata:
name: bob-is-storage-admin
namespace: warehouse
spec:
roleID: storage.admin
subject:
kind: User
name: bob@stackland
Описание полей:
metadata.namespace— пространство имен, на уровне которого назначается роль. Роль будет действовать на folder, соответствующий этому проекту. Обязательное поле.roleID— идентификатор роли IAM. Обязательное поле.subject— субъект, которому назначается роль. Обязательное поле.kind— тип субъекта. Допустимые значения:User,Group,ServiceAccount,FederatedUser. Обязательное поле.name— имя субъекта. Обязательное поле.
Назначение роли сервисному аккаунту
Для назначения роли сервисному аккаунту необходимо указать тип субъекта ServiceAccount и проект, в котором находится сервисный аккаунт:
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: AccessBinding
metadata:
name: sa-storage-admin
namespace: my-namespace
spec:
roleID: "storage.admin"
subject:
kind: ServiceAccount
name: "my-service-account"
namespace: "my-namespace"
Где:
metadata.namespace— проект, на уровне которого назначается роль. Обязательное поле.roleID— идентификатор роли IAM. Обязательное поле.subject— субъект, которому назначается роль. Обязательное поле.kind— тип субъектаServiceAccount. Обязательное поле.name— имя Kubernetes ServiceAccount. Обязательное поле.namespace— проект, в котором находится ServiceAccount. Обязательное поле для типаServiceAccount.
Настройка внешнего провайдера идентификации
Для интеграции с внешним провайдером идентификации по протоколу SAML используется ресурс SAMLFederation:
apiVersion: iam.stackland.yandex.cloud/v1alpha1
kind: SAMLFederation
metadata:
name: corporate-idp
spec:
# Описание федерации
description: "Corporate Identity Provider"
# URL провайдера идентификации
issuer: "https://idp.company.com/realms/main"
# URL для Single Sign-On
ssoUrl: "https://idp.company.com/realms/main/protocol/saml"
# Тип привязки SAML
ssoBinding: POST
# Автоматическое создание пользователей при первом входе
autoCreateAccountOnLogin: true
# Время жизни cookie сессии
cookieMaxAge: "12h"
# Сертификаты для проверки подписи SAML-ответов
certificates:
- name: "idp-signing-cert"
description: "IdP signing certificate"
data: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
# Маппинг внешних групп на внутренние
groupMapping:
enabled: true
mapping:
- externalId: "idp-admins"
internalName: "stackland-cluster-admins"
- externalId: "idp-developers"
internalName: "developers"
Где:
description— описание федерации. Необязательное поле. Максимальная длина 256 символов.issuer— идентификатор провайдера идентификации (Entity ID). Обычно это URL. Обязательное поле.ssoUrl— URL для Single Sign-On в провайдере идентификации. Обязательное поле.ssoBinding— тип привязки SAML. Допустимые значения:POST,REDIRECT. По умолчаниюPOST.autoCreateAccountOnLogin— автоматически создавать учетные записи пользователей при первом входе. По умолчаниюfalse.cookieMaxAge— время жизни cookie сессии. Допустимый диапазон от 10 минут до 12 часов. Поддерживает формат Go duration:2h,120m,7200s. По умолчанию12h.caseInsensitiveNameIds— обрабатывать SAML NameID без учета регистра. По умолчаниюfalse.securitySettings— настройки безопасности SAML. Необязательное поле.encryptedAssertions— требовать зашифрованные SAML-утверждения от провайдера. По умолчаниюfalse.forceAuthn— требовать повторную аутентификацию при каждом запросе. По умолчаниюfalse.
certificates— список сертификатов для проверки подписи SAML-ответов. Необязательное поле.name— имя сертификата. Обязательное поле.description— описание сертификата. Необязательное поле.data— сертификат в формате PEM. Обязательное поле.
groupMapping— настройки маппинга групп. Необязательное поле.enabled— включить маппинг групп. По умолчаниюfalse.mapping— список соответствий внешних и внутренних групп. Необязательное поле.externalId— идентификатор группы в провайдере идентификации. Обязательное поле.internalName— имя группы в Identity and Access Management. Группа должна существовать. Обязательное поле.
Для синхронизации пользователей и групп из Active Directory используется встроенный в Identity and Access Management агент синхронизации.
Чтобы настроить синхронизацию:
-
Создайте секрет с паролями для подключения к Active Directory:
apiVersion: v1 kind: Secret metadata: name: ad-secret namespace: default stringData: drsr-password: "<пароль_DRSR>" ldap-password: "<пароль_LDAP>" -
Настройте ресурс
IAMConfig:apiVersion: stackland.yandex.cloud/v1alpha1 kind: IAMConfig metadata: name: main spec: enabled: true settings: activeDirectorySync: enabled: true settings: userpoolDomain: "<домен_пула_пользователей>" drsr: host: "<хост_контроллера_домена>" username: "<имя_пользователя_DRSR>" passwordRef: key: drsr-password name: ad-secret namespace: default ldap: host: "ldaps://<хост_контроллера_домена>:<порт>" username: "<имя_пользователя_LDAP>" passwordRef: key: ldap-password name: ad-secret namespace: default certificate: "<сертификат_CA>" insecureSkipVerify: false interval: "60s" filter: domain: "<имя_домена_в_Active_Directory>" groups: [] organizationUnits: [] allowToCaptureUsers: true allowToCaptureGroups: true userAttributeMapping: [] groupAttributeMapping: [] removeUserBehavior: "remove"Где:
enabled— включить синхронизацию с Active Directory. Обязательное поле.userpoolDomain— домен, под которым пользователи из Active Directory будут отображаться в платформе. Обязательное поле.drsr— настройки подключения по протоколу DRSR. Обязательное поле.host— хост контроллера домена. Обязательное поле.username— имя пользователя. Обязательное поле.passwordRef— ссылка на секрет с паролем. Обязательное поле.name— имя секрета. Обязательное поле.namespace— пространство имен секрета. Обязательное поле.key— ключ секрета. Обязательное поле.
ldap— настройки подключения по протоколу LDAP. Обязательное поле.host— адрес контроллера домена в форматеldap://илиldaps://. Обязательное поле.username— имя пользователя. Обязательное поле.passwordRef— ссылка на секрет с паролем. Обязательное поле.name— имя секрета. Обязательное поле.namespace— пространство имен секрета. Обязательное поле.key— ключ секрета. Обязательное поле.
certificate— сертификат CA в формате PEM для проверки TLS-соединения. Необязательное поле.insecureSkipVerify— отключить проверку TLS-сертификата сервера. Рекомендуется не включать.
interval— интервал инкрементальной синхронизации. Обязательное поле.filter— фильтрация объектов для синхронизации. Необязательное поле.domain— имя домена в Active Directory. Необязательное поле.groups— список групп для синхронизации. Необязательное поле.organizationUnits— список организационных единиц для синхронизации. Необязательное поле.
allowToCaptureUsers— параметр, позволяющий изменять существующего пользователя пула при совпадении его логина с логином пользователя Active Directory, которого требуется синхронизировать.allowToCaptureGroups— параметр, позволяющий изменять существующую группу пользователей при совпадении ее имени с именем группы в Active Directory, которую требуется синхронизировать.userAttributeMapping— переопределение маппинга атрибутов пользователей. Необязательное поле.groupAttributeMapping— переопределение маппинга атрибутов групп. Необязательное поле.removeUserBehavior— поведение при удалении пользователя из Active Directory. Допустимые значения:remove,block.