Аутентификация LDAP в ADB

В ADB, как и в Greenplum, поддерживается аутентификация пользователей с использованием протокола LDAP (Lightweight Directory Access Protocol). При использовании LDAP-аутентификации проверка учетных записей пользователей и их паролей выполняется на выбранном LDAP-сервере. Порядок настройки LDAP-аутентификации в ADB с помощью ADCM описан ниже.

ПРИМЕЧАНИЕ
Возможность настройки параметров для LDAP-подключения через ADCM доступна в ADB 6 начиная с версии 6.25.1.49. В этой же версии реализована автоматическая синхронизация пользователей и групп ADB с LDAP — с помощью утилиты pg-ldap-sync, поставляемой в бандле ADB. В более ранних версиях ADB настройка LDAP-аутентификации была возможна, однако действия, описанные ниже в разделе Синхронизация ADB и LDAP (обновление файла pg_hba.conf и создание всех необходимых ролей в ADB), требовалось выполнять вручную.

Настройка LDAP-аутентификации

Для настройки LDAP-аутентификации в кластере ADB выполните следующие шаги:

  1. Убедитесь, что LDAP-сервер настроен и доступен. ADB поддерживает две реализации протокола LDAP: Microsoft Active Directory (MS AD) и 389 Directory server в составе FreeIPA.

  2. Откройте конфигурационную страницу сервиса ADB в ADCM.

  3. Переведите переключатель UI LDAP authentication в активное состояние.

  4. Заполните следующие поля.

    Поле Описание По умолчанию Пример в MS AD

    Type

    Тип LDAP-сервера. Возможные значения:

    • MSAD — Microsoft Active Directory;

    • FreeIPA — 389 Directory server в составе FreeIPA.

    MSAD

    MSAD

    URI

    URI для подключения к LDAP-серверу в формате <хост>:<порт>

     — 

    10.92.12.49:389

    Users baseDN

    Ограничение на область поиска объектов в каталоге LDAP, применяемое в запросах на поиск пользователей

     — 

    ou=Peoples,dc=ad,dc=ranger-test

    Groups baseDN

    Ограничение на область поиска объектов в каталоге LDAP, применяемое в запросах на поиск групп пользователей

     — 

    ou=Groups,dc=ad,dc=ranger-test

    Users filter

    LDAP-фильтр, используемый для поиска пользователей. Заполняется в соответствии с RFC 2254

    (&(|(objectClass=person)(objectClass=inetOrgPerson))(cn=*))

    (&(objectClass=person)(objectClass=organizationalPerson)(givenName=*)(sn=*)(sAMAccountName=*))

    Groups filter

    LDAP-фильтр, используемый для поиска групп пользователей. Заполняется в соответствии с RFC 2254

    (&(|(objectClass=group)(objectClass=groupofnames)(objectClass=groupOfUniqueNames))(cn=*))

    (cn=*)

    SA Login

    Имя пользователя, используемое в сервисных запросах к LDAP-серверу

     — 

    cn=admin,dc=ad,dc=ranger-test

    Password

    Пароль пользователя, используемый в сервисных запросах к LDAP-серверу

     — 

    Пароль пользователя admin

    Lowercase login

    Необходимо ли преобразование имен пользователей в нижний регистр

    false

    false

    Lowercase group

    Необходимо ли преобразование имен групп в нижний регистр

    false

    false

    Sync interval

    Cron-выражение, описывающее периодичность синхронизации пользователей и групп в ADB на основе данных LDAP-сервера. Для синхронизации используется утилита pg-ldap-sync, поставляемая в бандле ADB

    0 * * * *

    0 * * * *

    ПРИМЕЧАНИЕ

    Различные реализации LDAP используют разные имена для типов и идентификаторов объектов. Формат параметров для конкретной реализации LDAP рекомендуется уточнять у администратора LDAP-сервера.

  5. Нажмите Save. Примените действие Reconfigure к сервису ADB.

    Настройка LDAP-аутентификации для ADB в ADCM
    Настройка LDAP-аутентификации для ADB в ADCM

Синхронизация ADB и LDAP

