Настройка Ambari и Hadoop для Kerberos¶
В данной главе описывается настройка Kerberos для надежной аутентификации пользователей и хостов Hadoop в кластере, управляемом Ambari:
- Обзор Kerberos;
- Принципалы Hadoop и Kerberos;
- Установка и настройка KDC;
- Подключение системы безопасности Kerberos в Ambari;
- Клиентские пакеты Kerberos;
- Отключение системы безопасности Kerberos в Ambari;
- Настройка шаблона атрибута;
- Перечень компонентов поддерживающих работу в Kerberos окружении.
Программное обеспечение Arenadata Hadoop включает возможность керберизации кластера внутренними средствами Ambari Server.
При использовании kerberos функции через Ambari Server:
- Cотрудники безопасности компании, не участвуют в настройке KDC.
- Администраторы Hadoop имеют полный контроль над установкой KDC. Управление keytab для кластера Hadoop полностью реализуется на стороне Ambari Server.
- Администраторы Hadoop несут дополнительную ответственность за управление KDC.
- Ответственность за любые уязвимости в системе безопасности несут администраторы Hadoop.
- Обеспечение высокой доступности KDC и аварийного восстановления - это ответственность администраторов Hadoop.
- Требуется ручная генерация keytab для любых разработчиков и стороннего программного обеспечения.
Important
Использование Kerberos может влиять на стабильность работы и производительность ряда сервисов кластера, ввиду необходимости использования дополнительных компонентов и параметров для аутентификации пользователей и взаимодействия сервисов внутри кластера.
Important
Некотрые сервисы требуют ручной настройки для работы с Kerberos и распространения тикетов внутри инфраструктуры для корректной работы.
Important
Перед активацией Kerberos на промышленном кластере, крайне рекомендуется провести опробацию функционала и работы всех приложений использующих сервисы Hadoop на тестовой среде.
Important
Для упрощения конфигурации и обеспечения более стабильной работы компонентов кластера Hadoop рекомендуется керберезировать уровень операционной системы и не использовать Kerberos непосредственно для сервисов Hadoop.
Обзор 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 имеет контроль, называется сферой.
Термин | Определение |
---|---|
Key Distribution Center, KDC | Надежный источник для аутентификации в экосистеме с поддержкой Kerberos |
Сервер Kerberos KDC | Машина или сервер, который служит в качестве центра распределения ключей |
Клиент Kerberos | Любая машина в кластере, которая аутентифицируется с KDC |
Принципал | Уникальное имя пользователя или сервиса, который аутентифицируется с KDC |
Keytab | Файл, содержащий один или несколько принципалов и их ключи |
Сфера | Сеть Kerberos, включающая KDC и ряд клиентов |
KDC Admin Account | Учетная запись администратора, используемая Ambari для создания принципов и генерации ключей в KDC |
Принципалы Hadoop и Kerberos¶
Каждый сервис и под-сервис в Hadoop должны иметь своего принципала. Имя принципала в данной сфере состоит из основного имени и имени экземпляра – это полное доменное имя хоста, на котором работает сервер. Учетные данные серверов хранятся в файле keytab, который извлекается из базы данных Kerberos с помощью принципала сервера и хранится локально в защищенном каталоге на узле компонента сервера (Рис.36.).

