Аутентификация Kerberos
Kerberos - сетевой протокол аутентификации, позволяющий передавать данные через незащищенные сети для безопасной идентификации. Он в первую очередь предназначен для клиент-серверной модели и обеспечивает взаимную аутентификацию, т.е. и пользователь, и сервер верифицируют друг друга. Существует несколько версий сетевого протокола аутентификации Kerberos; в PolyAnalyst Grid используется MIT Kerberos.
Kerberos в PolyAnalyst Grid используется для доступа к системам, требующим аутентификации Kerberos; в частности, для доступа к системе файлов Hadoop (HDFS).
Обзор Kerberos
Пользователям, не имеющим опыта работы с Kerberos, рекомендуется ознакомиться со следующими терминами и основными принципами работы Kerberos:
-
Принципалы (Principals) - база данных пользователей и сервисов в системе Kerberos.
-
Области (Realms) - административный домен для аутентификации. Всем принципалам назначается конкретная область.
-
Центр выдачи ключей (Key Distribution Center, KDC) - состоит из двух ключевых компонентов:
-
Сервер аутентификации (Authentication Server, AS) - выполняет аутентификацию клиента и отвечает за выпуск Билета к серверу выдачи билетов (Ticket-granting ticket, TGT).
-
Сервер выдачи билетов (Ticket Granting Server, TGS) - отвечает за валидацию билетов к серверу выдачи билетов и выпуск последующих серверных билетов на основе исходных билетов к серверу выдачи билетов.
-
Предположим, что принципалу нужно получить доступ к файловому серверу. В данном случае файл должен быть верифицирован через доверенную третью сторону - Центр выдачи ключей. Во-первых, принципал отправляет запрос на Сервер аутентификации. Сервер аутентификации отправляет ответ с билетом к серверу выдачи билетов, зашифрованный и защищенный паролем Kerberos от принципала, и предоставляет доступ к одной службе - Серверу выдачи билетов. Во-вторых, принципал расшифровывает билет к серверу выдачи билетов, используя свой пароль Kerberos. Когда принципалу нужно получить доступ к сетевому ресурсу, он предоставляет Серверу выдачи билетов ранее предоставленный билет к Серверу выдачи билетов. Затем Сервер выдачи билетов верифицирует Билет к серверу выдачи билетов и подтверждает, что принципалу был предоставлен доступ к запрашиваемому ресурсу.
Поскольку кластерные ресурсы (хосты или службы) не могут каждый раз предоставлять пароль для расшифровки Билета к серверу выдачи билетов, они используют специальный файл, keytab. keytab-файл содержит учетные данные для аутентификации принципала ресурса.
Настройка аутентификации Kerberos для PolyAnalyst Grid
HDFS позволяет осуществлять доступ в двух вариантах:
-
Simple - доступ предоставляется всем. Клиенты могут выбирать любые имена, при этом HDFS доверяет ему и применяет правила ACL (Список управления доступом) для данного пользователя.
-
Kerberos/Token - доступ предоставляется только аутентифицированным пользователям. При аутентификации в качестве внешнего аутентификатора используется Kerberos. HDFS ассоциирует каждый токен с аутентифицированным пользователем, после чего токен используется для дальнейшего взаимодействия с HDFS. Токен - это сущность, которая никак не связана с Kerberos и является собственной сущностью HDFS.
krb5.conf
Сначала необходимо задать значение переменной окружения (KRB5_CONFIG), в которой указывается путь до конфигурационного файла Kerberos (krb5.conf), либо указать этот путь в файлах padbservice.cfg и paserver.cfg в параметре krb5conf_path (путь может быть как относительный так и абсолютный).
Пример конфигурационного файла:
[libdefaults] default_realm = ATHENA.MEGAPUTER dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] ATHENA.MEGAPUTER = { kdc = proliant admin_server = proliant }
Обратите внимание, что на компьютерах с ОС Linux файлы хранятся в специальной директории - "/ etc", где krb5.conf будет сохранен по умолчанию.
Для получения более подробной информации о krb5.conf нажмите здесь.
Обязательно указывайте все области (realms) исключительно в UpperCase как в файле krb5.conf, так и в базе данных MIT Kerberos. В противном случае Kerberos не сможет работать с данной областью и данным принципалом, включающим данную область. |
Существуют определенные ограничения для входных символов в названии области. |
Для корректной работы в Kerberos должны присутствовать пользователи для сервисов PolyAnalyst Grid:
-
один пользователь для padbservice с принципалом вида: <service_name>@<realm>
-
по одному пользователю на каждый сервер с областью:<service_name>/<host_name>@<realm>
Для приведенных принципалов должны быть сгенерированы ключи, сохраненные в keytab файлы. Для этого используются утилиты kadmin и kadmin.local.
Перед началом работы с Kerberos добавьте корректные значения в конфигурационные файлы PolyAnalyst Grid (padbservice.cfg и paserver.cfg):
padbservice.cfg
Ключ | Описание |
---|---|
service_name |
наименование сервиса для padbservice. По умолчанию: padbservice |
keytab_path |
путь к файлу keytab для аутентификации <service_name>. Если указан локальный путь, то он отсчитывается от директории data. По умолчанию: krb5.keytab, что соответствует файлу: pa7dist/data/krb5.keytab. |
krb5conf_path |
путь к файлу krb5.conf. Этот путь может быть относительный или абсолютный, как и keytab_path. Если не указан, берется путь указанный в переменной окружения KRB5_CONFIG. Если и переменная окружения не задана, используется путь по умолчанию: /etc/krb5.conf. |
realm |
область для всех сервисов PA Grid. Если не указать эту настройку или оставить ее пустой, поддержка Kerberos будет отключена. |
padbservice на основе указанной конфигурации будет запрашивать у Сервера аутентификации (Центра выдачи ключей) (AS_REQ) Билет к серверу выдачи билетов для <service_name>@<realm> принципала, используя указанный keytab файл.
paserver.cfg
Ключ | Описание |
---|---|
service_name |
наименование сервиса для padbservice. По умолчанию: padbservice |
keytab_path |
путь к файлу keytab для аутентификации <service_name>. Если указан локальный путь, то он отсчитывается от директории data. По умолчанию: krb5.keytab, что соответствует: pa7dist/data/krb5.keytab. |
krb5conf_path |
путь к файлу krb5.conf. Этот путь может быть относительный или абсолютный, как и keytab_path. Если не указан, берется путь указанный в переменной окружения KRB5_CONFIG. Если и переменная окружения не задана, используется путь по умолчанию: /etc/krb5.conf. |
padbservice на основе указанной конфигурации будет запрашивать у Сервера аутентификации (Центра выдачи ключей) (AS_REQ) Билет к серверу выдачи билетов для <service_name>/<host_name>@<realm> принципала используя указанный keytab файл. <realm> запрашивается у padbservice во время рукопожатия. Важное отличие принципала paserver-а от padbservice-а заключается в использовании <host_name> машины на которой работает сервер. Это позволяет использовать один и тот же конфигурационный файл на всех серверах.
Аутентификация пользователя в PolyAnalyst Grid
-
При запуске padbservice запрашивается Билет к серверу выдачи билетов для <padbservice_name> @ <realm> используя запись из предоставленного keytab.
Если Билет к серверу выдачи билетов не предоставляется, поддержка Kerberos отключается. PolyAnalyst Grid продолжает работу без Kerberos. -
При запуске paserver запрашивается Билет к серверу выдачи билетов для принципала <paserver_name>/<host_name>@<realm>, используя запись из предоставленного keytab.
-
Пользователь вводит логин и пароль, которые верифицируются через LDAP и Kerberos. Соответственно, один и тот же пользователь с одинаковым паролем должен быть доступен для логина через обе эти системы. В случае корректной настройки cross-realm trust между AD и MIT Kerberos, то проблем не возникает, поскольку данное условие достигается автоматически в силу того, что пользователи аутентифицируются именно в AD.
-
Логин и пароль пользователя используется для получения Билета к серверу выдачи билетов пользователя.
-
Сервер запрашивает Сервер выдачи билетов от пользователя до padbservice-а и производит передачу полученного Билета к серверу выдачи билетов на padbservice.
-
Padbservice запрашивает Сервер выдачи билетов от пользователя до всех серверов, входящих в кластер, и перенаправляет его на эти сервера.
-
Сервер сохраняет полученный Билет к серверу выдачи билетов в отдельный ccache по пути: pa7distr/data/ccaches/users/<username>.ccache
Доступ к HDFS
При попытке обращения к HDFS PolyAnalyst Grid предоставляет ccache с пользовательским Билетом к серверу выдачи билетов модифицированной версии libhdfs. HDFS разрешает доступ и транслирует пользовательский принципал в соответствии с правилами транслирования имен указанных в настройках HDFS. Затем производится доступ к файловой системе и возврат результата.
Для доступа к HDFS через PolyAnalyst Grid выполните следующие действия:
-
Добавьте на скрипт узел-источник данных (Файлы CSV, Файлы).
-
Откройте Настройки кластера в Администраторе и добавьте пути к алисам, например: my_hdfs_alias | linux | "hdfs://hadoop.kerberised.athena.megaputer:9000/".
-
Откройте Настройки узла-источника данных, нажмите кнопку Выбор на вкладке Настройки. Появится окно Путь, где вы найдете папку see my_hdfs_alias.
-
Выберите нужный файл в этой папке и запустите узел.