Перейти к основному содержимому
Версия: 2.0.x

Аутентификация групп пользователей

Включите Group Provider в Selena для аутентификации и авторизации групп пользователей из внешних систем аутентификации.

Начиная с версии v1.5.2, Selena поддерживает Group Provider для сбора информации о группах из внешних систем аутентификации для управления группами пользователей.

Обзор

Для углубления интеграции с внешними системами аутентификации и авторизации пользователей, такими как LDAP и Apache Ranger, Selena поддерживает сбор информации о группах пользователей для улучшения работы с коллективным управлением пользователями.

С помощью группового провайдера вы можете получать информацию о группах из внешних пользовательских систем для различных целей. Информация о группах независима и может быть гибко интегрирована в процессы аутентификации, авторизации или другие процессы, не будучи жестко связанной с каким-либо конкретным рабочим процессом.

Group Provider по сути представляет собой сопоставление между пользователями и группами. Любой процесс, требующий информации о группах, может запрашивать это сопоставление по мере необходимости.

Рабочий процесс

На следующей блок-схеме используются LDAP и Apache Ranger в качестве примера для объяснения рабочего процесса Group Provider.

Group Provider

Создание группового провайдера

Selena поддерживает три типа провайдеров групп:

  • Провайдер групп LDAP: Поиск и сопоставление пользователей с группами в вашем сервисе LDAP
  • Провайдер групп Unix: Поиск и сопоставление пользователей с группами в вашей операционной системе
  • Провайдер групп на основе файла: Поиск и сопоставление пользователей с группами, определёнными в файле

Синтаксис

  • LDAP group provider:
CREATE GROUP PROVIDER <group_provider_name>
PROPERTIES (
"type" = "ldap",
ldap_info,
ldap_search_group_arg,
ldap_search_attr,
[ldap_cache_attr]
)

ldap_info ::=
"ldap_conn_url" = "",
"ldap_bind_root_dn" = "",
"ldap_bind_root_pwd" = "",
"ldap_bind_base_dn" = "",
["ldap_conn_timeout" = "",]
["ldap_conn_read_timeout" = ""]
["ldap_ssl_conn_allow_insecure" = ""]
["ldap_ssl_conn_trust_store_path" = ""]
["ldap_ssl_conn_trust_store_pwd" = ""]

ldap_search_group_arg ::=
{ "ldap_group_dn" = ""
| "ldap_group_filter" = "" },
"ldap_group_identifier_attr" = ""

ldap_search_user_arg ::=
"ldap_group_member_attr" = "",
"ldap_user_search_attr" = ""

ldap_cache_arg ::=
"ldap_cache_refresh_interval" = ""
  • Unix group provider:
CREATE GROUP PROVIDER <group_provider_name>
PROPERTIES (
"type" = "unix"
)
  • File group provider:
CREATE GROUP PROVIDER <group_provider_name>
PROPERTIES (
"type" = "file",
"group_file_url" = ""
)

Параметры

type

Тип создаваемого group provider. Допустимые значения:

  • ldap: Создаёт LDAP group provider. При установке этого значения необходимо указать ldap_info, ldap_search_group_arg, ldap_search_user_arg и, опционально, ldap_cache_arg.
  • unix: Создаёт Unix group provider.
  • file: Создаёт File group provider. При установке этого значения необходимо указать group_file_url.

group_file_url

URL или относительный путь (в директории fe/conf) к файлу, определяющему группы пользователей.

примечание

Файл групп содержит список групп и их участников. Вы можете определить группу в каждой строке, где имя группы и участники разделены двоеточием. Несколько пользователей разделяются запятыми. Пример: group_name:user_1,user_2,user_3.

Группа параметров ldap_info

Информация, используемая для подключения к вашему сервису LDAP.

ldap_conn_url

URL вашего сервера LDAP. Формат: ldap://<ldap_server_host>:<ldap_server_port>).

ldap_bind_root_dn

Администраторское Distinguished Name (DN) вашего сервиса LDAP.

ldap_bind_root_pwd

Пароль администратора вашего сервиса LDAP.

ldap_bind_base_dn

Базовый DN пользователя LDAP, для которого кластер выполняет поиск.

ldap_conn_timeout

Опционально. Время ожидания подключения к вашему сервису LDAP.

ldap_conn_read_timeout

Опционально. Время ожидания операций чтения в подключении к вашему сервису LDAP.

ldap_ssl_conn_allow_insecure

Опционально. Разрешать ли незашифрованные подключения к серверу LDAP. Значение по умолчанию: true. Установка этого значения в false означает, что для доступа к LDAP требуется шифрование SSL.

ldap_ssl_conn_trust_store_path

Опционально. Локальный путь для хранения сертификата SSL CA сервера LDAP. Поддерживает форматы pem и jks. Вам не нужно устанавливать этот параметр, если сертификат выдан доверенной организацией.

ldap_ssl_conn_trust_store_pwd

Опционально. Пароль, используемый для доступа к локально сохраненному сертификату SSL CA сервера LDAP. Сертификаты в формате pem не требуют пароля. Только сертификаты в формате jsk требуют пароль.

Группа параметров ldap_search_group_arg

Аргументы, используемые для управления тем, как Selena ищет группу.

примечание

Вы можете указать только ldap_group_dn или ldap_group_filter. Указание обоих параметров не поддерживается.

ldap_group_dn

DN группы для поиска. Группа будет запрошена напрямую с использованием этого DN. Пример: "cn=ldapgroup1,ou=Group,dc=selena,dc=com;cn=ldapgroup2,ou=Group,dc=selena,dc=com".

ldap_group_filter

Пользовательский фильтр группы, который может быть распознан сервером LDAP. Он будет отправлен напрямую на ваш сервер LDAP для поиска группы. Пример: (&(objectClass=groupOfNames)(cn=testgroup)).

ldap_group_identifier_attr

Атрибут, используемый в качестве идентификатора имени группы.

Группа параметров ldap_search_user_arg

Аргументы, используемые для управления тем, как Selena идентифицирует пользователя в группе.

ldap_group_member_attr

Атрибут, представляющий членов группы. Допустимые значения: member и memberUid.

ldap_user_search_attr

Указывает, как извлечь идентификатор пользователя из значения атрибута member. Вы можете явно определить атрибут (например, cn или uid) или использовать регулярное выражение.

примечание

Механизм сопоставления DN

  • Когда настроен ldap_user_search_attr, система извлекает указанное значение из DN членов группы и использует его в качестве имен пользователей, и использует имя пользователя для входа в качестве ключа при поиске группы.
  • Когда ldap_user_search_attr не настроен, система использует полный DN напрямую в качестве идентификатора пользователя и использует DN, записанный во время аутентификации, в качестве ключа при поиске группы.

Этот дизайн позволяет LDAP Group Provider адаптироваться к различным средам LDAP, особенно к сложным средам, таким как Microsoft AD.

Группа параметров ldap_cache_arg

Аргумент, используемый для определения поведения кэширования информации о группах LDAP.

ldap_cache_refresh_interval

Опционально. Интервал, с которым Selena автоматически обновляет кэшированную информацию о группах LDAP. Единица измерения: секунды. По умолчанию: 900.

Пример

Предположим, что сервер LDAP содержит следующую информацию о группах и членах.

-- Информация о группе
# testgroup, Group, selena.com
dn: cn=testgroup,ou=Group,dc=selena,dc=com
objectClass: groupOfNames
cn: testgroup
member: uid=test,ou=people,dc=selena,dc=com
member: uid=tom,ou=people,dc=selena,dc=com

-- Информация о пользователе
# test, People, selena.com
dn: cn=test,ou=People,dc=selena,dc=com
objectClass: inetOrgPerson
cn: test
uid: test
sn: FTE
userPassword::

Создайте групповой провайдер ldap_group_provider для членов в testgroup:

CREATE GROUP PROVIDER ldap_group_provider
PROPERTIES(
"type"="ldap",
"ldap_conn_url"="ldap://xxxx:xxx",
"ldap_bind_root_dn"="cn=admin,dc=selena,dc=com",
"ldap_bind_root_pwd"="123456",
"ldap_bind_base_dn"="dc=selena,dc=com",
"ldap_group_filter"="(&(objectClass=groupOfNames)(cn=testgroup))",
"ldap_group_identifier_attr"="cn",
"ldap_group_member_attr"="member",
"ldap_user_search_attr"="uid=([^,]+)"
)