Если LDAP-аутентификация настроена успешно, в ADB автоматически выполняются следующие действия:

  • Обновление файла pg_hba.conf. В файл pg_hba.conf, расположенный в data-директории master-хоста (в нашем примере /data1/master/gpseg-1/), добавляется новая запись об LDAP-аутентификации следующего вида:

    # BEGIN LDAP
    host all +ldap_users 0.0.0.0/0 ldap ldapserver=<URI> ldapbasedn="<Users baseDN>" ldapbinddn="<SA Login>" ldapbindpasswd="<Password>" ldapsearchattribute="<attribute>"
    # END LDAP

    где:

    • ldap_users — имя роли в ADB, в которую будут добавлены все полученные со стороны LDAP пользователи.

    • <URI>, <Users baseDN>, <SA Login>, <Password> — значения одноименных параметров сервиса ADB.

    • <attribute> — атрибут LDAP, значение которого будет использовано в качестве имени каждой роли в ADB при синхронизации пользователей. Принимает одно из следующих значений:

      • sAMAccountName — для MS AD.

      • uid — для FreeIPA.

  • Синхронизация пользователей и групп ADB с LDAP. В базу данных ADB добавляется информация о группах и пользователях, заведенных на LDAP-сервере (и удовлетворяющих критериям отбора, указанным на этапе конфигурации). Синхронизация выполняется путем вызова утилиты pg-ldap-sync. Чтобы убедиться в успешной синхронизации, можно выполнить запрос к системной таблице pg_roles:

    SELECT rolname FROM pg_roles;

    Как показывает вывод команды, в ADB автоматически созданы следующие роли в результате синхронизации с LDAP:

    • ldap_users — роль, в которую добавляются все LDAP-пользователи (путем автоматического вызова команды CREATE ROLE …​ LOGIN IN ROLE ldap_users …​).

    • ldap_groups — роль, в которую добавляются все LDAP-группы (путем автоматического вызова команды CREATE ROLE …​ NOLOGIN IN ROLE ldap_groups …​).

    • ffedorov, ppetrov, ssemenov, zeptest — конкретные пользователи, полученные со стороны LDAP и добавленные в роль ldap_users.

    • ADCM, ADH, Adccadmins, Analysts, Managers — конкретные группы пользователей, полученные со стороны LDAP и добавленные в роль ldap_groups. Членство пользователей в этих группах устанавливается путем автоматического вызова команды GRANT.

       rolname
    -------------
     gpadmin
     gpmon
     ldap_users
     ldap_groups
     ADCM
     ADH
     Adccadmins
     Analysts
     Managers
     ffedorov
     ppetrov
     ssemenov
     zeptest
    (13 rows)
Особенности синхронизации

 

  • В дальнейшем синхронизация пользователей будет проводиться автоматически в соответствии с расписанием, указанным в параметре Sync interval. Необходимости в ручном добавлении ролей путем вызова команд CREATE ROLE и GRANT нет.

  • Для синхронизации данных с LDAP-сервером вне настроенного расписания следует применить действие Reconfigure к сервису ADB.

  • После настройки LDAP-аутентификации подключение к БД становится возможным только для пользователей, зарегистрированных на LDAP-сервере. В случае удаления пользователя на стороне LDAP его дальнейшая аутентификация в ADB становится невозможна.

  • Случай, когда пользователь зарегистрирован в ADB, но при этом отсутствует на стороне LDAP-сервера, валиден. При этом синхронизация данных с LDAP никак не влияет на этого пользователя. Однако, если пользователь с одним и тем же именем заведен и в ADB, и на LDAP-сервере — при следующей синхронизации данные пользователя в ADB перезапишутся информацией, полученной с LDAP-сервера.

  • Расширение pg-ldap-sync автоматизирует только следующие DCL-команды: CREATE ROLE <ROLE>, DROP ROLE <ROLE>, GRANT <ROLE> TO <ROLE> и REVOKE <ROLE> FROM <ROLE>. Назначение прав доступа при помощи команд вида GRANT SELECT, GRANT EXECUTE, GRANT CONNECT и GRANT PRIVILEGES ON <OBJECT> TO <ROLE> при необходимости следует выполнить самостоятельно в ADB.

Проверка LDAP-аутентификации

Для того чтобы проверить возможность подключения к ADB после настройки LDAP-аутентификации, можно воспользоваться клиентом psql, указав в качестве аргумента -U имя одного из пользователей, заведенных на стороне LDAP (в нашем примере — ffedorov).

$ psql adb -h bds-mdw -U "ffedorov"

Если настройка LDAP-аутентификации выполнена успешно, на экране появится приглашение для ввода пароля пользователя. После ввода корректного пароля (назначенного на стороне LDAP-сервера) пользователю открывается доступ к работе с БД.

Password for user ffedorov:
psql (9.4.26)
Type "help" for help.

adb=>
Ошибки LDAP-аутентификации

 

  • При попытке подключения к ADB под пользователем, не включенным в роль ldap_users, формируется следующая ошибка:

    psql: FATAL:  no pg_hba.conf entry for host "10.92.42.236", user "bds", database "adb", SSL off
  • Если пользователь, под которым выполняется подключение, существует в ADB и включен в роль ldap_users, но при этом он отсутствует на стороне LDAP или его пароль не совпадает с введенным, возвращается следующая ошибка:

    psql: FATAL:  LDAP authentication failed for user "bds"

В обоих случаях необходимо дождаться синхронизации с LDAP-сервером по расписанию либо запустить ее вручную, применив действие Reconfigure к сервису ADB.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней