Настройка Ambari и Hadoop для Kerberos

В данной главе описывается настройка Kerberos для надежной аутентификации пользователей и хостов Hadoop в кластере, управляемом Ambari:

  • Обзор Kerberos;
  • Принципалы Hadoop и Kerberos;
  • Установка и настройка KDC;
  • Подключение системы безопасности Kerberos в Ambari;
  • Клиентские пакеты Kerberos;
  • Отключение системы безопасности Kerberos в Ambari;
  • Настройка шаблона атрибута.

Обзор Kerberos

Жесткая аутентификация и установление личности пользователя – основа безопасного доступа в Hadoop. Пользователи должны иметь возможность надежно “идентифицировать” себя, а затем использовать эту идентификацию во всем кластере Hadoop. Как только это будет сделано, данные пользователи могут получить доступ к ресурсам (например, к файлам или каталогам) или взаимодействовать с кластером (например, выполнять задания MapReduce). Помимо пользователей, сами ресурсы кластера Hadoop (такие как хосты и сервисы) должны проходить аутентификацию друг с другом, чтобы избежать потенциально опасных вредоносных систем или систем, “позиционирующих себя” как надежные компоненты кластера с целью получения доступа к данным.

Hadoop использует Kerberos в качестве основы для строгой аутентификации и обеспечения идентичности пользователям и сервисам. Kerberos является сторонним механизмом аутентификации, на который полагаются пользователи и сервисы для удостоверения подлинности друг друга. Сам сервер Kerberos известен как Key Distribution Center (Центр распределения ключей) или KDC. Он состоит из трех частей:

  • База данных пользователей и сервисов (известных как принципалы), о которых он знает, и соответствующие пароли Kerberos;
  • Сервер аутентификации (AS), который выполняет первоначальную проверку подлинности и выдает Ticket Granting Ticket (TGT);
  • Ticket Granting Server (TGS) – сервер, который оформляет последующие билеты на основе начального TGT.

Пользователь-принципал запрашивает аутентификацию от AS. AS отправляет в ответ TGT, который зашифрован с использованием пароля пользователя-принципала Kerberos, известный только пользователю и AS. Пользователь-принципал расшифровывает TGT локально, используя свой пароль Kerberos, и с этого момента до истечения срока действия билета пользователь-принципал может использовать TGT для получения билетов от TGS. Данные билеты позволяют принципалу получить доступ к различным сервисам.

Поскольку ресурсы кластера (хосты или сервисы) не могут каждый раз предоставлять пароль для расшифровки TGT, они используют специальный файл keytab, который содержит учетные данные аутентификации ресурса. Набор хостов, пользователей и сервисов, над которыми сервер Kerberos имеет контроль, называется сферой.

Табл. 25. Термины и определения
Термин Определение
Key Distribution Center, KDC Надежный источник для аутентификации в экосистеме с поддержкой Kerberos
Сервер Kerberos KDC Машина или сервер, который служит в качестве центра распределения ключей
Клиент Kerberos Любая машина в кластере, которая аутентифицируется с KDC
Принципал Уникальное имя пользователя или сервиса, который аутентифицируется с KDC
Keytab Файл, содержащий один или несколько принципалов и их ключи
Сфера Сеть Kerberos, включающая KDC и ряд клиентов
KDC Admin Account Учетная запись администратора, используемая Ambari для создания принципов и генерации ключей в KDC

Принципалы Hadoop и Kerberos

Каждый сервис и под-сервис в Hadoop должны иметь своего принципала. Имя принципала в данной сфере состоит из основного имени и имени экземпляра – это полное доменное имя хоста, на котором работает сервер. Учетные данные серверов хранятся в файле keytab, который извлекается из базы данных Kerberos с помощью принципала сервера и хранится локально в защищенном каталоге на узле компонента сервера (Рис.71.).

../_images/ambari_sec_pic.1.png

Рис. 71. Права доступа к кластеру

Пример условного обозначения имени принципалов и Keytabs приведен в таблице.

Табл. 26. Условное обозначение имени принципалов и Keytabs
  Условное обозначение Пример
Principals $service_component_name/$FQDN @EXAMPLE.COM nn/c6401.ambari.apache.org@EXAMPLE.COM
Keytabs $service_component_abbreviation. service.keytab /etc/security/keytabs/nn.service.keytab

