Greenplum под защитой: настраиваем Kerberos

Автор Категория ,
Greenplum под защитой: настраиваем Kerberos

В этой статье для администраторов Greenplum рассмотрим, как настроить систему сетевой защиты Kerberos для этой MPP-СУБД, чтобы контролировать доступ к хранящимся в ней данным с помощью сервера аутентификации. А также рассмотрим основные понятия и термины Kerberos применительно к Greenplum.

Что такое Kerberos и зачем это в Greenplum

Напомним, Kerberos – это сетевая система аутентификации, определённая в протоколе RFC 4120 с дополнениями в RFC 4537 и RFC 5021. Также Kerberos называют защищенный сетевой протокол аутентификации, который предлагает механизм взаимной аутентификации клиента и сервера перед установлением связи между ними с учетом того, что начальный обмен информацией между ними в незащищенной среде, а передаваемые пакеты могут быть перехвачены и модифицированы.

В протоколе RFC 4121 определён метод, называемый GSSAPI (General Security System Application Program Interface, общий программный интерфейс систем безопасности), с помощью которого Kerberos-совместимые приложения могут напрямую вызвать сервис Kerberos. Greenplum поддерживает прикладной GSSAPI с аутентификацией Kerberos. GSSAPI обеспечивает автоматическую аутентификацию (единый вход) для систем, которые его поддерживают. Достаточно указать роли пользователей Greenplum, которым требуется проверка подлинности Kerberos, в файле конфигурации базы данных pg_hba.conf. Вход в систему не выполняется, если проверка подлинности Kerberos недоступна, когда роль пытается войти в базу данных Greenplum.

Kerberos предоставляет безопасную зашифрованную службу проверки подлинности через сетевую аутентификацию и методы авторизации без повторного ввода пароля или предоставления других удостоверяющих данных. Поэтому Kerberos часто используется для единого входа (Single Sign-on, SSO). Kerberos не шифрует данные, которыми обмениваются клиент и база данных, и не предоставляет услуги авторизации. Для шифрования данных, передаваемых по сети, необходимо использовать SSL-соединение. Для управления авторизацией доступа к базам данных Greenplum и ее объектам, таким как схемы и таблицы, используются настройки в файле pg_hba.conf и привилегии, предоставленные пользователям и ролям MPP-СУБД.

Перед настройкой аутентификации Kerberos для Greenplum следует убедиться, что:

  • Есть возможность идентифицировать сервер центра распределения ключей (Key Distribution Center, KDC), который используется для аутентификации Kerberos, и область действия (realm) Kerberos для Greenplum. Realm – это совокупность пользователей и серверов приложений, о которых известно KDC-центру. Чтобы пользователь вошёл в Realm, у его Сервера аутентификации (Authentication Server) должны быть сведения об удостоверяющих данных этого пользователя (Credentials), хранящиеся в защищённой базе данных безопасности.
  • Системное время на Kerberos-сервере KDC и главной базе данных Greenplum синхронизировано, например, с помощью пакета ntp, установленного на оба сервера.
  • Имеется сетевое соединение между сервером KDC и главным хостом Greenplum.
  • на всех хостах Greenplum установлена Java 1.7.0_17 или новее, т.к. это требуется для использования JDBC с аутентификацией Kerberos в Red Hat Enterprise Linux 6.x или 7.x.

Убедившись в наличии вышеотмеченных обязательных пререквизитов, далее следует выполнить ряд шагов для настройки аутентификации Kerberos для Greenplum:

  • Создание принципалов Greenplum в базе данных KDC. Принципал (Principal) - это строка, полностью идентифицирующая пользователя службы Kerberos. Принципал может быть именем сервиса, выполняющегося на хосте, или именем пользователя. Принципалы формируют индексное поле для информации об объекте, хранящейся в KDC базе данных безопасности Kerberos. Форматы принципалов для пользователей и сервисов различаются.
  • Установка клиента Kerberos на мастер-хост MPP-СУБД;
  • Настройка Greenplum для использования аутентификации Kerberos;
  • Сопоставление принципов Kerberos с ролями базы данных Greenplum;
  • Настройка аутентификации JDBC Kerberos для базы данных Greenplum;
  • Настройка Kerberos для клиентов Linux и Windows.

Рассмотрим некоторые из этих шагов более подробно.

Как создать принципала Greenplum в KDC и установить клиента Kerberos на главный хост

Необходимо создать сервис-принципал для службы Greenplum и принципала-администратора Kerberos, который позволяет управлять базой данных KDC от имени пользователя gpadmin. Для этого нужно проделать следущие шаги:

  1. Войти на сервер Kerberos KDC как пользователь root

$ ssh root @ <kdc-server>

  1. Создать принципала для службы Greenplum

# kadmin.local -q “addprinc -randkey postgres/mdw@GPDB.KRB”

