Авторизация
Двухуровневая модель прав в DataLens
Система прав в DataLens состоит из двух уровней, которые работают вместе и определяют доступные действия для пользователя.
Первый уровень. Глобальные роли в системе
Каждому пользователю в системе назначается одна из трех глобальных ролей. Она определяет его поведение по умолчанию в системе. У администратора есть доступ к этим настройкам в разделе Service settings → Users.

Admin(администратор). По умолчанию может все: управлять пользователями, настройками, видеть и редактировать любые объекты в системе. Требует лицензии уровняCreator.Creator(создатель). Основная роль для аналитиков. По умолчанию может создавать подключения, датасеты и любые другие объекты в корне DataLens или там, где ему дадут права. Требует лицензии уровняCreator.Visitor(читатель). Роль для пользователей дашбордов и отчетов. По умолчанию может только просматривать дашборды, к которым дали доступ. Не может ничего создавать. Требует лицензии уровняViewer.
Второй уровень. Права доступа к объектам
Доступ к подключениям, датасетам, чартам и дашбордам настраивается на уровне воркбуков и коллекций, внутри которых хранятся эти объекты. Предоставляя доступ к воркбуку или коллекции, вы даете аналогичный доступ ко всем объектам внутри этого воркбука или коллекции — это базовая настройка прав доступа.
Продвинутая настройка позволяет создавать общие объекты — подключения и датасеты, оригиналы которых можно привязывать к нескольким воркбукам, чтобы их могли использовать разные команды. При этом доступы к оригинальным объектам регулируются специальными правами.
Как это работает вместе?
Права на объекты могут расширять возможности, заданные глобальной ролью, но только в пределах этого объекта.
Пример
Если у пользователя глобальная роль Visitor, по умолчанию он не может ничего создавать. Представьте, что ему дают роль Редактирование на конкретный воркбук Отчеты по продажам.
Что теперь может этот пользователь:
- Создавать и редактировать дашборды и чарты внутри воркбука Отчеты по продажам.
- Просматривать другие доступные объекты в системе.
Что НЕ может пользователь:
- Создать новый воркбук Мои отчеты, так как его глобальная роль
Visitorзапрещает создание объектов на верхнем уровне. - Создать новое подключение к базе данных, так как это глобальное действие, требующее глобальной роли
CreatorилиAdmin.
Эта модель позволяет гибко управлять доступом: давать пользователям права на создание контента только в их песочницах без засорения глобального пространства и выдачи лишних прав доступа.
Настройка провайдеров аутентификации
Интеграция с внешними системами настраивается через JSON-файл, который передается в ./init.sh с помощью флага --auth-providers-config.
./init.sh --auth-providers-config ./my-auth-providers.json
Структуру этого файла можно посмотреть в примере ./help/auth-provider-config.example.json.
Интеграция с LDAP на примере Active Directory
Рассмотрите самый частый сценарий для корпоративных сред.
В JSON-файле нужно описать, как DataLens должен находить и аутентифицировать пользователей в LDAP-каталоге.
Пример фрагмента конфигурации:
const adConfig = {
slug: 'active-directory',
title: 'Active Directory',
type: 'ldap',
defaultRole: 'datalens.visitor',
config: {
url: 'ldap://ad.example.com:389',
bindDN: 'CN=Service Account,OU=Service Accounts,DC=example,DC=com',
bindCredentials: 'service_account_password',
searchBase: 'OU=Users,DC=example,DC=com',
searchFilter: '(&(objectClass=user)(sAMAccountName={{username}}))',
groupSearchBase: 'OU=Groups,DC=example,DC=com',
groupSearchFilter: '(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={{dn}}))',
groupDnProperty: 'dn',
searchScope: 'sub',
groupSearchScope: 'sub',
userAttributes: {
userId: 'sAMAccountName',
login: 'sAMAccountName',
email: 'mail',
firstName: 'givenName',
lastName: 'sn',
},
groupAttributes: {
groupId: 'dn',
title: 'cn',
},
roleToGroupId: {
'datalens.admin': 'CN=DatalensAdmins,OU=Groups,DC=example,DC=com',
'datalens.creator': 'CN=DatalensCreators,OU=Groups,DC=example,DC=com',
},
syncUserRoles: true,
syncUserGroups: true,
},
};
Отладка с ldapsearch
Прежде чем применять конфигурацию, проверьте ее параметры с помощью утилиты ldapsearch, используя свои значения host, cn, dc, ou.
# Поиск пользователя
ldapsearch \
-H ldap://ldap.example.com:389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=users,dc=example,dc=org \
"(uid=bob)"
# Поиск групп пользователя
ldapsearch \
-H ldap://ldap.example.com:389 \
-x \
-D cn=admin,dc=example,dc=org \
-w admin \
-b ou=groups,dc=example,dc=org \
"(&(objectClass=groupOfNames)(member=uid=bob,ou=users,dc=example,dc=org))"
Если команды возвращают данные — ваши параметры верны, можно применять конфигурацию.
Интеграция по протоколу OpenID Connect (OIDC)
OIDC — это современный стандарт, используемый Keycloak, ADFS и другими IdP. Настройка проще, чем у LDAP.
{
slug: 'keycloak', // Уникальный идентификатор провайдера
title: 'Keycloak', // Отображаемое название провайдера
type: 'oidc', // Тип провайдера (должен быть 'oidc')
defaultRole: 'datalens.visitor', // Роль по умолчанию для новых пользователей
config: {
// Параметры подключения к OIDC-серверу
issuer: 'https://keycloak.example.org/realms/datalens-enterprise/.well-known/openid-configuration', // URL OIDC-сервера
clientId: 'datalens', // Идентификатор клиента
clientSecret: 'password', // Секрет клиента
codeChallengeMethod: 'S256', // Метод PKCE (Proof Key for Code Exchange)
scope: ['openid', 'profile', 'email', 'roles', 'groups'], // Запрашиваемые области доступа
// Маппинг атрибутов пользователя (опционально)
userAttributes: {
userId: 'sub', // Атрибут для идентификатора пользователя (по умолчанию 'sub')
login: 'preferred_username', // Атрибут для логина пользователя (по умолчанию 'preferred_username')
email: 'email', // Атрибут для адреса электронной почты пользователя (по умолчанию 'email')
firstName: 'given_name', // Атрибут для имени пользователя (по умолчанию 'given_name')
lastName: 'family_name', // Атрибут для фамилии пользователя (по умолчанию 'family_name')
},
// Настройка ролей (опционально)
roles: {
path: 'resource_access.datalens.roles', // Путь к ролям в userinfo
targetType: 'array-of-strings', // Тип данных ролей
mapping: {
'datalens.admin': 'client.datalens.admin', // Маппинг ролей
'datalens.creator': 'client.datalens.creator', // Маппинг ролей
'datalens.visitor': 'client.datalens.visitor', // Маппинг ролей
},
},
syncUserRoles: true, // Синхронизировать роли пользователя при каждом входе
// Настройка групп (опционально)
groups: {
path: 'groups', // Путь к группам в userinfo
targetType: 'array-of-objects', // Тип данных групп
mapping: { // Маппинг атрибутов группы (только для 'array-of-objects')
groupId: 'id', // Атрибут для идентификатора группы
title: 'name', // Атрибут для названия группы
},
},
syncUserGroups: true, // Синхронизировать группы пользователя при каждом входе
}
}
issuer — это базовый URL вашего OIDC-провайдера, откуда DataLens сможет автоматически получить всю информацию: адреса эндпоинтов авторизации, токенов и так далее.
Важность UI_APP_ENDPOINT (ingress.domain)
При использовании OIDC или SAML ваш провайдер аутентификации должен знать, куда перенаправить пользователя после успешного входа. Этот адрес и есть публичный URL вашего DataLens. Система берет его из параметра ingress.domain в values.yaml.
Если ingress.domain не совпадает с реальным адресом, по которому пользователи заходят на DataLens, авторизация не будет работать — ошибка redirect_uri_mismatch.
Совет
Рекомендуется чистить куки при изменении домена, на котором развернут DataLens.
Автоматическая синхронизация групп
Вы можете настроить DataLens так, чтобы он автоматически добавлял пользователя в определенные группы на основе его атрибутов в системе LDAP. Это можно реализовать с помощью скрипта idp-sync.js, который есть в директории help.
Это позволяет централизованно управлять правами доступа через группы Active Directory, а не назначать права каждому пользователю в DataLens вручную.
Для более сложных сценариев используется отдельный Node.js-скрипт, который работает с API DataLens. Это продвинутый уровень, выходящий за рамки базовой настройки.
Скрипты для синхронизации с внешним IdP и подробности их использования можно найти в статье Синхронизация с внешним IdP.
Кейс
Пользователю назначена глобальная роль Visitor. Ему дали роль Редактирование на воркбук Маркетинг. Какие действия он сможет выполнить? Выберите два верных ответа:
- Создать новый дашборд в воркбуке Маркетинг.
- Создать новое подключение к базе данных.
- Создать новый воркбук Мои личные отчеты.
- Просматривать дашборды в воркбуке Продажи, если есть доступ к просмотру.
Узнать ответ
-
Создать новый дашборд в воркбуке Маркетинг
Верно. Роль
Редактированиена воркбук позволяет создавать и редактировать объекты внутри него, расширяя глобальную рольVisitor. -
Создать новое подключение к базе данных
Неверно. Создание подключений — это глобальное действие, которое требует глобальной роли
CreatorилиAdmin. Его глобальная рольVisitorэто запрещает, а права на воркбук здесь не действуют. -
Создать новый воркбук Мои личные отчеты
Неверно. Его глобальная роль
Visitorзапрещает создание объектов на верхнем уровне. РольРедактированиедействует только внутри воркбука Маркетинг. -
Просматривать дашборды в воркбуке Продажи при наличии доступа на просмотр
Верно. Его основная глобальная роль —
Visitor, поэтому он может смотреть все, к чему ему открыт доступ.
Итоги
Вы освоили ответственную задачу администратора — настройку авторизации. Теперь вы можете подключить DataLens к корпоративному каталогу пользователей, понимаете разницу между ролями и знаете, где искать проблему.