Использование Kerberos для аутентификации в кластере#
Данное руководство содержит набор шагов для настройки авторизации в CedrusData с помощью Kerberos. Мы будем использовать MIT Kerberos V5, развернутый в Docker-образе на локальном компьютере, а также self-signed сертификат для обеспечения безопасной коммуникации между клиентом и координатором CedrusData.
Предупреждение
Используйте данное руководство только для обучения, тестирования и разработки. Никогда не используйте self-signed сертификаты в production окружении.
Предварительные шаги#
Установите Docker Engine и выполните post-installation steps, чтобы управлять образами без
sudo
.Установите клиент Kerberos
krb5-user
. Команда для операционных систем на основе Debian:sudo apt install krb5-user
Добавьте в файл
/etc/hosts
следующие записи. Это необходимо для того, чтобы адресамkerberos.example.com
иcoordinator.example.com
соответствовал loopback интерфейс127.0.0.1
. В реальном окружении вам не потребуется этот шаг.127.0.0.1 kerberos.example.com 127.0.0.1 coordinator.example.com
Конфигурация Kerberos#
Запустите Docker-контейнер с Kerberos сервером:
docker run -d --name krb5-server -e KRB5_REALM=EXAMPLE.COM -e KRB5_KDC=localhost -e KRB5_PASS=mypass -p 88:88/udp -p 464:464 -p 749:749 gcavalcante8808/krb5-server
Создайте файл
krb5.conf
в произвольной директории со следующим содержимым:[libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = kerberos.example.com admin_server = kerberos.example.com }
Задайте переменную окружения
KRB5_CONFIG
, которая ссылается на созданный файлkrb5.conf
:export KRB5_CONFIG=/path/to/krb5.conf
Создайте principal и keytab для координатора CedrusData. Для этого вызовите команду
kadmin
, введите парольmypass
и выполните следующие команды. В результате работы команд в текущей директории будет создан файлcoordinator.keytab
.add_principal -randkey cedrus/coordinator.example.com@EXAMPLE.COM xst -k coordinator.keytab cedrus/coordinator.example.com@EXAMPLE.COM exit
Создайте principal и keytab для пользователя, который будет подключаться к CedrusData. Для этого вызовите команду
kadmin
, введите парольmypass
и выполните следующие команды. В результате работы команд в текущей директории будет создан файлuser.keytab
.add_principal -randkey user@EXAMPLE.COM xst -k user.keytab user@EXAMPLE.COM exit
Конфигурация CedrusData#
Включите TLS и shared secrets согласно руководству Подключение к кластеру через TLS с помощью self-signed сертификата.
Добавьте следующие параметры конфигурации в файл
etc/config.properties
. Укажите корректные пути к файламkrb5.conf
иcoordinator.keytab
.http-server.authentication.type=KERBEROS http-server.authentication.krb5.service-name=cedrus http-server.authentication.krb5.principal-hostname=coordinator.example.com http-server.authentication.krb5.keytab=/path/to/coordinator.keytab http.authentication.krb5.config=/path/to/krb5.conf
Запустите узел:
bin/launcher run
Подключение#
Для подключения к CedrusData клиент должен указать principal координатора CedrusData и principal пользователя, а также предоставить пути к файлам krb5.conf
и user.keytab
.
В качестве пользователя (параметр user
) необходимо использовать principal пользователя.
JDBC-драйвер#
Ознакомьтесь в параметрами Kerberos JDBC-драйвера.
Используйте следующую строку подключения, изменив HTTPS порт при необходимости:
jdbc:trino://coordinator.example.com:8443
Задайте следующие параметры подключения, указав корректные пути к файлам krb5.conf
и user.keytab
:
user=user@EXAMPLE.COM
SSL=true
SSLVerification=NONE
KerberosRemoteServiceName=cedrus
KerberosUseCanonicalHostname=false
KerberosServicePrincipalPattern=${SERVICE}@coordinator.example.com
KerberosPrincipal=user@EXAMPLE.COM
KerberosConfigPath=/path/to/krb5.conf
KerberosKeytabPath=/path/to/user.keytab
Проверьте работу подключения.
Trino CLI#
Ознакомьтесь в параметрами Kerberos Trino CLI.
Выполните следующую команду, изменив HTTPS порт при необходимости, а также указав корректные пути к файлам krb5.conf
и user.keytab
:
bin/trino \
--user user@EXAMPLE.COM \
--server https://coordinator.example.com:8443 \
--insecure \
--krb5-remote-service-name cedrus \
--krb5-disable-remote-service-hostname-canonicalization \
--krb5-service-principal-pattern \${SERVICE}@coordinator.example.com \
--krb5-principal user@EXAMPLE.COM \
--krb5-config-path /path/to/krb5.conf \
--krb5-keytab-path /path/to/user.keytab \
--execute "SELECT 1"