В дополнение к Hadoop Service Principals, сам Ambari также требует, чтобы набор Ambari-принципалов выполнял служебные “smoke” проверки и проверку работоспособности. Файлы Keytab для Ambari-принципалов, или “headless”, находятся на каждом хосте кластера, так же как и для принципалов сервиса.

В примере условного обозначения имени принципалов и Keytabs указано основное имя для каждого сервисного принципала. Основа имени, например, nn или hive, представляют собой соответственно сервис NameNode или Hive. К основному имени добавляется имя экземпляра и полное доменное имя хоста, на котором оно выполняется. Эта схема обеспечивает уникальное имя сервисам, которые работают на нескольких хостах, таких как DataNodes и NodeManagers. Добавление имени хоста служит для различия, например, запроса из DataNode A и запроса из DataNode B. Это важно по следующим причинам:

  • Данные Kerberos для одного DataNode не подвергаются риску совпасть с данными других DataNodes;
  • Если несколько DataNodes имеют одинаковый принципал и одновременно подключаются к одному NameNode, и если аутентификатор Kerberos имеет одинаковые временные метки, в таком случае аутентификация отклоняется как повторный запрос.

Установка и настройка KDC

Ambari может настроить Kerberos в кластере для работы с существующим MIT KDC или с существующей Active Directory. В данном разделе описываются шаги, необходимые для подготовки к интеграции.

Если у вас нет существующего KDC (MIT или Active Directory), необходимо установить новый MIT KDC.

Important

Установка KDC на узле кластера уже после установки клиента Kerberos может перезаписать созданный Ambari файл krb5.conf

При выборе автоматической настройки Kerberos Ambari самостоятельно подключается к KDC, создает необходимых принципалов, генерирует и распространяет keytabs. При выборе ручной настройки Kerberos необходимо вручную создавать принципалов, генерировать и распространять keytabs.

  • Использование существующего MIT KDC;
  • Использование существующей Active Directory;
  • Ручная настройка Kerberos;
  • Установка нового MIT KDC.

Использование существующего MIT KDC

Для использования существующего MIT KDC для кластера необходимо подготовить:

  • Серверы Ambari и кластеры, имеющие сетевой доступ как к административным узлам KDC, так и к самому KDC;
  • Учетные данные администратора KDC.

Дальнейшие действия описаны в разделе Подключение системы безопасности Kerberos в Ambari.

Использование существующей Active Directory

Для использования существующей Active Directory для кластера с автоматической установкой Kerberos необходимо подготовить:

  • Серверы Ambari и кластеры, имеющие доступ к сети и DNS-именам Domain Controllers;
  • Настроить конфигурацию LDAP (LDAPS) Active Directory;
  • Пользовательскую Active Directory для принципалов. Например, “OU = Hadoop, OU = People, dc = apache, dc = org”;
  • Учетные данные администратора Active Directory с с настроенным правом “Создание, удаление и управление учетными записями пользователей”.

Дальнейшие действия описаны в разделе Подключение системы безопасности Kerberos в Ambari.

Ручная настройка Kerberos

Для ручной настройки Kerberos необходимо подготовить:

  • Сетевой доступ узлов кластера к KDC;
  • Установить утилиты клиента Kerberos (например, kinit) на каждом узле кластера;
  • Установить расширения Java Cryptography (JCE) на хосте сервера Ambari Server и на всех узлах кластера;
  • Вручную создать сервисные и Ambari принципалы в KDC перед выполнением мастера;
  • Создать вручную и распространить ключи для принципалов сервисов и Ambari на узлы кластера перед выполнением мастера.

Дальнейшие действия описаны в разделе Подключение системы безопасности Kerberos в Ambari.

Установка нового MIT KDC

В данном разделе приведено подробное описание процесса установки KDC:

  • Установка сервера KDC;
  • Создание базы данных Kerberos;
  • Запуск KDC;
  • Создание администратора Kerberos.

Important

Поскольку Kerberos является точным к времени протоколом, все хосты в сфере должны синхронизироваться по времени, например, используя протокол сетевого времени (NTP)

Если локальное системное время клиента отличается от времени в KDC хотя бы на 5 минут, клиент не сможет аутентифицироваться.

Установка сервера KDC

Для установки сервера KDC необходимо выполнить следующие действия:

  1. Установить новую версию сервера KDC:
  • RHEL / CentOS:
yum install krb5-server krb5-libs krb5-workstation
  • SLES:
Zypper install krb5 krb5-server krb5-client
  1. Используя текстовый редактор, открыть файл конфигурации сервера KDC, расположенный по умолчанию в Vi/etc/krb5.conf;
  2. Изменить раздел [realms] этого файла, заменив параметр kerberos.example.com для свойств kdc и admin_server, установленный по умолчанию с Fully Qualified Domain Name хоста сервера KDC, как показано в примере, где kerberos.example.com заменен на my.kdc.server:
[realms]
 EXAMPLE.COM = {
   kdc = my.kdc.server
   admin_server = my.kdc.server
}

Создание базы данных Kerberos

Для создания базы данных Kerberos необходимо использовать утилиту kdb5_util:

  • RHEL / CentOS:
Kdb5_util create -s
  • SLES:
Kdb5_util create –s

Запуск KDC

Для запуска сервера KDC и сервера администратора KDC необходимо выполнить команды:

  • RHEL/CentOS 6:
/etc/rc.d/init.d/krb5kdc start
/etc/rc.d/init.d/kadmin start
  • RHEL/CentOS 7:
systemctl start krb5kdc
systemctl start kadmin
  • SLES 11:
rckrb5kdc start
rckadmind start

При установке и управлении собственным MIT KDC важно настроить сервер KDC на автоматический запуск при загрузке:

  • RHEL/CentOS 6:
chkconfig krb5kdc on
chkconfig kadmin on
  • RHEL/CentOS 7:
systemctl enable krb5kdc
systemctl enable kadmin
  • SLES 11:
chkconfig rckrb5kdc on
chkconfig rckadmind on

Создание администратора Kerberos

Принципалы Kerberos могут быть созданы либо на самой машине KDC, либо через сеть, используя принципал admin. В последующей инструкции предполагается, что используется компьютер KDC и команда от утилиты администратора kadmin.local. Использование kadmin.local на машине KDC позволяет создавать принципалов без необходимости создания отдельного принципала-администратора перед началом работы.

При включении Kerberos для подключения Ambari к KDC, создания кластерных принципалов и генерации keytabs необходимо предоставить учетные данные администратора Ambari.

  1. Создать администратора KDC, путем создания принципала-администратора:
Kadmin.local -q "addprinc admin / admin"
  1. Убедиться, что созданный администратор имеет права в ACL KDC. Открыть файл ACL KDC, используя текстовый редактор:
  • RHEL / CentOS:
Vi /var/kerberos/krb5kdc/kadm5.acl
  • SLES:
Vi /var/lib/kerberos/krb5kdc/kadm5.acl
  1. Убедиться, что файл ACL KDC содержит запись, позволяющую принципал-администратору управлять KDC в используемой конкретной сфере. При использовании сферы, отличной от EXAMPLE.COM, необходимо убедиться, что есть запись для конкретной сферы. Например, для принципала admin/admin@HADOOP.COM следующая запись:
*/admin@HADOOP.COM *
  1. После редактирования и сохранения файла kadm5.acl необходимо перезапустить процесс kadmin:
  • RHEL/CentOS 6:
/etc/rc.d/init.d/kadmin restart
  • RHEL/CentOS 7:
systemctl restart kadmin
  • SLES 11:
rckadmind restart

Подключение системы безопасности Kerberos в Ambari

Независимо от того, какая выбрана настройка Kerberos – автоматическая или ручная – Ambari предоставляет мастера установки, помогающего включить Kerberos в кластере. В данном разделе содержится информация о подготовке Ambari перед запуском мастера и о шагах для его запуска.

  • Установка JCE;
  • Запуск мастера Kerberos.

Important

Необходимым условием для включения Kererbos является установка JCE на всех узлах кластера (включая сервер Ambari), имеющих хост сервера Ambari как часть кластера. Это говорит о том, что на сервере Ambari Server должен быть запущен агент Ambari

Установка JCE

Перед включением Kerberos в кластере необходимо развернуть файлы безопасности Java Cryptography Extension (JCE) на сервере Ambari и на всех узлах кластера.

Important

Если используется Oracle JDK, необходимо распространять и устанавливать JCE на всех узлах кластера, включая сервер Ambari. Обязательно требуется перезапустить сервер Ambari после установки JCE

Если используется OpenJDK, дистрибутивы OpenJDK устанавливаются автоматически с неограниченной мощностью JCE и, следовательно, установка JCE не требуется.

  1. Для установки JCE необходимо на сервере Ambari получить файл JCE, подходящий для версии JDK на вашем кластере:
  1. Архив с полученным файлом необходимо сохранить во временной папке;
  2. На сервере Ambari и на каждом узле кластера добавить неограниченные права безопасности JCE:
$JAVA_HOME/jre/lib/security/

Например, выполнить следующие действия для извлечения прав из JDK, установленном на хосте:

unzip -o -j -q jce_policy-8.zip -d /usr/jdk64/jdk1.8.0_40/jre/lib/security/
  1. Перезапустить сервер Ambari;
  2. Перейти к началу работы мастера безопасности.

Запуск мастера Kerberos

Ambari предоставляет три варианта по установке Kerberos:

  • Через существующий MIT KDC;
  • Через существующую Active Directory;
  • Ручная настройка принципалов и keytabs Kerberos.

При выборе автоматической установки Kerberos – через существующий MIT KDC или Active Directory – мастер Kerberos запрашивает информацию, связанную с KDC: учетную запись администратора KDC и принципалов Ambari. После предоставления сведений Ambari автоматически создает принципалов, генерирует keytabs и распространяет их на хосты в кластере. Сервисы настраиваются для Kerberos, и сервисные компоненты перезапускаются для аутентификации с KDC. Подробное описание автоматической установки Kerberos приведено в разделе «Автоматическая настройка Kerberos».

При выборе ручной настройки Kerberos необходимо самостоятельно создавать принципалов и генерировать и распространять keytabs. Подробное описание ручной установки приведено в разделе “Ручная настройка Kerberos”.

Автоматическая настройка Kerberos

Для автоматической настройки Kerberos необходимо выполнить следующие действия:

  1. Необходимо убедиться, что KDC установлен и настроен, а также подготовлен JCE на каждом хосте в кластере;
  2. Войти в Ambari-Web и перейти на вкладку “Admin ‣ Kerberos”;
  3. Нажать Enable Kerberos, чтобы запустить мастер;
  4. Выбрать тип KDC, который используется, и подтвердить, что необходимые условия выполнены;
  5. Предоставить информацию о KDC и учетной записи администратора;
  6. Далее приведен перечень необязательных настроек:
  • В поле “Домены” указать список шаблонов для сопоставления хостов в кластере с соответствующей сферой. Например, если хосты имеют общий домен в своем “FQDN”, таком как host1.mycompany.local и host2.mycompany.local, необходимо установить следующее:
.mycompany.local,mycompany.local
  • Чтобы управлять клиентом Kerberos krb5.conf вручную (вместо управления им Ambari), развернуть раздел “Advanced krb5-conf” и снять флажок “Manage”. При этом krb5.conf должен быть настроен на каждом хосте.
  • Чтобы Ambari не установил клиентские библиотеки Kerberos на всех хостах, развернуть раздел “Advanced kerberos-env” и снять флажок “Install OS-specific Kerberos client package(s)”. При этом должны быть установлены утилиты клиента Kerberos на каждом хосте.
  • Если клиентские библиотеки Kerberos находятся в нестандартных папках, развернуть раздел “Advanced kerberos-env” и настроить опцию Executable Search Paths.
  • Если KDC имеет пароль безопасности, развернуть раздел “Advanced kerberos-env” и настроить параметры пароля.
  • Ambari проверяет настройку Kerberos, создав для этого тестового принципала. Чтобы переименовать его необходимо развернуть раздел “Advanced kerberos-env” и изменить наименование. По умолчанию тестовое имя принципала представляет собой комбинацию имени и даты кластера ($ {cluster_name} - $ {short_date}). Данный принципал будет удален после завершения теста.
  • Если необходимо настроить атрибуты для принципалов, которые Ambari создает при использовании Active Directory, следует обратиться к разделу “Настройка шаблона атрибута” для получения дополнительной информации. При использовании MIT KDC можно передать параметры атрибута в разделе “Advanced kerberos-env”. Например, можно установить параметры, относящиеся к pre-auth или max и обновить их:
-requires_preauth -maxrenewlife "7 days"
  1. Продолжить установку;
  2. Ambari устанавливает клиентов Kerberos на хостах и проверяет доступ к KDC и возможность создания принципалов, генерации keytab и их распространения;
  3. Настроить идентификаторы Kerberos, используемые Hadoop, и перейти к керберизации кластера.

