Перейти к основному содержимому

MS Active Directory: Настройка авторизации через LDAP

Статья описывает порядок настройки внешней авторизации пользователей СУБД Pangolin через LDAP-каталог и автоматизации управления доступом. Материал позволяет централизовать ролевую модель через службу каталогов MS Active Directory и исключить необходимость интерактивного управления учетными записями.

В статье реализованы следующие сценарии:

  • Аутентификация по группам LDAP. Подключение пользователя к СУБД осуществляется на основе его членства в группах каталога без необходимости создания локальных учетных записей в базе данных.
  • Связывание служебных атрибутов с LDAP. Служебные флаги учетных записей СУБД (Superuser, Can Login, Create Database и др.) привязываются к группам в LDAP, обеспечивая внешнее администрирование базовых привилегий на уровне каталога.
  • Связывание пользовательских ролей с LDAP. Пользовательские роли, предоставляющие доступ к объектам БД, сопоставляются с группами LDAP, исключая необходимость ручного назначения прав внутри СУБД.

Область

  • Продукт: СУБД Pangolin.
  • Функциональность: внешняя авторизация через LDAP.
  • Источник аутентификации: Windows Server 2022.

Общая информация

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 all 0.0.0.0/0 ldap \
ldaptls=1 \
ldapserver="ad1.example.com" \
ldapport=389 \
ldapsuffix="@example.com"
Описание параметров
ПараметрОписание
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_ttlTTL кеша LDAP-данных в секундах (1–86400, по умолчанию 1800)
shared_preload_librariesСписок расширений для предзагрузки (включает external_authorize)
примечание

Для тестирования в примере использовалось значение external_authorize.ldap_cache_ttl = '10s'. В производственной среде рекомендуется использовать значение по умолчанию 1800s, так как частое обновление кеша может создавать избыточную сетевую и процессорную нагрузку.

Настройка ext_auth.conf

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

host all all 0.0.0.0/0 \
ldapparentroleattribute="memberOf" \
rolcanloginldapparentrole="CN=db_users,OU=Groups,DC=example,DC=com" \
rolsuperldapparentrole="CN=db_admins,OU=Groups,DC=example,DC=com" \
ldapbasedn="CN=Users,DC=example,DC=com" \
ldapsearchattribute="SamAccountName" \
createnewrole=yes \
map=admap
Описание параметров
ПараметрОписание
ldapparentroleattributeИмя LDAP-атрибута для извлечения родительских ролей (например, memberOf)
rolcanloginldapparentroleИмя родительской роли в LDAP-каталоге, наличие которой дает модификатор rolcanlogin
rolsuperldapparentroleDistinguished 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), передавая пользователю соответствующие права доступа при подключении.

admap can_insert <- /CN=writers\,OU=Groups\,DC=example\,DC=com
admap can_select <- /CN=readers\,OU=Groups\,DC=example\,DC=com
admap \1 <- /CN=(\w+)\,.*?\,DC=example\,DC=com

Операции:

  • -> — отображение роли БД в узел 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 в едином каталоге MS Active Directory. После выполнения описанных шагов права пользователей определяются автоматически на основе их принадлежности к группам LDAP. Изменение ролевой модели осуществляется без вмешательства в конфигурацию базы данных: достаточно переместить пользователя между группами в каталоге, и СУБД применит новые права при следующей аутентификации. Данный подход исключает ручное назначение прав, упрощает администрирование в масштабах организации и позволяет интегрировать управление доступом с ITSM-системами.

Дополнительная информация

  1. Авторизация и аутентификация. Защита аутентификационной информации
  2. Файл pg_hba.conf
  3. Аутентификация trust