Рис. 36. Права доступа к кластеру
Пример условного обозначения имени принципалов и 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 необходимо выполнить следующие действия:
- Установить новую версию сервера KDC:
- RHEL / CentOS:
yum install krb5-server krb5-libs krb5-workstation
- SLES:
Zypper install krb5 krb5-server krb5-client
- Используя текстовый редактор, открыть файл конфигурации сервера KDC, расположенный по умолчанию в Vi/etc/krb5.conf;
- Изменить раздел [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.
- Создать администратора KDC, путем создания принципала-администратора:
Kadmin.local -q "addprinc admin / admin"
- Убедиться, что созданный администратор имеет права в ACL KDC. Открыть файл ACL KDC, используя текстовый редактор:
- RHEL / CentOS:
Vi /var/kerberos/krb5kdc/kadm5.acl
- SLES:
Vi /var/lib/kerberos/krb5kdc/kadm5.acl
- Убедиться, что файл ACL KDC содержит запись, позволяющую принципал-администратору управлять KDC в используемой конкретной сфере. При использовании сферы, отличной от EXAMPLE.COM, необходимо убедиться, что есть запись для конкретной сферы. Например, для принципала admin/admin@HADOOP.COM следующая запись:
*/admin@HADOOP.COM *
- После редактирования и сохранения файла 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 не требуется.
- Для установки JCE необходимо на сервере Ambari получить файл JCE, подходящий для версии JDK на вашем кластере:
- Для Oracle JDK 1.8
- Для Oracle JDK 1.7
- Архив с полученным файлом необходимо сохранить во временной папке;
- На сервере 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/
- Перезапустить сервер Ambari;
- Перейти к началу работы мастера безопасности.
Запуск мастера 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 необходимо выполнить следующие действия:
- Необходимо убедиться, что KDC установлен и настроен, а также подготовлен JCE на каждом хосте в кластере;
- Войти в Ambari-Web и перейти на вкладку ;
- Нажать Enable Kerberos, чтобы запустить мастер;
- Выбрать тип KDC, который используется, и подтвердить, что необходимые условия выполнены;
- Предоставить информацию о KDC и учетной записи администратора;
- Далее приведен перечень необязательных настроек:
- В поле “Домены” указать список шаблонов для сопоставления хостов в кластере с соответствующей сферой. Например, если хосты имеют общий домен в своем “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"
- Продолжить установку;
- Ambari устанавливает клиентов Kerberos на хостах и проверяет доступ к KDC и возможность создания принципалов, генерации keytab и их распространения;
- Настроить идентификаторы Kerberos, используемые Hadoop, и перейти к керберизации кластера.
На шаге “Configure Identities” (настройка идентификаторов) обязательно посмотреть имена принципалов, в частности, Ambari Principals в таблице “General”. Эти имена, по умолчанию, добавляют имя кластера каждому принципалу Ambari. Можно оставить значение по умолчанию или изменить его, удалив - $ {имя-кластера} из строки имени принципала. Например, если кластер назван ADH, а сфера – EXAMPLE.COM, то hdfs принципала создается как hdfs-ADH@EXAMPLE.COM.
- Подтвердить конфигурацию. По желанию можно загрузить CSV-файл с принципалами и ключами для их автоматической генерации Ambari;
- Нажать Next для начала процесса;
- После создания принципалов, генерации и распространения ключей Ambari обновляет конфигурации кластера, а затем запускает и тестирует сервисы в кластере;
- Завершить работу мастера после окончания процесса.
Ручная настройка Kerberos¶
Для ручной настройки Kerberos необходимо выполнить следующие действия:
- Убедиться, что KDC установлен и настроен, а также подготовлен JCE на каждом хосте в кластере;
- Войти в Ambari-Web и перейти на вкладку ;
- Нажать Enable Kerberos, чтобы запустить мастер;
- Выбрать параметр “Manage Kerberos principals” и “keytabs manually” и убедиться, что выполнены необходимые условия;
- Предоставить информацию о KDC и учетной записи администратора.
- Если клиентские библиотеки Kerberos находятся в нестандартных папках, развернуть раздел “Advanced kerberos-env” и настроить опцию Executable Search Paths.
- Настроить идентификаторы Kerberos, используемые Hadoop, и перейти к керберизации кластера.
На шаге “Configure Identities” (настройка идентификаторов) обязательно посмотреть имена принципалов, в частности, Ambari Principals в таблице “General”. Эти имена, по умолчанию, добавляют имя кластера каждому принципалу Ambari. Можно оставить значение по умолчанию или изменить его, удалив - $ {имя-кластера} из строки имени принципала. Например, если кластер назван ADH, а сфера – EXAMPLE.COM, то hdfs принципала создается как hdfs-ADH@EXAMPLE.COM.
- Подтвердить конфигурацию. Поскольку выбран параметр ручной настройки “Manual Kerberos Setup”, необходимо получить CSV-файл со списком принципалов и ключей, необходимых для работы кластера с Kerberos.
Important
Не продолжайте работу до тех пор, пока вручную не будут созданы и распределены узлам кластера принципалы и ключи
- Нажать Next для продолжения;
- Ambari обновляет конфигурации кластера, а затем запускает и тестирует сервисы в кластере;
- Завершить работу мастера после окончания процесса.
Клиентские пакеты Kerberos¶
При автоматическом подключении Kerberos Ambari устанавливает клиенты Kerberos на узлах кластера. В зависимости от операционной системы устанавливаются следующие пакеты:
Операционная система | Пакет |
---|---|
RHEL/CentOS 7 | krb5-workstation |
RHEL/CentOS 6 | krb5-workstation |
SLES 11 | krb5-client |
Отключение системы безопасности Kerberos в Ambari¶
Для отключения системы безопасности Kerberos в Ambari необходимо выполнить следующие действия:
- Войти в Ambari-Web и перейти в ;
- Нажать Disable Kerberos, чтобы запустить мастер;
- Завершить работу мастера.
Если Kerberos был подключен путем автоматической настройки, Ambari попытается связаться с KDC и удалить созданных принципалов. Если KDC недоступен, мастер выводит ошибку на шаге “Unkerberize”. Ее можно игнорировать и продолжить работу мастера, но удаление принципалов из KDC не будет выполнено.
Настройка шаблона атрибута¶
При автоматической настройке Kerberos с Active Directory в зависимости от прав KDC можно настроить атрибуты принципалов, устанавливаемые Ambari при их создании. На шаге мастера “Configure Kerberos” в разделе “Advanced kerberos-env” есть доступ к шаблону атрибутов Ambari. Этот шаблон (который основан на синтаксисе шаблонов Apache Velocity) можно изменить, чтобы установить, какие атрибуты назначаются принципалам, и как эти значения получаются.
В таблице приведен список доступных переменных атрибутов.
Переменные атрибута | Пример |
---|---|
$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]] |
Перечень компонентов поддерживающих работу в Kerberos окружении¶
Сервис | Поддержка |
---|---|
Apache HDFS | Поддерживается |
Apache YARN | Поддерживается |
Apache MapReduce | Поддерживается |
Apache Zookeeper | Поддерживается |
Apache Tez | Поддерживается |
Apache Hive | Поддерживается |
Apache Hive LLAP | Не поддерживается |
Apache HBase | Поддерживается |
Apache Phoenix | Поддерживается |
Apache Pig | Поддерживается |
Apache Sqoop | Поддерживается |
Apache Flume | Поддерживается |
Apache Oozie | Поддерживается |
Apache Atlas | Поддерживается не во всех типах окружения |
Apache NiFi | Поддерживается |
Apache Apex | Не поддерживается |
Apache Flink | Поддерживается не во всех типах окружения |
Apache Kafka | Поддерживается |
Apache Knox | Поддерживается |
Apache Mahout | Поддерживается |
Apache Ranger | Поддерживается не во всех типах окружения |
Apache Ranger KMS | Поддерживается не во всех типах окружения |
Apache Solr | Поддерживается не во всех типах окружения |
Apache Spark | Поддерживается |
Apache Zeppelin | Поддерживается не во всех типах окружения |
Apache Giraph | Не поддерживается |
Apache Slider | Не поддерживается |
Kafka Manager | Поддерживается |
Logsearch | Поддерживается |