Интеграция Keycloak и FreeIPA

5/5 - (1 голос)

Продолжаю проект по переводу инфраструктуры компании на RedOS и так как мы уже определились, что будем использовать FreeIPA в качестве аналога Active Directory, то следовательно следующий этап это создание единой точки входа в другие сервисы с использованием учётных данных FreeIPA.

Во многих сервисах мы можем использовать авторизацию с использованием учётных данных полученных при прямом доступе к каталогу LDAP, но иногда это становится проблемой с использованием структуры LDAP FreeIPA, так как приложение которое надо интегрировать разрабатывалось исключительно для работы с Active Directory.

Будем использовать OAuth 2.0

OAuth 2.0 — это отраслевой стандарт авторизации, позволяющий приложениям получать ограниченный доступ к пользовательским ресурсам на других сервисах без передачи логина и пароля.
Ключевая идея: вместо того чтобы давать приложению свои учётные данные, пользователь делегирует ему права через доверенного поставщика идентификации (например, Google, GitHub, Keycloak).

Соответственно, Keycloak который мы уже установили и установка описана в статье «Установка Keycloak в Ubuntu Linux 22.04«. Следовательно Keycloak будет как раз сервером авторизации OAuth 2.0, а данные пользователей будем получать из FreeIPA.

Настройка источника данных авторизации для Keycloak

В терминологии Keycloak такого рода источники данных называются «User federation» и настраиваются они очень просто.

User Federation (федерация пользователей) в Keycloak — это механизм, позволяющий подключать внешние хранилища учётных записей (LDAP, Active Directory, базы данных и др.) и использовать их в качестве источника пользователей для Keycloak. Вместо дублирования данных Keycloak «проксирует» аутентификацию и синхронизацию с внешним сервером, сохраняя централизованное управление доступом.

Если вы хоть раз настраивали интеграцию приложений с LDAP или Active Directory, то думаю вам все будет знакомо.

Нам необходимо создать новую федерацию пользователей например в основном Realm (про Realm поговорим попозже).

Настройка федерации пользователей

Указываем имя федерации, так как можем создать их несколько и тип вендора. Следом перечислю параметры на моем примере. Обратите внимание, что для этой федерации я использовал фильтр пользователей по членству в группе.

Connection URL

ldap://srv-kvm-prod-rain-01.rain.shiskitech.ru — адрес сервера LDAP используемый для подключения. Выбирайте использовать TLS или нет и можно сразу проверить подключение соответствующей кнопкой.

Настройки подключения к LDAP
  • Connection URL — адрес подключения с указанием ldap/ldaps для шифрованных или не шифрованных соединений
  • Enable StartTLS — собственно шифрование вкл/выкл
  • Остальное по умолчанию

Bind credentials

Здесь нам потребуется создать сервисного пользователя в FreeIPA с правами на чтение и указать в настройках Keycloak тип подключения, логин и пароль.

Авторизация в LDAP

Создайте непривилегированного пользователя в FreeIPA Identity Management. В моем случае я создал пользователя _keycloak типа авторизации в FreeIPA будет Simple.

Сервисный пользователь

BindDN пользователя мы можем найти через Apache Directory Studio и в моем случае получилось uid=_keycloak,cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru.

BindDN

Естественно проверяем, что авторизация прошла успешно соответствующей кнопкой.

LDAP searching and updating

Основной блок поиска пользователей в каталоге и при необходимости обновления данных пользователей.

Фильтр пользователей LDAP

Edit mode

Устанавливаем в Read Only и нам пока не требуется возможность модификации записей в LDAP.

Users DN

Это область поиска пользователей в LDAP каталоге. Все наши пользователи в CN Users и соответственно от туда поиск и начинаем. Получается значение cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru.

Основные атрибуты пользователей

  • Username LDAP attribute — uid
  • RDN LDAP attribute — uid
  • UUID LDAP attribute — ipaUniqueID
  • User object classes — inetOrgPerson, organizationalPerson
  • Search scope — Subtree

Единственное, что может вызвать вопросы, это User LDAP filter и вот здесь при тестировании фильтров LDAP могу порекомендовать Apache Directory Studio и так называемые быстрые фильтры.

Apache Directory Studio

В результате подбора подходящего фильтра я остановился на конструкции вида (User LDAP filter):

(&(objectclass=person)(uid=*)(memberOf=cn=_keycloak_allow,cn=groups,cn=accounts,dc=rain,dc=shiskitech,dc=ru)(objectClass=top)(!(nsaccountlock=True)))

Обратите внимание на часть (!(nsaccountlock=True)) и ее постоянно забывают, а она как раз отвечает за фильтрацию заблокированных пользователей в FreeIPA.

И наверное последнее, что стоит отметить это раздел Mapper в котором описано соотношение атрибутов Ldap и атрибутов Oauth2. В этом разделе надо изменить атрибут first name на Ldap значение givenname (по умолчанию там cn, что как-то странно).

Synchronization settings

Здесь как говорится все настраивается на вкус и цвет и я включил дополнительно периодическую полную и частичную синхронизацию.

Синхронизация данных.

Проверка работы федерации пользователей

Сохраняем данные и выполняем полную синхронизацию.

Первичная полная синхронизация.

В результате увидим, сколько пользователей добавлено, обновлено, удалено.

Результаты синхронизации пользователей.

Переходим в раздел Manage -> Users и выполняем поиск пользователя который должен быть синхронизирован с FreeIPA.

Проверка работы Keycloak

Поздравляю, если все прошло успешно, то мы можем переходить к настройке приложений для использования Keycloak как источника данных для авторизации.

Похожие записи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования