OGOwnGate

Бесплатный Keycloak, который стоит миллионы: 5 ловушек самостоятельного внедрения

«Зачем платить, если Keycloak бесплатный?» — сказал тимлид и утопил команду в дебрях Quarkus, Java SPI и сломанных миграций. Честный разбор, почему голый open-source IAM превращается в чёрную дыру.

«Да я за вечер подниму в Docker»: начало трагедии

Каждый второй проект по внедрению SSO в российской компании начинается с одной и той же фразы тимлида или ведущего сисадмина:

> *«Парни, зачем нам платить за какие-то коммерческие шлюзы или звать интеграторов? Keycloak же бесплатный! Сейчас закину в Docker Compose, накачу PostgreSQL — к обеду уже подключим GitLab»*.

Звучит как идеальный план. Лицензия 0 рублей, проект от Red Hat, все стандарты OpenID Connect и SAML на борту, миллионы звёзд на GitHub.

К вечеру Keycloak действительно стартует. На порту :8080 загорается дефолтная консоль администрирования. Админ горд собой, руководство довольно экономией.

А дальше начинается суровая реальность.

Архитектурный куб Keycloak под нагрузкой

Проходит две недели, месяц, полгода — и внезапно выясняется, что «бесплатный» Keycloak сжирает 30% времени самого дорогого сеньор-девопса, пользователи воют от непонятных форм входа, а любое обновление превращается в русскую рулетку с базой данных.

Разберём 5 скрытых ловушек, о которых молчат авторы бодрых туториалов «Keycloak за 15 минут».

---

Ловушка 1. Дебри терминологии: Realms, Scopes, Mappers и Flows

Keycloak разрабатывался не как готовая кнопка «сделай SSO», а как швейцарский нож для корпоративных архитекторов масштаба Enterprise с десятками тысяч микросервисов.

В результате даже для банальной задачи — *«просто пускать людей из Active Directory по их логину и спрашивать TOTP»* — вам придётся стать доктором наук по IAM:

  • В чём разница между Client Scopes, Audience Resolvers и Protocol Mappers?
  • Почему если в токене не прописан sub или preferred_username, GitLab наглухо отказывается создавать пользователя?
  • Что такое Authentication Flows, и почему при неверном порядке шагов Execution (Required vs Alternative) сотрудник может залогиниться вообще без пароля?

В интерфейсе Keycloak сотни переключателей. Ошибка в одном чекбоксе Full Scope Allowed — и в токены начинает утекать вся внутренняя структура ролей компании, ломая заголовки Nginx по 413 Request Header Fields Too Large.

---

Ловушка 2. Синхронизация с Active Directory: грабли на ровном месте

Кажется: ну что сложного подключить LDAP? Вбил ldap://dc1.company.local, указал bind_dn — и поехали.

В реальной жизни Active Directory в компании на 100–200 человек — это исторический памятник. Там есть уволенные в 2018 году аккаунты, пользователи с пробелами в логинах, фамилии на кириллице и вложенные группы на шесть уровней глубины.

Что происходит с чистым Keycloak:

1. Зависание на вложенных группах (Nested Groups). Если включить синхронизацию групп в лоб, Keycloak может уйти в бесконечную рекурсию или положить CPU контроллера домена сотнями LDAP-запросов в секунду.

2. Битая синхронизация из-за одного юзера. Стоит Keycloak наткнуться на некорректный атрибут sAMAccountName или дубликат mail — процесс периодического синка падает с ошибкой, и новые сотрудники не появляются в системе часами.

3. Kerberos / SPNEGO через VPN. Настроить бесшовный вход в домене — полбеды. Но когда удалёнщик подключается через VPN или телефон, Kerberos отваливается, а дефолтный Keycloak вместо красивого фолбэка выдаёт пользователю пугающую ошибку Invalid credentials.

---

Ловушка 3. Кастомизация интерфейса: добро пожаловать в Java и FreeMarker

Покажите бухгалтеру или сейлзу стандартную форму входа Keycloak.

Английский язык, странные системные сообщения об ошибках вроде Federated Identity Provider Error, невнятный дизайн из нулевых. Пользователи в панике пишут в саппорт: *«Меня взломали, требует какой-то Authenticator Code»*.

