Использование 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. Для этого внутри контейнера
krb5-serverвызовите командуkadmin.local, выполните следующие команды. В результате работы команд будет создан файлcoordinator.keytab.docker exec -it krb5-server sh kadmin.local add_principal -randkey HTTP/coordinator.example.com@EXAMPLE.COM xst -k /tmp/coordinator.keytab HTTP/coordinator.example.com@EXAMPLE.COM
Аналогичным образом создайте principal и keytab для пользователя, который будет подключаться к CedrusData. В результате будет создан файл
user.keytab. Скопируйте полученные keytab-файлы на хост-машину.add_principal -randkey user@EXAMPLE.COM xst -k /tmp/user.keytab user@EXAMPLE.COM exit exit docker cp krb5-server /tmp/*.keytab .
Конфигурация 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=HTTP 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=HTTP
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 HTTP \
--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"
Trino Web UI (Linux + Firefox)#
Откройте новый терминал, установите переменные окружения и получите тикет для принципала
user(в примере укажите корректный путь к файламkrb5.confиuser.keytab)
export KRB5_CONFIG=/path/to/krb5.conf
export KRB5CCNAME=${HOME}/krb5cc
kinit -k -t /path/to/user.keytab user@EXAMPLE.COM
В этом же окне терминала запустите Firefox и проверьте работу консоли
firefox http://coordinator.example.com:8443
В случае если с параметрами по умолчанию подключение не удалось (Unauthorized):
Откройте конфигурацию Firefox: в URI введите
about:configОтредактируйте параметры:
network.negotiate-auth.allow-non-fqdn=truenetwork.negotiate-auth.allow-proxies=truenetwork.http.auth.allow-secure-redirects=truenetwork.negotiate-auth.trusted-uris=coordinator.example.comnetwork.negotiate-auth.delegation-uris=coordinator.example.com
Перезапустите Firefox и заново проверьте работу Trino UI.
Trino Web UI (Linux + Google Chrome)#
Откройте новый терминал, установите переменные окружения и получите тикет для принципала
user(в примере укажите корректный путь к файламkrb5.confиuser.keytab)
export KRB5_CONFIG=/path/to/krb5.conf
export KRB5CCNAME=${HOME}/krb5cc
kinit -k -t /path/to/user.keytab user@EXAMPLE.COM
Сконфигурируйте политики Chrome для Kerberos-аутентификации.
sudo mkdir -p /etc/opt/chrome/policies/managed
Создать или отредактировать файл /etc/opt/chrome/policies/managed/kerberos.json, добавить параметры
{
"AuthServerAllowlist": "coordinator.example.com",
"AuthNegotiateDelegateAllowlist": "coordinator.example.com",
"AuthSchemes": "basic,digest,ntlm,negotiate"
}
Проверьте работу, запустив браузер командой:
google-chrome http://coordinator.example.com:8443
Trino REST API#
Откройте новый терминал, установите переменные окружения и получите тикет для принципала
user(в примере укажите корректный путь к файламkrb5.confиuser.keytab)
export KRB5_CONFIG=/path/to/krb5.conf
export KRB5CCNAME=${HOME}/krb5cc
kinit -k -t /path/to/user.keytab user@EXAMPLE.COM
Выполняйте необходимые команды (при необходимости использования сертификата замените
--insecureна ваш сертификат--cacert server.pem):
curl --negotiate -u : --insecure --ciphers DEFAULT@SECLEVEL=1 \
-X POST "https://coordinator.example.com:8443/v1/statement" \
--data-binary "select 'Hello Kerberos!'"