Kerberos
Обзор работы Kerberos
Строгая аутентификация и проверка подлинности каждого пользователя является обязательным требованием для безопасного доступа к кластеру Hadoop. Все пользователи должны быть безошибочно идентифицированы внутри кластера. Пользователи, успешно прошедшие идентификацию, получают доступ к ресурсам (например, файлы и директории) и могут взаимодействовать с кластером (например, выполнять MapReduce-задачи).
Если пользователю выдан доступ к кластеру под определенным именем, все компоненты кластера также доверяют этому имени. Процесс аутентификации может быть упрощен с использованием базы данных Kerberos, которая содержит учетные данные доступа для всех пользователей. Ресурсы Hadoop-кластера (такие как хосты и сервисы) также должны проходить взаимную аутентификацию. Это необходимо для предотвращения доступа к кластеру различных вредоносных систем, действующих под видом компонентов кластера.
Термин | Описание |
---|---|
Key Distribution Center, KDC |
Доверенный сервис, предоставляющий тикеты и временные сеансовые ключи |
Kerberos KDC Server |
Компьютер или сервер, на котором расположен KDC |
Kerberos Client |
Хост кластера, выполняющий аутентификацию через KDC |
Kerberos Principal |
Уникальное имя пользователя или сервиса, который проходит аутентификацию через KDC. Имя состоит из базового имени пользователя и полного доменного имени хоста, на котором развернут сервер |
Key |
Уникальный ключ, присваиваемый каждому принципалу. Данный ключ отправляется в систему аутентификации |
Keytab |
Файл, который содержит записи одного или нескольких принципалов и их ключи. Данный файл хранится в базе данных Kerberos и запрашивается принципалом сервера. Затем файл сохраняется в защищенной директории в узле сервера |
Realm |
Сеть Kerberos, которая включает KDC и одного или нескольких клиентов |
KDC Admin Account |
Аккаунт администратора, который используется в ADCM для создания новых принципалов и генерации KDC-ключей |
Ticket Granting Server (TGS) |
Сервер, выдающий тикеты аутентификации (ticket) и права доступа |
Authentication Server (AS) |
Сервер, выполняющий первоначальную проверку аутентификации и выпускающий Ticket Granting Ticket (TGT) |
Ticket Granting Ticket |
Тикет на выдачу тикета (TGT). Включает в себя следующее: вторая копия ключа сессии, имя пользователя, окончание действия тикета. Тикет зашифрован мастер-ключом KDC, который известен только KDC. Это означает, что только KDC может расшифровать TGT |
Процесс аутентификации
Hadoop использует Kerberos для строгой аутентификации и для проверки подлинности пользователей и сервисов. Сервер Kerberos называется Key Distribution Center (KDC). Он состоит из трех ключевых компонентов:
-
База данных пользователей и сервисов MIT KDC — хранит принципалы и соответствующие пароли Kerberos.
-
Сервер Аутентификации (Authentication Server, AS) — выполняет первоначальную проверку подлинности и выдает тикет на выдачу тикета (Ticket Granting Ticket, TGT).
-
Сервис выдачи тикета (Ticket-Granting Service, TGS) — выдает Kerberos-токен на основании первичного тикета на выдачу тикета (TGT).
Упрощенный процесс аутентификации Kerberos представлен ниже:
-
Принципал инициализирует процесс аутентификации на сервере аутентификации (AS).
-
В качестве ответа AS отправляет принципалу TGT, зашифрованный паролем принципала. Этот пароль известен только принципалу и AS.
-
Принципал расшифровывает полученный TGT, используя пароль Kerberos. С этого момента каждый принципал может использовать TGT для получения тикетов аутентификации от TGS. Эти тикеты позволяют принципалу получить доступ к различным сервисам.
Так как ресурсы кластера (сервисы и хосты) не могут каждый раз предоставлять пароль для расшифровки TGT, используется файл keytab. Этот файл содержит учетные данные для аутентификации ресурса. Совокупность хостов, пользователей и сервисов, управляемых Kerberos-сервером, называется Realm.
Пример
Ниже приведен простой пример процесса аутентификации с использованием Kerberos. В примере задействованы следующие компоненты:
-
EXAMPLE.COM — Kerberos realm.
-
Алиса — пользователь с именем принципала (UPN) alice@EXAMPLE.COM.
-
myservice — сервис, расположенный в узле server1.example.com и имеющий имя принципала сервиса (SPN) myservice/server1.example.com@EXAMPLE.COM.
-
kdc.example.com — центр распределения ключей (KDC) для области EXAMPLE.COM.
Чтобы получить доступ к сервису myservice, Алиса должна предоставить действующий тикет аутентификации для myservice. Этот процесс описан ниже (некоторые детали пропущены для краткости):
-
Алиса должна получить тикет на выдачу тикета (TGT). Для этого Алиса инициирует запрос к Серверу Аутентификации (AS), который расположен на хосте kdc.example.com. Алиса идентифицирует себя как alice@EXAMPLE.COM.
-
В качестве ответа, AS отправляет Алисе тикет на выдачу тикета (TGT), зашифрованный паролем принципала alice@EXAMPLE.COM.
-
После получения зашифрованного сообщения Алиса использует пароль принципала alice@EXAMPLE.COM для декодирования сообщения.
-
После успешного декодирования сообщения с TGT Алиса запрашивает сервисный тикет у сервиса выдачи тикетов (TGS, расположен на kdc.example.com), чтобы получить доступ к myservice/server1.example.com@EXAMPLE.COM. В запросе от Алисы содержится TGT, а в ответе — тикет аутентификации сервиса.
-
Сервис выдачи тикетов (TGS) проверяет полученный TGT и выдает Алисе сервисный тикет аутентификации, зашифрованный ключом принципала myservice/server1.example.com@EXAMPLE.COM.
-
Алиса отправляет сервисный тикет на сервис myservice. Сервис myservice расшифровывает сервисный тикет, используя ключ принципала myservice/server1.example.com@EXAMPLE.COM. Также сервис myservice выполняет проверку расшифрованного сервисного тикета.
-
После успешной аутентификации Алиса получает права на использование сервиса myservice.
Процесс, описанный выше, показан на следующей схеме:
Типы центров распределения ключей (KDC)
Для керберизации кластера доступны следующие типы центров распределения ключей (KDC):
-
MIT Kerberos — состоит из базы данных принципалов и хранилища ключей Kerberos.
-
MS Active Directory — содержит базу данных принципалов и хранилище ключей Windows Server.
-
FreeIPA — бесплатная система управления идентификацией пользователей для Linux/UNIX с открытым исходным кодом.
-
Samba — ПО, которое можно использовать как контроллер домена Active Directory.
При использовании любого из этих типов процесс идентификации и аутентификации пользователей практически одинаков. Единственное различие заключается в используемом типе центра распределения ключей (KDC).