Параметр -randkey запрещает команде запрашивать пароль. Часть postgres в основных именах совпадает со значением параметра конфигурации сервера krb_srvname базы данных Greenplum, которым по умолчанию является postgres. Часть имени хоста основного имени должна совпадать с выводом команды hostname на главном хосте Greenplum. Если команда hostname показывает полное доменное имя, его можно использовать в основном имени, например, postgres/mdw.example.com@GPDB.KRB. Часть GPDB.KRB основного имени – это имя области действия Kerberos, т.е. realm. Форма имени Realm выглядит так: …@REALM, причем регистр символов имеет значение.

  1. Создать принципала для роли gpadmin/admin.

# kadmin.local –q “addprinc gpadmin/admin@GPDB.KRB”

Этот принципал позволяет пользователю gpadmin управлять базой данных KDC. Важно, чтобы файл конфигурации Kerberos kadm.acl содержал контрольный список доступа (ACL, Access Control List) для предоставления разрешений этому принципалу. Например, ACL предоставляет все разрешения любому пользователю с правами администратора в области действия GPDB.KRB:

*/admin@GPDB.KRB *

  1. Создать файл keytab с помощью kadmin.local. Этот файл таблицы ключей содержит пары имен субъектов Kerberos и зашифрованные ключи, полученные из пароля Kerberos. Например, создать файл ключей gpdb-kerberos.keytab в текущем каталоге с данными аутентификации для принципала-сервиса Greenplum и принципала gpadmin/admin, можно следующим образом:

# kadmin.local -q “ktadd -k gpdb-kerberos.keytab postgres/mdw@GPDB.KRB gpadmin/admin@GPDB.KRB”

  1. Скопировать файл keytab на мастер-хост Greenplum:

# scp gpdb-kerberos.keytab gpadmin @ mdw: ~

Чтобы развернуть клиента Kerberos на мастер-хост Greenplum, следует сперва установить на этом сервере клиентские утилиты и библиотеки – пакеты Kerberos:

$ sudo yum install krb5-libs krb5-workstation

Далее нужно скопировать конфигурационный файл /etc/krb5.conf с сервера KDC в файл /etc/krb5.conf на мастер-хосте Greenplum.

Как настроить соответствие принципалов Kerberos ролям пользователей Greenplum

Чтобы подключиться к Greenplum с включенной аутентификацией Kerberos, пользователь сначала запрашивает разрешение (ticket) на получение разрешений с сервера KDC с помощью утилиты kinit с паролем или файлом keytab, предоставленным администратором Kerberos. В Kerberos разрешение — это структура данных, содержимое которой известно только ее издателю и какой-либо стороне, к которой оно относится. Промежуточные хосты, включая клиентский, рассматривают эти разрешения как неразбираемый набор бит и просто передают их на конечный пункт назначения. В Kerberos разрешения могут быть Разрешениями на получение разрешения (Ticket Granting Tickets, TGT) как доказательства успешно пройденной аутентификации, или Сервисными разрешениями (Service Tickets, ST), которые выдаются Службой выдачи разрешений (Ticket Granting Service, TGS) и позволяют пользователю получить доступ к требуемому Сервису приложений (Application Service).

Когда пользователь подключается к Greenplum с поддержкой Kerberos, основным именем пользователя Kerberos будет имя роли Greenplum, с учетом преобразований, указанных в поле параметров записи gss в файле pg_hba.conf:

  • если задан параметр krb_realm=<realm>, Greenplum принимает только принципалов Kerberos, которые являются членами указанной области действия;
  • если задан параметр include_realm=0, имя роли Greenplum является основным именем Kerberos без области действия;
  • если include_realm=1, область действия Kerberos не удаляется из имени роли Greenplum, а сама роль должна быть создана с помощью команды этой MPP-СУБД CREATE ROLE;
  • При указании параметра map=<map-name> основное имя Kerberos сравнивается с записями, помеченными указанным <map-name> в конфигурационном файле conf в директории MASTER_DATA_DIRECTORY, и заменяется первой совпадающей по имени ролью Greenplum.

Сопоставление имен пользователей определяется в конфигурационном файле pg_ident.conf в директории MASTER_DATA_DIRECTORY. Например, этот файл имеет следующее содержимое:

# MAPNAME   SYSTEM-USERNAME        GP-USERNAME

mymap       /^admin@GPDB.KRB$      gpadmin

mymap       /^(.*)_gp)@GPDB.KRB$   \1

Имя сопоставления указывается в записи Kerberos pg_hba.conf в поле параметров:

host all all 0.0.0.0/0 gss include_realm=0 krb_realm=GPDB.KRB map=mymap

Первая запись сопоставления соответствует принципалу Kerberos admin@GPDB.KRB и заменяет его именем роли gpadmin в Greenplum. Вторая запись использует подстановочный знак для соответствия любому принципалу Kerberos в области действия GPDB-KRB с именем, заканчивающимся символами _gp, и заменяет его начальной частью основного имени. Greenplum применяет первую совпадающую запись сопоставления в файле pg_ident.conf, поэтому порядок записей имеет значение.

Освойте администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://gpdb.docs.pivotal.io/6-19/admin_guide/kerberos.html
  2. https://pro-ldap.ru/tr/zytrax/tech/kerberos.html