Home » Настройка единого входа (SSO) с Authentik и Docker Compose

Настройка единого входа (SSO) с Authentik и Docker Compose

от virtualizationhowto
0 Комментарии 827 просмотров 8 мин на чтение

SSO (Single Sign-On) — это система аутентификации, которая позволяет пользователям получать доступ ко многим приложениям, сайтам и сервисам с помощью одного набора учётных данных. Это упрощает процесс аутентификации, так как не нужно запоминать множество логинов и паролей для разных сервисов.

В рамках экспериментов с SSO в домашней лаборатории было решено протестировать Authentik. Это мощное самохостинговое решение для SSO, способное покрыть практически любые требования. Кроме того, Authentik SSO можно легко установить с помощью Docker Compose.

Обзор Authentik

Если Authentik незнаком, это открытый провайдер идентификации. Идея решения — заменить платные сервисы вроде Okta, Keycloak или Auth0 и развернуть собственный провайдер аутентификации. Поддерживаются все основные технологии: SAML, OpenID Connect (OIDC), LDAP и другие.

Authentik SSO для домашних лабораторий и самостоятельного хостинга
Authentik SSO для домашних лабораторий и самостоятельного хостинга

Любое приложение, поддерживающее современные механизмы аутентификации, вероятнее всего, будет корректно работать с Authentik. Для домашней лаборатории это двойная выгода: появляется централизованный сервис (самостоятельно хостируемый), позволяющий унифицировать вход и обеспечить высокую защищённость среды.

При необходимости единого входа с доступом к self-hosted-сервисам вроде Portainer, Gitea, Nextcloud и Proxmox, Authentik делает это возможным.

Что нужно для запуска Docker Compose и Authentik?

Ничего необычного — требуются базовые компоненты:

  • Сервер или виртуальная машина с Linux (подойдут Ubuntu, Debian и т. п.)
  • Установленные Docker и Docker Compose — для Ubuntu см. официальную документацию: Ubuntu | Docker Docs
  • Доменное имя для инстанса Authentik — внутреннее или внешнее. Для сертификатов Let’s Encrypt потребуется внешний домен
  • Реверс-прокси, например Traefik или Nginx Proxy Manager, если нужен HTTPS с Let’s Encrypt

Authentik опирается на несколько открытых компонентов:

  • База данных PostgreSQL
  • Redis для кеширования

Docker Compose упрощает «сборку» стека Authentik. Рекомендуется определить постоянные тома для базы данных и конфигурации Authentik, чтобы данные сохранялись при перезапуске контейнеров.

Файл Docker-Compose для Authentik SSO

Ниже приведён пример конфигурации для Authentik SSO через Docker Compose. Он может сэкономить значительное количество времени при первоначальном развёртывании. В примере используется Traefik как реверс-прокси (это предпосылка для данного фрагмента), однако метки Traefik легко убрать и подключить необходимые контейнеры к нужной сети Docker.

Конфигурация состоит из двух частей: файла Docker-Compose и файла .env с чувствительными переменными. Ниже — код Docker-Compose V2:

Сохраните этот файл Authentik SSO как docker-compose.yml. Далее — файл .env для хранения чувствительных переменных. Можно использовать пример ниже, заменив значения на свои.

Сохраните второй файл как .env. Затем выполните docker compose up -d. Через минуту Authentik должен запуститься на порту 9000 (HTTP) на бэкенде. Далее Traefik, используя метки, выпустит корректный SSL-сертификат для защиты соединения с контейнером Authentik.

Первичная настройка

Так как заданы начальные bootstrap-учётные данные, остаётся перейти по URL сервера с использованием домена, проксируемого через Traefik (или другой реверс-прокси), и войти с этими параметрами.

Появится своего рода «мастер» настройки, предлагающий создать первое приложение. При необходимости шаг можно пропустить и перейти в dashboard.

В Authentik представлен современный дашборд, предоставляющий обзор состояния SSO-окружения.

Панель управления Authentik
Панель управления Authentik

