Аутентификация 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

  1. При запуске padbservice запрашивается Билет к серверу выдачи билетов для <padbservice_name> @ <realm> используя запись из предоставленного keytab.

    Если Билет к серверу выдачи билетов не предоставляется, поддержка Kerberos отключается. PolyAnalyst Grid продолжает работу без Kerberos.
  2. При запуске paserver запрашивается Билет к серверу выдачи билетов для принципала <paserver_name>/<host_name>@<realm>, используя запись из предоставленного keytab.

  3. Пользователь вводит логин и пароль, которые верифицируются через LDAP и Kerberos. Соответственно, один и тот же пользователь с одинаковым паролем должен быть доступен для логина через обе эти системы. В случае корректной настройки cross-realm trust между AD и MIT Kerberos, то проблем не возникает, поскольку данное условие достигается автоматически в силу того, что пользователи аутентифицируются именно в AD.

  4. Логин и пароль пользователя используется для получения Билета к серверу выдачи билетов пользователя.

  5. Сервер запрашивает Сервер выдачи билетов от пользователя до padbservice-а и производит передачу полученного Билета к серверу выдачи билетов на padbservice.

  6. Padbservice запрашивает Сервер выдачи билетов от пользователя до всех серверов, входящих в кластер, и перенаправляет его на эти сервера.

  7. Сервер сохраняет полученный Билет к серверу выдачи билетов в отдельный ccache по пути: pa7distr/data/ccaches/users/<username>.ccache

Доступ к HDFS

При попытке обращения к HDFS PolyAnalyst Grid предоставляет ccache с пользовательским Билетом к серверу выдачи билетов модифицированной версии libhdfs. HDFS разрешает доступ и транслирует пользовательский принципал в соответствии с правилами транслирования имен указанных в настройках HDFS. Затем производится доступ к файловой системе и возврат результата.

Для доступа к HDFS через PolyAnalyst Grid выполните следующие действия:

  1. Добавьте на скрипт узел-источник данных (Файлы CSV, Файлы).

  2. Откройте Настройки кластера в Администраторе и добавьте пути к алисам, например: my_hdfs_alias | linux | "hdfs://hadoop.kerberised.athena.megaputer:9000/".

  3. Откройте Настройки узла-источника данных, нажмите кнопку Выбор на вкладке Настройки. Появится окно Путь, где вы найдете папку see my_hdfs_alias.

  4. Выберите нужный файл в этой папке и запустите узел.