Вы решаете: надо русифицировать, повесить логотип компании и сделать понятные подсказки.

И тут выясняется:

  • В Keycloak нет визуального редактора тем. Вообще.
  • Темы верстаются на древнем шаблонизаторе Apache FreeMarker (.ftl файлы).
  • Чтобы поменять надпись или стилизовать поле ввода, системный администратор должен лезть в контейнер, форкать дефолтную тему, ковырять CSS и заново пересобирать Docker-образ.
  • А если вы захотите красивую пошаговую регистрацию MFA с понятными инструкциями для нетехнических людей — готовьтесь писать кастомный плагин на Java (Java SPI) и компилировать .jar.

Вместо автоматизации доступов админ превращается в верстальщика на FreeMarker.

---

Ловушка 4. Обновления версий: русская рулетка с PostgreSQL

Keycloak обновляется стремительно — мажорные версии выходят раз в несколько месяцев. И каждое обновление в продакшене — это стресс.

С переходом с WildFly на Quarkus поменялось практически всё:

  • Старые переменные окружения объявляются deprecated;
  • Конфигурационные файлы переписываются с нуля;
  • Миграции схемы базы данных PostgreSQL нередко ломаются на больших таблицах пользовательских сессий (USER_SESSION);
  • Ваши кастомные темы и SPI-плагины внезапно перестают компилироваться, потому что в новом релизе Keycloak разработчики изменили внутренние Java-интерфейсы.

В итоге сисадмин решает: *«Работает — не трогай»*.

Keycloak зависает на версии трёхлетней давности, обрастает критическими уязвимостями (CVE), а компания боится к нему прикоснуться.

---

Ловушка 5. Скрытая экономика: сколько на самом деле стоит «бесплатное»

Давайте посчитаем честную экономику самостоятельного внедрения голого Keycloak в компании на 50–200 человек:

| Статья расходов | «Бесплатный» Keycloak своими силами | Готовый шлюз доступа (OwnGate) |

|---|---|---|

| Стоимость лицензии | 0 ₽ | Фиксированная подписка |

| Время на запуск пилота | 3–8 недель экспериментов | 1–2 дня на виртуальной машине |

| Русификация и темы | 40+ часов возни с FreeMarker/CSS | Готовый русский UI для людей из коробки |

| Связка с AD и группы | Ручной подбор мапперов и фильтров | Пошаговый мастер подключения каталога |

| Поддержка и апдейты | 10–20 часов в месяц рабочего времени DevOps | Заботится вендор, обновления в 1 команду |

| Итоговая цена за год | 500 000 – 1 200 000 ₽ в зарплатах инженеров | В разы дешевле зарплаты одного сисадмина |

Бесплатный open-source бесплатен только в том случае, если время ваших специалистов стоит 0 рублей.

Конструктор против готового контура

---

Когда чистый Keycloak оправдан, а когда нет

Будем честны: Keycloak — великолепный продукт. Мы в OwnGate сами используем проверенное ядро Keycloak под капотом.

Но есть принципиальная разница в сценариях:

Чистый Keycloak нужен, если:

  • Вы — огромный банк, ритейлер или телеком с миллионом пользователей;
  • У вас есть выделенная команда IAM-инженеров и Java-разработчиков, которая только этим и занимается;
  • Вам нужны экзотические сценарии федерации, кастомные протоколы и десятки кастомных провайдеров авторизации.

Готовый шлюз (OwnGate) нужен, если:

  • В компании работает от 30 до 250 человек;
  • В ИТ-отделе от 1 до 5 специалистов, перегруженных текущими задачами;
  • Нужно решить конкретные бизнес-боли: единый вход (SSO) в GitLab/Grafana/Nextcloud, обязательный MFA, закрытие зомби-сессий при увольнении в AD и русскоязычный журнал аудита;
  • Вы хотите получить работающий результат сегодня, а не становиться заложником бесконечной настройки конструктора.

---

Резюме

Не путайте инструмент и продукт.

Двигатель внутреннего сгорания — отличная вещь, но чтобы доехать из дома до офиса, вы покупаете готовый автомобиль с рулём, педалями и гарантией, а не вытачиваете коленвал на токарном станке в гараже.

SSO и MFA должны защищать компанию и экономить время инженеров, а не создавать вторую работу для сисадмина.

← Все статьи