При переходе на дашборд отображаются следующие элементы:

  • Состояние системы
  • Версия
  • Рабочие процессы (Workers)

При корректной работе все индикаторы отображаются зелёными галочками.

Добавлять реверс-прокси или нет

Реверс-прокси с Authentik не является обязательным, но требуется в случаях публикации сервиса в Интернет или при необходимости аккуратной, зашифрованной связи с использованием сертификата доверенного центра сертификации.

В качестве примера выше приведена конфигурация с Traefik. Для акцентирования настроек, включающих интеграцию с реверс-прокси, используется следующий фрагмент в docker-compose:

Далее в переменных окружения присутствуют параметры, связанные с реверс-прокси:

Без реверс-прокси доступ предоставляется по открытому адресу http://ip:9000. После добавления Traefik или другого реверс-прокси доступ к Authentik осуществляется по адресу https://auth.mydomain.com с автоматически выпущенным сертификатом Let’s Encrypt. Удобно.

Подключение федеративного или социального источника входа

Возможности Authentik становятся особенно заметны при переходе в меню Users и добавлении федеративного или социального источника входа. Представлен обширный список поддерживаемых провайдеров. На скриншоте ниже показан список, включая:

  • Apple OAuth
  • Discord
  • Entra ID
  • Facebook
  • GitHub OAuth
  • GitLab OAuth
  • Google OAuth
  • Kerberos source
  • LDAP source
  • Okta
  • …и другие
Использование федеративного или социального входа с помощью Authentik
Использование федеративного или социального входа с помощью Authentik

Терминология и рабочий процесс

У различных приложений и провайдеров SSO схожие процессы, но терминология может отличаться. В Authentik важно знать следующие термины:

  • Provider — это конечная точка протокола, с которой взаимодействует внешнее приложение (например, Portainer, GitLab, Grafana и т. д.). Это «сторона Authentik» в рукопожатии. Провайдер может быть OIDC, SAML, LDAP или другим, в зависимости от поддержки целевого приложения
  • Application — это логическая группа в Authentik, объединяющая один или несколько провайдеров. Здесь настраиваются брендирование (логотип/URL, на который пользователи кликают в дашборде Authentik) и привязки политик. Это настраиваемый портал запуска для пользователей.

Последовательность действий:

  1. Создать провайдера (OIDC или SAML, в зависимости от приложения)
    • Приложения вроде Portainer и GitLab поддерживают OIDC, поэтому в Authentik нужно создать OIDC-провайдера
  2. Создать Application, указывающее на данного провайдера
    • Application — это «дружественная плитка», по которой пользователи кликают в дашборде Authentik
    • Здесь также можно задать политики (например, требовать MFA для GitLab, но не для Grafana)
  3. Настроить само приложение на использование созданного провайдера Authentik. Необходимо скопировать из Authentik значения client ID, secret, issuer URL и т. п. в настройки приложения.

Ниже приведена обзорная схема потока авторизации от Authentik:

Поток кода авторизации Authentik
Поток кода авторизации Authentik

Не стоит откладывать внедрение SSO

Иногда может казаться, что SSO в домашней лаборатории — просто «приятное дополнение». На практике, при публикации сервисов через реверс-прокси, туннели Cloudflare или проброс портов, необходим надёжный слой аутентификации. С Authentik можно реализовать MFA, политики паролей и уменьшить слабые места в аутентификации.

Итоги

Authentik производит впечатление решения корпоративного класса с ожидаемой «полировкой» — при этом бесплатно. С Docker-Compose его развёртывание несложно, а набор функций и возможностей делает систему обязательной для домашней лаборатории. Решение интегрируется с большинством самохостимых сервисов и обеспечивает уверенность в защищённости аутентификации. Используется ли Authentik или иной SSO-провайдер — этот вопрос открыт для обсуждения в комментариях.

Источник на английском языке

Даже просто подбор, перевод и оформление статей требуют времени. А самостоятельный обзор устройств требует еще и финансовых вложений. Если Вы хотите больше обзоров, Вы можете помочь автору.

Вам может понравиться

Оставить комментарий