На шаге “Configure Identities” (настройка идентификаторов) обязательно посмотреть имена принципалов, в частности, Ambari Principals в таблице “General”. Эти имена, по умолчанию, добавляют имя кластера каждому принципалу Ambari. Можно оставить значение по умолчанию или изменить его, удалив - $ {имя-кластера} из строки имени принципала. Например, если кластер назван ADH, а сфера – EXAMPLE.COM, то hdfs принципала создается как hdfs-ADH@EXAMPLE.COM.

  1. Подтвердить конфигурацию. По желанию можно загрузить CSV-файл с принципалами и ключами для их автоматической генерации Ambari;
  2. Нажать Next для начала процесса;
  3. После создания принципалов, генерации и распространения ключей Ambari обновляет конфигурации кластера, а затем запускает и тестирует сервисы в кластере;
  4. Завершить работу мастера после окончания процесса.

Ручная настройка Kerberos

Для ручной настройки Kerberos необходимо выполнить следующие действия:

  1. Убедиться, что KDC установлен и настроен, а также подготовлен JCE на каждом хосте в кластере;
  2. Войти в Ambari-Web и перейти на вкладку “Admin ‣ Kerberos”;
  3. Нажать Enable Kerberos, чтобы запустить мастер;
  4. Выбрать параметр “Manage Kerberos principals” и “keytabs manually” и убедиться, что выполнены необходимые условия;
  5. Предоставить информацию о KDC и учетной записи администратора.
  • Если клиентские библиотеки Kerberos находятся в нестандартных папках, развернуть раздел “Advanced kerberos-env” и настроить опцию Executable Search Paths.
  1. Настроить идентификаторы Kerberos, используемые Hadoop, и перейти к керберизации кластера.

На шаге “Configure Identities” (настройка идентификаторов) обязательно посмотреть имена принципалов, в частности, Ambari Principals в таблице “General”. Эти имена, по умолчанию, добавляют имя кластера каждому принципалу Ambari. Можно оставить значение по умолчанию или изменить его, удалив - $ {имя-кластера} из строки имени принципала. Например, если кластер назван ADH, а сфера – EXAMPLE.COM, то hdfs принципала создается как hdfs-ADH@EXAMPLE.COM.

  1. Подтвердить конфигурацию. Поскольку выбран параметр ручной настройки “Manual Kerberos Setup”, необходимо получить CSV-файл со списком принципалов и ключей, необходимых для работы кластера с Kerberos.

Important

Не продолжайте работу до тех пор, пока вручную не будут созданы и распределены узлам кластера принципалы и ключи

  1. Нажать Next для продолжения;
  2. Ambari обновляет конфигурации кластера, а затем запускает и тестирует сервисы в кластере;
  3. Завершить работу мастера после окончания процесса.

Клиентские пакеты Kerberos

При автоматическом подключении Kerberos Ambari устанавливает клиенты Kerberos на узлах кластера. В зависимости от операционной системы устанавливаются следующие пакеты:

Табл. 27. Пакеты, устанавливаемые в зависимости от ОС
Операционная система Пакет
RHEL/CentOS 7 krb5-workstation
RHEL/CentOS 6 krb5-workstation
SLES 11 krb5-client

Отключение системы безопасности Kerberos в Ambari

Для отключения системы безопасности Kerberos в Ambari необходимо выполнить следующие действия:

  • Войти в Ambari-Web и перейти в “Admin ‣ Kerberos”;
  • Нажать Disable Kerberos, чтобы запустить мастер;
  • Завершить работу мастера.

Если Kerberos был подключен путем автоматической настройки, Ambari попытается связаться с KDC и удалить созданных принципалов. Если KDC недоступен, мастер выводит ошибку на шаге “Unkerberize”. Ее можно игнорировать и продолжить работу мастера, но удаление принципалов из KDC не будет выполнено.

Настройка шаблона атрибута

При автоматической настройке Kerberos с Active Directory в зависимости от прав KDC можно настроить атрибуты принципалов, устанавливаемые Ambari при их создании. На шаге мастера “Configure Kerberos” в разделе “Advanced kerberos-env” есть доступ к шаблону атрибутов Ambari. Этот шаблон (который основан на синтаксисе шаблонов Apache Velocity) можно изменить, чтобы установить, какие атрибуты назначаются принципалам, и как эти значения получаются.

В таблице приведен список доступных переменных атрибутов.

Табл. 28. Доступные переменные атрибутов
Переменные атрибута Пример
$normalized_principal nn/c6401.ambari.apache.org@EXAMPLE.COM
$principal_name nn/c6401.ambari.apache.org
$principal_primary nn
$principal_digest [[MD5 hash of the $normalized_principal]]
$principal_instance c6401.ambari.apache.org
$realm EXAMPLE.COM
$password [[password]]