Kerberos-аутентификация#

Trino можно настроить для включения Kerberos-аутентификации по HTTPS для клиентов, таких как Trino CLI, а также JDBC- и ODBC- драйверов.

Чтобы включить Kerberos-аутентификацию для Trino, связанные с Kerberos изменения конфигурации вносятся на координаторе Trino.

Для Kerberos-аутентификации требуется использовать TLS и a configured shared secret.

Конфигурация окружения#

Сервисы Kerberos#

Вам потребуется Kerberos KDC, запущенный на узле, до которого координатор Trino может достучаться по сети. KDC отвечает за аутентификацию principals и выдачу session keys, которые могут использоваться с Kerberos-enabled сервисами. Обычно KDC работает на порту 88 — это порт, назначенный IANA для Kerberos.

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

Kerberos необходимо настроить на координаторе Trino. Как минимум, должен быть задан элемент kdc в секции [realms] файла /etc/krb5.conf. Также может потребоваться добавить admin_server и убедиться, что координатор Trino может подключаться к Kerberos admin server на порту 749.

[realms]
  TRINO.EXAMPLE.COM = {
    kdc = kdc.example.com
    admin_server = kdc.example.com
  }

[domain_realm]
  .trino.example.com = TRINO.EXAMPLE.COM
  trino.example.com = TRINO.EXAMPLE.COM

Полная документация по krb5.conf размещена в проекте MIT Kerberos. Если вы используете другую реализацию протокола Kerberos, нужно адаптировать конфигурацию под ваше окружение.

Kerberos principals и keytab-файлы#

Координатору Trino нужен Kerberos principal, как и пользователям, подключающимся к координатору Trino. Этих пользователей нужно создать в Kerberos через kadmin.

Дополнительно координатору Trino требуется keytab file. После создания principal вы можете создать keytab-файл с помощью kadmin:

kadmin
> addprinc -randkey trino@EXAMPLE.COM
> addprinc -randkey trino/trino-coordinator.example.com@EXAMPLE.COM
> ktadd -k /etc/trino/trino.keytab trino@EXAMPLE.COM
> ktadd -k /etc/trino/trino.keytab trino/trino-coordinator.example.com@EXAMPLE.COM

Note

Запуск ktadd рандомизирует ключи principal. Если вы только что создали principal, это не имеет значения. Если principal уже существует и действующие пользователи или сервисы зависят от возможности аутентифицироваться по паролю или keytab, используйте опцию -norandkey в ktadd.

Конфигурация для TLS#

При использовании Kerberos-аутентификации доступ к координатору Trino должен осуществляться через TLS and HTTPS.

Плагин системного контроля доступа#

Координатору Trino с включенным Kerberos, вероятно, потребуется плагин Системный контроль доступа для достижения нужного уровня безопасности.

Конфигурация узла-координатора Trino#

Сначала нужно внести описанные выше изменения окружения, а затем настраивать координатор Trino для Kerberos-аутентификации и HTTPS. После изменения окружения можно изменить файлы конфигурации Trino.

config.properties#

Kerberos-аутентификация настраивается в файле config.properties узла-координатора. Необходимые записи приведены ниже.

http-server.authentication.type=KERBEROS

http-server.authentication.krb5.service-name=trino
http-server.authentication.krb5.principal-hostname=trino.example.com
http-server.authentication.krb5.keytab=/etc/trino/trino.keytab
http.authentication.krb5.config=/etc/krb5.conf

http-server.https.enabled=true
http-server.https.port=7778

http-server.https.keystore.path=/etc/trino/keystore.jks
http-server.https.keystore.key=keystore_password

node.internal-address-source=FQDN

Property

Description

http-server.authentication.type

Тип аутентификации координатора Trino. Должен быть установлен в KERBEROS.

http-server.authentication.krb5.service-name

Имя сервиса Kerberos для координатора Trino. Должно совпадать с Kerberos principal.

http-server.authentication.krb5.principal-hostname

Имя хоста Kerberos для координатора Trino. Должно совпадать с Kerberos principal. Этот параметр необязателен. Если указан, Trino использует это значение в host-части Kerberos principal вместо hostname машины.

http-server.authentication.krb5.keytab

Расположение keytab-файла, который может использоваться для аутентификации Kerberos principal.

http.authentication.krb5.config

Расположение файла конфигурации Kerberos.

http-server.https.enabled

Включает HTTPS-доступ к координатору Trino. Должен быть установлен в true.

http-server.https.port

Порт HTTPS-сервера.

http-server.https.keystore.path

Расположение файла Java Keystore, используемого для защиты TLS.

http-server.https.keystore.key

Пароль keystore. Он должен совпадать с паролем, указанным при создании keystore.

http-server.authentication.krb5.user-mapping.pattern

Регулярное выражение для сопоставления пользователя. При совпадении пользователь заменяется первой regex-группой. При отсутствии совпадения аутентификация отклоняется. По умолчанию (.*).

http-server.authentication.krb5.user-mapping.file

Файл, содержащий правила сопоставления пользователей. Подробнее см. в Сопоставление пользователей.

node.internal-address-source

Kerberos обычно чувствителен к DNS-именам. Установка этого свойства в FQDN обеспечивает корректную работу и использование валидных DNS host names.

См. Standards supported для обсуждения поддерживаемых версий TLS и наборов шифров.

access-control.properties#

Как минимум файл access-control.properties должен содержать свойство access-control.name. Вся остальная конфигурация зависит от конкретной реализации. Подробности см. в Системный контроль доступа.

User mapping#

После аутентификации через Kerberos сервер Trino получает principal пользователя, который обычно похож на email-адрес. Например, когда входит alice, Trino может получить alice@example.com. По умолчанию Trino использует полное имя Kerberos principal, но его можно сопоставить с более коротким именем через user-mapping pattern. Для простых правил сопоставления можно использовать свойство конфигурации http-server.authentication.krb5.user-mapping.pattern со значением Java regular expression, а Trino использует значение первой matcher-группы. Если regular expression не совпадает, аутентификация отклоняется. Для более сложных правил user-mapping см. Сопоставление пользователей.

Troubleshooting#

Настройка Kerberos-аутентификации может быть непростой. Некоторые элементы конфигурации можно независимо проверить вне Trino, чтобы сузить область поиска при решении проблемы.

Проверка Kerberos#

Убедитесь, что можно подключиться к KDC с координатора Trino с помощью telnet:

$ telnet kdc.example.com 88

Проверьте, что keytab-файл может использоваться для успешного получения билета через kinit и klist

$ kinit -kt /etc/trino/trino.keytab trino@EXAMPLE.COM
$ klist

Проверка Java keystore-файла#

Проверьте пароль keystore-файла и его содержимое через Просмотр и проверка keystore.

Дополнительная отладочная информация Kerberos#

Вы можете включить дополнительную отладочную информацию Kerberos для процесса координатора Trino, добавив следующие строки в файл jvm.config Trino:

-Dsun.security.krb5.debug=true
-Dlog.enable-console=true

-Dsun.security.krb5.debug=true включает вывод отладки Kerberos из Kerberos-библиотек JRE. Отладочный вывод идет в stdout, который Trino перенаправляет в систему логирования. -Dlog.enable-console=true включает попадание вывода stdout в логи.

Объем и полезность информации, которую отладочный вывод Kerberos отправляет в логи, варьируются в зависимости от того, на каком этапе сбой аутентификации. Сообщения исключений и stack trace могут дать полезные подсказки о природе проблемы.

См. Troubleshooting Security в документации Java для подробностей о флаге -Djava.security.debug, и Troubleshooting для дополнительной информации о проблемах Java GSS-API и Kerberos.

Дополнительные ресурсы#

Common Kerberos Error Messages (A-M)

Common Kerberos Error Messages (N-Z)

MIT Kerberos Documentation: Troubleshooting