Вышеприведенный пример использует ldap_group_filter для поиска группы с objectClass groupOfNames и cn равным testgroup. Поэтому cn указан в ldap_group_identifier_attr для идентификации группы. ldap_group_member_attr установлен в member, чтобы атрибут member использовался в objectClass groupOfNames для идентификации членов. ldap_user_search_attr установлен в выражение uid=([^,]+), которое используется для идентификации пользователей в атрибуте member.

Пример среды Microsoft AD

Предположим, что сервер Microsoft AD содержит следующую информацию о группах и членах:

-- Информация о группе
# ADGroup, Groups, company.com
dn: CN=ADGroup,OU=Groups,DC=company,DC=com
objectClass: group
cn: ADGroup
member: CN=John Doe,OU=Users,DC=company,DC=com
member: CN=Jane Smith,OU=Users,DC=company,DC=com

-- Информация о пользователе
# John Doe, Users, company.com
dn: CN=John Doe,OU=Users,DC=company,DC=com
objectClass: user
cn: John Doe
sAMAccountName: johndoe

Создайте Group Provider для среды Microsoft AD:

CREATE GROUP PROVIDER ad_group_provider
PROPERTIES(
"type"="ldap",
"ldap_conn_url"="ldap://ad.company.com:389",
"ldap_bind_root_dn"="CN=admin,OU=Users,DC=company,DC=com",
"ldap_bind_root_pwd"="password",
"ldap_bind_base_dn"="DC=company,DC=com",
"ldap_group_filter"="(&(objectClass=group)(cn=ADGroup))",
"ldap_group_identifier_attr"="cn",
"ldap_group_member_attr"="member"
-- Примечание: Не настраивайте ldap_user_search_attr, система будет использовать полный DN для сопоставления
)

В этом примере, поскольку ldap_user_search_attr не настроен, система будет:

  1. Во время создания кэша группы напрямую использовать полный DN (например, CN=John Doe,OU=Users,DC=company,DC=com) в качестве идентификатора пользователя.
  2. Во время поиска группы использовать DN, записанный во время аутентификации, в качестве ключа для поиска групп пользователя.

Этот подход особенно подходит для сред Microsoft AD, поскольку члены групп в AD могут не иметь простых атрибутов имени пользователя.

Объединение группового провайдера с security integration

После создания группового провайдера вы можете объединить его с security integration, чтобы разрешить пользователям, указанным групповым провайдером, входить в Selena. Для получения дополнительной информации о создании security integration см. Аутентификация с помощью Security Integration.

Синтаксис

ALTER SECURITY INTEGRATION <security_integration_name> SET
(
"group_provider" = "",
"permitted_groups" = ""
)

Параметры

group_provider

Имя группового провайдера(ов) для объединения с security integration. Несколько групповых провайдеров разделяются запятыми. После установки Selena будет записывать информацию о группе пользователя под каждым указанным провайдером при входе в систему.

permitted_groups

Опционально. Имя группы(групп), члены которых имеют право входить в Selena. Несколько групп разделяются запятыми. Убедитесь, что указанные группы могут быть получены объединенным групповым провайдером(ами).

Пример

ALTER SECURITY INTEGRATION LDAP SET
(
"group_provider"="ldap_group_provider",
"permitted_groups"="testgroup"
);

Предоставление роли группе пользователей

Вы можете предоставлять роли группе пользователей через GRANT.

Следующий пример предоставляет роль example_role группе пользователей analysts:

GRANT example_role TO EXTERNAL GROUP analysts;

Объединение группового провайдера с внешней системой авторизации (Apache Ranger)

После настройки связанного группового провайдера в security integration, Selena будет записывать информацию о группе пользователя при входе в систему. Эта информация о группе будет затем автоматически включена в процесс авторизации с Ranger, что устраняет необходимость в дополнительной настройке.

Дополнительные инструкции по интеграции Selena с Ranger см. в разделе Управление разрешениями с помощью Apache Ranger.