Сопоставление пользователей#

Сопоставление пользователей определяет правила преобразования пользователей из метода аутентификации в пользователей Trino. Это сопоставление особенно важно для Kerberos или аутентификации по сертификату, где имена пользователей сложные, например alice@example или CN=Alice Smith,OU=Finance,O=Acme,C=US.

Есть два способа преобразовать формат имени пользователя конкретного поставщика аутентификации в простой формат имени пользователя Trino:

Правило сопоставления по шаблону#

Если все имена пользователей вашего метода аутентификации можно сопоставить одним регулярным выражением, рассмотрите использование правила сопоставления по шаблону.

Например, ваш метод аутентификации использует все имена пользователей в формате alice@example.com без исключений. В этом случае выберите regex, который разбивает входящие имена пользователей как минимум на две группы захвата regex, так чтобы первая группа захвата включала только часть имени до знака @. Для этого случая можно использовать простой regex (.*)(@.*).

Trino автоматически использует первую группу захвата - группу $1 - как имя пользователя, которое получается после подстановки regex. Если регулярное выражение не соответствует входящему имени пользователя, аутентификация отклоняется.

Укажите шаблон regex в соответствующем свойстве файла config.properties вашего координатора, используя одно из свойств *user-mapping.pattern из таблицы ниже, соответствующее типу аутентификации настроенного поставщика аутентификации. Например, для поставщика аутентификации LDAP:

http-server.authentication.password.user-mapping.pattern=(.*)(@.*)

Помните, что тип аутентификации представляет категорию, например PASSWORD, OAUTH2, KERBEROS. Один и тот же тип аутентификации может использоваться несколькими методами аутентификации. Например, методы Password file, LDAP и Salesforce используют один и тот же тип аутентификации PASSWORD.

Можно указать разные шаблоны сопоставления пользователей для разных типов аутентификации, когда включено несколько методов аутентификации:

Тип аутентификации

Свойство

Password (file, LDAP, Salesforce)

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

OAuth2

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

Certificate

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

Header

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

JSON Web Token

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

Kerberos

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

Insecure

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

Правила сопоставления в файле#

Используйте метод правила сопоставления в файле, если ваш поставщик аутентификации задает имена пользователей способом, который нельзя свести к одному правилу, либо если вы хотите исключить набор пользователей из доступа к кластеру.

Правила загружаются из JSON-файла, указанного в свойстве конфигурации. Сопоставление основано на первом подходящем правиле, обрабатываемом сверху вниз. Если не подошло ни одно правило, аутентификация отклоняется. Каждое правило состоит из следующих полей:

  • pattern (обязательно): regex для сопоставления с именем пользователя, полученным из метода аутентификации.

  • user (необязательно): строка замены для подстановки по pattern. Значение по умолчанию - $1.

  • allow (необязательно): логическое значение, указывающее, должна ли быть разрешена аутентификация для текущего совпадения.

  • case (необязательно): одно из значений:

    • keep - сохранить совпавшее имя пользователя как есть (поведение по умолчанию)

    • lower - преобразовать совпавшее имя пользователя в нижний регистр; таким образом, и Admin, и ADMIN станут admin

    • upper - преобразовать совпавшее имя пользователя в верхний регистр; таким образом, и admin, и Admin станут ADMIN

Следующий пример сопоставляет все имена пользователей в формате alice@example.com просто в alice, кроме пользователя test, которому аутентификация запрещена. Также он сопоставляет пользователей в формате bob@uk.example.com в bob_uk:

{
    "rules": [
        {
            "pattern": "test@example\\.com",
            "allow": false
        },
        {
            "pattern": "(.+)@example\\.com"
        },
        {
            "pattern": "(?<user>.+)@(?<region>.+)\\.example\\.com",
            "user": "${user}_${region}"
        },
        {
            "pattern": "(.*)@uppercase.com",
            "case": "upper"
        }
    ]
}

Чтобы настроить приведенный выше пример для использования метода аутентификации LDAP с типом аутентификации PASSWORD, добавьте следующую строку в файл config.properties вашего координатора:

http-server.authentication.password.user-mapping.file=etc/user-mapping.json

Вы можете разместить JSON-файл сопоставления пользователей в любом месте локальной файловой системы на координаторе, но обычно его размещают в каталоге etc. Для имени файла и его расширения нет стандарта, хотя традиционно используется расширение .json. Укажите абсолютный путь или путь относительно корня установки Trino.

Можно указать разные файлы сопоставления пользователей для разных типов аутентификации, когда включено несколько методов аутентификации:

Тип аутентификации

Свойство

Password (file, LDAP, Salesforce)

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

OAuth2

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

Certificate

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

Header

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

JSON Web Token

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

Kerberos

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

Insecure

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