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 |
|---|---|
|
Тип аутентификации координатора Trino. Должен быть установлен в |
|
Имя сервиса Kerberos для координатора Trino. Должно совпадать с Kerberos principal. |
|
Имя хоста Kerberos для координатора Trino. Должно совпадать с Kerberos principal. Этот параметр необязателен. Если указан, Trino использует это значение в host-части Kerberos principal вместо hostname машины. |
|
Расположение keytab-файла, который может использоваться для аутентификации Kerberos principal. |
|
Расположение файла конфигурации Kerberos. |
|
Включает HTTPS-доступ к координатору Trino. Должен быть установлен в |
|
Порт HTTPS-сервера. |
|
Расположение файла Java Keystore, используемого для защиты TLS. |
|
Пароль keystore. Он должен совпадать с паролем, указанным при создании keystore. |
|
Регулярное выражение для сопоставления пользователя. При совпадении пользователь заменяется первой regex-группой. При отсутствии совпадения аутентификация отклоняется. По умолчанию |
|
Файл, содержащий правила сопоставления пользователей. Подробнее см. в Сопоставление пользователей. |
|
Kerberos обычно чувствителен к DNS-именам. Установка этого свойства в |
См. 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)