Использование Kerberos для аутентификации в кластере#

Данное руководство содержит набор шагов для настройки авторизации в CedrusData с помощью Kerberos. Мы будем использовать MIT Kerberos V5, развернутый в Docker-образе на локальном компьютере, а так же self-signed сертификат для обеспечения безопасной коммуникации между клиентом и координатором CedrusData.

Предупреждение

Используйте данное руководство только для обучения, тестирования и разработки. Никогда не используйте self-signed сертификаты в production окружении.

Предварительные шаги#

  1. Установите Docker Engine и выполните post-installation steps, чтобы управлять образами без sudo.

  2. Установите клиент Kerberos krb5-user. Команда для операционных систем на основе Debian:

    sudo apt install krb5-user
    
  3. Добавьте в файл /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#

  1. Запустите 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
    
  2. Создайте файл 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
     }
    
  3. Задайте переменную окружения KRB5_CONFIG, которая ссылается на созданный файл krb5.conf:

    export KRB5_CONFIG=/path/to/krb5.conf
    
  4. Создайте 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
    
  5. Создайте principal и keytab для пользователя, который будет подключаться к CedrusData. Для этого выполните команду kadmin, введите пароль mypass и выполните следующие команды. В результате работы команд в текущей директории будет создан файл user.keytab.

    add_principal -randkey user@EXAMPLE.COM
    xst -k user.keytab user@EXAMPLE.COM
    exit
    

Конфигурация CedrusData#

  1. Включите TLS и shared secrets согласно руководству Подключение к кластеру через TLS с помощью self-signed сертификата.

  2. Добавьте следующие параметры конфигурации в файл 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
    
  3. Запустите узел:

    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"