РЕД АДМ: Настройка авторизации через LDAP
Статья описывает порядок настройки внешней авторизации пользователей СУБД Pangolin через LDAP-каталог и автоматизации управления доступом. Материал позволяет централизовать ролевую модель через службу каталогов РЕД АДМ и исключить необходимость интерактивного управления учетными записями.
В статье реализованы следующие сценарии:
- Аутентификация по группам LDAP. Подключение пользователя к СУБД осуществляется на основе его членства в группах каталога без необходимости создания локальных учетных записей в базе данных.
- Связывание служебных атрибутов с LDAP. Служебные флаги учетных записей СУБД (Superuser, Can Login, Create Database и др.) привязываются к группам в LDAP, обеспечивая внешнее администрирование базовых привилегий на уровне каталога.
- Связывание пользовательских ролей с LDAP. Пользовательские роли, предоставляющие доступ к объектам БД, сопоставляются с группами LDAP, исключая необходимость ручного назначения прав внутри СУБД.
Область
- Продукт: СУБД Pangolin.
- Функциональность: внешняя авторизация через LDAP.
- Источник аутентификации: РЕД АДМ 2.1.1 Промышленная редакция.
Общая информация
Lightweight Directory Access Protocol (LDAP) — протокол прикладного уровня для доступа и поиска информации в распределенных каталогах, работающий на базе протоколов TCP/IP. Каталог организован в виде иерархической древовидной структуры, где каждый узел (объект) идентифицируется уникальным полным именем (Distinguished Name, DN) и представляет пользователя, группу, компьютер или другой ресурс.
В контексте внешней авторизации СУБД Pangolin протокол LDAP используется для централизованной передачи запросов о проверке учетных данных и извлечения списков групповых членств пользователя. При подключении клиента Pangolin устанавливает безопасное соединение с LDAP-сервером и выполняет первичную аутентификацию (Bind), после чего запрашивает необходимые атрибуты пользователя для динамического формирования набора прав, модификаторов и ролей сессии непосредственно в базе данных.
Режимы привязки (Bind)
В описанных сценариях Bind выполняет задачу первичной проверки подлинности пользователя перед тем, как СУБД получит список его прав из каталога. Успешная привязка подтверждает существование пользователя в каталоге и верность пароля, после чего расширение внешней авторизации запрашивает и применяет права на основе его принадлежности к определенной группе.
Подробное описание механизма, включая наследование во внешней авторизации и наследование параметров из pg_hba.conf, приведено в руководстве по администрированию СУБД. Внешняя авторизация через LDAP
Роли и модификаторы прав
Модификаторы прав роли определялись через принадлежность пользователя к родительским ролям (группам) в LDAP-каталоге. В рамках реализации сценариев использовались два основных модификатора для базовой работы внешней авторизации:
-
rolcanlogin— предоставляет роли право инициировать сессию в СУБД. Если пользователь аутентифицирован через LDAP, но его роль не обладает этим флагом, подключение к базе данных будет отклонено. При внешней авторизации флаг присваивается автоматически, если пользователь входит в LDAP-группу. -
rolsuper— наделяет роль привилегиями суперпользователя. Суперпользователь может обходить все проверки прав доступа к объектам базы данных, включая удаление критических структур, и имеет неограниченный доступ к административным функциям. При внешней авторизации флаг активируется на основе членства в группе.
Для тонкой настройки прав пользователей в рамках ролевой модели СУБД используются специализированные модификаторы:
rolinherit— разрешает наследование прав родительских ролей.rolcreaterole— предоставляет право создания и удаления других ролей.rolcreatedb— предоставляет право создания новых баз данных.rolreplication— необходимо для инициирования потоковой репликации или логической репликации.rolbypassrls— позволяет обходить ограничения на уровне строк (Row-Level Security), настроенные администратором.
Шаги настройки конфигурационных файлов
Подготовка LDAP-каталога
Для управления правами в LDAP-каталоге были созданы группы:
db_users— группа пользователей с правом входа.db_admins— группа администраторов с правомrolsuper.writers— группа с правами на запись.readers— группа с правами на чтение.
Настройка pg_hba.conf
В файл pg_hba.conf была добавлена запись для LDAP-аутентификации. Параметры подключения (адрес сервера, порт, TLS, DN) указаны в этой записи.
host all redtest 0.0.0.0/0 ldap \
ldaptls=1 \
ldapserver="dc.test.red" \
ldapport=389 \
ldapsuffix="@test.red"
Описание параметров
| Параметр | Описание |
|---|---|
ldaptls=1 | Активация TLS-шифрования |
ldapserver | Хост или IP LDAP-сервера |
ldapport | Порт LDAP (389 — стандартный, 636 — LDAPS) |
ldapsuffix | Суффикс домена, добавляемый к имени пользователя |
Настройка параметров в postgresql.conf
В конфигурационный файл postgresql.conf были добавлены параметры внешней авторизации:
external_authorize.filename = 'ext_auth.conf'
external_authorize.role_mapping_filename = 'rol_map.conf'
external_authorize.ldap_cache_ttl = '10s'
shared_preload_libraries = 'pg_stat_statements,external_authorize'
Описание параметров
| Параметр | Описание |
|---|---|
external_authorize.filename | Путь к файлу конфигурации внешней авторизации |
external_authorize.role_mapping_filename | Путь к файлу сопоставления ролей |
external_authorize.ldap_cache_ttl | TTL кеша LDAP-данных в секундах (1–86400, по умолчанию 1800) |
shared_preload_libraries | Список расширений для предзагрузки (включает external_authorize) |
Для тестирования в примере использовалось значение external_authorize.ldap_cache_ttl = '10s'. В производственной среде рекомендуется использовать значение по умолчанию 1800s, так как частое обновление кеша может создавать избыточную сетевую и процессорную нагрузку.
Настройка ext_auth.conf
В файле была произведена настройка политик внешней авторизации, включая правила получения модификаторов прав из LDAP для конкретных ролей. Обработка конфигурации выполнялась последовательно сверху вниз до первого совпадения.
host all redtest 0.0.0.0/0 \
ldapparentroleattribute="memberOf" \
rolcanloginldapparentrole="CN=db_users,DC=test,DC=red"\
rolsuperldapparentrole="CN=db_admins,DC=test,DC=red"\
ldapbasedn="CN=Users,DC=test,DC=red" \
ldapsearchattribute="SamAccountName"\
createnewrole=yes map=redmap
Описание параметров
| Параметр | Описание |
|---|---|
ldapparentroleattribute | Имя LDAP-атрибута для извлечения родительских ролей (например, memberOf) |
rolcanloginldapparentrole | Имя родительской роли в LDAP-каталоге, наличие которой дает модификатор rolcanlogin |
rolsuperldapparentrole | Distinguished Name (DN) роли, наличие которой дает модификатор rolsuper |
ldapbasedn | Корневая папка DN для поиска (используется при Simple Bind) |
ldapsearchattribute | Атрибут для сопоставления с именем пользователя (по умолчанию uid) |
createnewrole | Создавать временную роль в БД, если ее нет в pg_authid (yes/no) |
map | Имя маппинга в файле rol_map.conf |
Настройка rol_map.conf
В файле сопоставления задавались правила автоматического присвоения ролей СУБД на основе групповых членств пользователя в LDAP-каталоге. Каждое правило сопоставляет конкретную LDAP-группу (по ее Distinguished Name) с внутренней ролью базы данных (например, can_insert или can_select), передавая пользователю соответствующие права доступа при подключении.
redmap can_insert <- /CN=writers\,DC=test\,DC=red
redmap can_select <- /CN=readers\,DC=test\,DC=red
redmap \1 <- /CN=(\w+)\,DC=test\,DC=red
Операции:
->— отображение роли БД в узел LDAP (однонаправленное).<-— отображение узла LDAP в роль БД (однонаправленное).<->— взаимно-однозначное отображение (двунаправленное, несовместимо с регулярными выражениями).
В полях pg_role и ldap_name рекомендуется использовать регулярные выражения с одной группой захвата. Регулярные выражения начинаются со знака /.
После изменений в файле сопоставления необходимо перезапустить сервер Pangolin.
Перезапуск СУБД и проверка
Перезапуск сервера требуется при изменении параметра shared_preload_libraries так как расширения загружаются в память при старте экземпляра. Применение остальных параметров (external_authorize.filename, external_authorize.role_mapping_filename, external_authorize.ldap_cache_ttl) выполняется без остановки сервера.
Перезагрузка конфигурации выполняется командой:
pg_ctl reload
Полный перезапуск сервера выполняется командой:
pg_ctl restart
Проверка работы LDAP-аутентификации выполняется командой:
psql -h <host> -U <ldap_user> -d <database>
Таким образом, настройка внешней авторизации через LDAP позволяет централизовать управление доступом к СУБД Pangolin в едином каталоге РЕД АДМ. После выполнения описанных шагов права пользователей определяются автоматически на основе их принадлежности к группам LDAP. Изменение ролевой модели осуществляется без вмешательства в конфигурацию базы данных: достаточно переместить пользователя между группами в каталоге, и СУБД применит новые права при следующей аутентификации. Данный подход исключает ручное назначение прав и упрощает администрирование в масштабах организации.