GSSAPI-аутентификация с использованием FreeIPA
Доступ к кластеру Greengage DB можно контролировать с помощью GSSAPI-аутентификации. В частности, вы можете настроить сервер FreeIPA для управления идентификацией пользователей. Поскольку FreeIPA использует MIT Kerberos для аутентификации, вы можете интегрировать ваш кластер Greengage DB с сервером FreeIPA и задать сопоставление между пользователями FreeIPA и ролями Greengage DB. Это позволит использовать GSSAPI-аутентификацию для соответствующих пользователей.
Предварительные требования
Для демонстрации интеграции кластера Greengage DB с сервером FreeIPA используются следующие хосты и параметры домена IPA:
-
Координатор-хост: имя —
cdw.example.com, FQDN —cdw.example.com. -
Хост FreeIPA: имя —
ipa.example.com, FQDN —ipa.example.com, операционная система — Rocky Linux. -
Область (realm):
EXAMPLE.COM. -
Сервисный принципал:
postgres/cdw.example.com@EXAMPLE.COM.
Используйте имена хостов, полные доменные имена (FQDN) и имя области, соответствующие вашему окружению.
Настройка сервера FreeIPA
Войдите на хост FreeIPA под пользователем с правами суперпользователя:
$ ssh sampleuser@ipa.example.com
В этом примере имя пользователя — sampleuser.
Установка библиотек FreeIPA
Для установки библиотек FreeIPA выполните следующую команду:
$ sudo dnf install freeipa-server
Настройка сервера FreeIPA
Выполните команду ниже, чтобы запустить настройку сервера FreeIPA в неинтерактивном режиме:
$ sudo ipa-server-install \
--unattended \
--hostname=ipa.example.com \
--domain=example.com \
--realm=EXAMPLE.COM \
--ds-password=87654321 \
--admin-password=12345678
Не рекомендуется указывать пароли в открытом виде при настройке сервера FreeIPA в неинтерактивном режиме. В качестве более безопасной альтернативы вы можете загружать пароли из переменных окружения.
Когда настройка сервера FreeIPA завершена, проверьте состояние сервисов с помощью команды ipactl status:
$ sudo ipactl status
В частности, вывод должен показывать, что сервисы Directory, krb5kdc и kadmin запущены:
Directory Service: RUNNING krb5kdc Service: RUNNING kadmin Service: RUNNING
Создание сервисов и пользователей FreeIPA
Выполните описанные ниже шаги на хосте FreeIPA:
-
Создайте сервис, необходимый для использования аутентификации Kerberos в СУБД Greengage.
-
Создайте обычного пользователя FreeIPA. Этот пользователь будет сопоставлен с соответствующей ролью Greengage DB.
Вам нужно создать пользователей FreeIPA для всех пользователей Greengage DB, которые используют Kerberos-аутентификацию.
Аутентификация в качестве администратора
Для выполнения административных действий автоматически создается пользователь admin.
Выполните команду kinit, чтобы аутентифицироваться под пользователем admin:
$ kinit admin
Когда будет показано данное приглашение, введите пароль, заданный в параметре admin-password во время настройки сервера FreeIPA:
Password for admin@EXAMPLE.COM:
Создание сервиса postgres
Сервис postgres необходим для реализации протокола аутентификации Kerberos в Greengage DB.
Сначала добавьте координатор-хост Greengage DB в домен IPA с помощью команды ipa host-add:
$ ipa host-add cdw.example.com
Затем создайте сервис, который соответствует процессу postgres на координатор-хосте:
$ ipa service-add postgres/cdw.example.com@EXAMPLE.COM
Результат должен выглядеть следующим образом:
-------------------------------------------------------------------------------------- Added service "postgres/cdw.example.com@EXAMPLE.COM" -------------------------------------------------------------------------------------- Principal name: postgres/cdw.example.com@EXAMPLE.COM Principal alias: postgres/cdw.example.com@EXAMPLE.COM Managed by: cdw.example.com
Добавление ключа сервиса в keytab-файл
После создания сервиса postgres необходимо добавить его ключ в keytab-файл.
Для этого используйте команду ipa-getkeytab:
$ ipa-getkeytab \
--principal=postgres/cdw.example.com@EXAMPLE.COM \
--keytab=ggdb-freeipa.keytab
Эта команда создает файл ggdb-freeipa.keytab.
Создание обычного пользователя
Создайте обычного пользователя FreeIPA с помощью команды ipa user-add:
$ ipa user-add alice \
--first=Alice \
--last=Johnson \
--password
Введите пароль и нажмите Enter, когда будут показаны эти приглашения:
Password: Enter Password again to verify:
Результат должен выглядеть следующим образом:
------------------ Added user "alice" ------------------ User login: alice First name: Alice Last name: Johnson Full name: Alice Johnson Display name: Alice Johnson Initials: AJ Home directory: /home/alice GECOS: Alice Johnson Login shell: /bin/sh Principal name: alice@EXAMPLE.COM Principal alias: alice@EXAMPLE.COM User password expiration: 20260421133245Z Email address: alice@example.com UID: 600800009 GID: 600800009 Password: True Member of groups: ipausers Kerberos keys available: True
Вы можете видеть, что принципал пользователя — alice@EXAMPLE.COM.
Имя принципала используется далее для сопоставления пользователя FreeIPA и роли Greengage DB.
Настройка координатора Greengage DB
Для настройки координатор-хоста Greengage DB войдите на него как gpadmin:
$ ssh gpadmin@cdw.example.com
Установка клиентских библиотек FreeIPA
Установите клиентские библиотеки FreeIPA на координатор-хост Greengage DB:
$ sudo apt install freeipa-client
$ sudo dnf install ipa-client
Настройка клиента FreeIPA
Выполните команду ниже, чтобы запустить настройку клиента FreeIPA в неинтерактивном режиме:
$ sudo ipa-client-install \
--unattended \
--server=ipa.example.com \
--domain=example.com \
--realm=EXAMPLE.COM \
--principal admin \
--password=12345678
Обратите внимание, что параметр password использует пароль пользователя admin, заданный во время настройки сервера FreeIPA.
Копирование keytab-файла
-
Скопируйте keytab-файл (ggdb-freeipa.keytab), созданный на хосте FreeIPA, в каталог /home/gpadmin/ на координатор-хосте Greengage DB:
$ scp ggdb-freeipa.keytab cdw.example.com:/home/gpadmin/ -
Настройте владельца и права доступа для скопированного keytab-файла:
$ sudo chown gpadmin:gpadmin ggdb-freeipa.keytab $ sudo chmod 400 ggdb-freeipa.keytab
Создание роли Greengage DB
Создайте роль alice в Greengage DB:
$ createuser alice
В следующем разделе для этой роли будет настроено сопоставление с принципалом alice@EXAMPLE.COM.
Настройка GSSAPI-аутентификации
-
Задайте путь к keytab-файлу, используя параметр конфигурации сервера
krb_server_keyfile:$ gpconfig -c krb_server_keyfile -v '/home/gpadmin/ggdb-freeipa.keytab'Результат должен выглядеть следующим образом:
20260420:08:00:37:007230 gpconfig:cdw:gpadmin-[INFO]:-completed successfully with parameters '-c krb_server_keyfile -v /home/gpadmin/ggdb-freeipa.keytab'
-
Откройте файл pg_hba.conf для редактирования:
$ vi $COORDINATOR_DATA_DIRECTORY/pg_hba.confДобавьте в этот файл следующую строку:
# connection-type database user address auth-method auth-options hostgssenc postgres alice samenet gss krb_realm=EXAMPLE.COM map=user_mapЭта конфигурация позволяет пользователю
aliceполучить доступ к базе данныхpostgresс использованием GSSAPI-аутентификации (auth-method установлен вgss). Параметры GSSAPI-аутентификации указываются в полеauth-options:-
krb_realm— устанавливает имя области Kerberos вEXAMPLE.COM. -
map— указывает, чтоuser_mapиспользуется для сопоставления принципалов Kerberos и ролей СУБД. Фактическое сопоставление определяется в файле pg_ident.conf.
-
-
Откройте файл pg_ident.conf:
$ vi $COORDINATOR_DATA_DIRECTORY/pg_ident.confЗадайте сопоставление принципала
alice@EXAMPLE.COMи ролиalice, как показано ниже:# MAPNAME SYSTEM-USERNAME PG-USERNAME user_map alice@EXAMPLE.COM alice -
Перезагрузите конфигурацию с помощью
gpstop, чтобы применить изменения:$ gpstop -u
Подключение к базе данных
В этом разделе описывается подключение к базе данных, защищенной аутентификацией GSSAPI, с использованием psql. Выполните описанные ниже шаги на координатор-хосте.
-
Перед подключением к базе данных создайте тикет на предоставление тикетов (Ticket-Granting Ticket, TGT) для пользователя
alice, используя командуkinit:$ kinit alice -
Введите пароль пользователя, заданный в разделе Создание обычного пользователя, и измените его, как предлагается в приглашении:
Password for alice@EXAMPLE.COM: Password expired. You must change it now. Enter new password: Enter it again:
-
Убедитесь в успешном создании тикета, запустив команду
klist:$ klistРезультат должен выглядеть следующим образом:
Ticket cache: KEYRING:persistent:999:999 Default principal: alice@EXAMPLE.COM Valid starting Expires Service principal 04/20/26 08:09:06 04/21/26 07:53:00 krbtgt/EXAMPLE.COM@EXAMPLE.COM
-
Подключитесь к базе данных
postgres, созданной по умолчанию, под рольюaliceс помощьюpsql:$ psql postgres -U alice -h cdw.example.comРезультат должен выглядеть следующим образом:
psql (12.22) GSSAPI-encrypted connection Type "help" for help. postgres=>
-
Проверьте имя текущего пользователя:
SELECT current_user;Команда должна вернуть следующее:
current_user -------------- alice