Kerberos
Обзор работы Kerberos
Строгая аутентификация и проверка подлинности каждого пользователя является обязательным требованием для безопасного доступа к кластеру Hyperwave. Все пользователи должны быть безошибочно идентифицированы внутри кластера. Пользователи, успешно прошедшие идентификацию, получают доступ к ресурсам (например, файлы и директории) и могут взаимодействовать с кластером (например, выполнять 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).