Перейти к основному содержимому
  1. Posts/
  2. IAM и IdP решения./

Authentik — зачем нужен IAM / IdP в homelab и production

·947 слов·5 минут· loading · loading · ·
Stilicho2011
Автор
Stilicho2011
Пишу о homelab, self-hosting, автоматизации и open-source решениях
Оглавление
IAM-решения - This article is part of a series.
Part : This Article

Зачем вообще нужен Authentik (и что такое IAM / IdP в homelab / продакшене)
#

Почему нужны решения типа Authentik / IAM / IdP
#

В базовых системах часто каждый сервис (приложение, веб-интерфейс, API) реализует свою форму логина — свои пользователи, хранение паролей, механизм сессий и т.д. Это порождает:

  • Дублирование логики аутентификации / авторизации
  • Разные пароли в разных системах
  • Большую поверхность ошибок безопасности
  • Трудности централизованного управления пользователями, MFA, аудитом
  • Проблемы с единой сессией (SSO) между системами

Решения типа IAM / IdP (Identity Provider) позволяют централизовать аутентификацию и авторизацию: сервисы «делегируют» процесс логина IdP-решению, а IdP выдаёт токен / сессии / утверждения (assertions), которые сервисы доверяют.

В production среде преимущества
#

  • Централизованная политика безопасности (MFA, IP-ограничения, временные доступы)
  • Единый аудит и логирование
  • Интеграция с LDAP, AD, сторонними OAuth-провайдерами
  • Масштабируемость: добавление новых сервисов без дублирования аутентификации

В homelab / self-hosted окружении
#

  • Контроль над своими данными и паролями
  • Возможность экспериментировать с политиками и кастомизацией
  • Единый вход для множества домашних сервисов (Nextcloud, Home Assistant и пр.)
  • Прокачка инфраструктуры до уровня production

Итог: Authentik — одно из решений, которое сочетает удобство, гибкость и open source-подход, подходя как для домашних лабораторий, так и для production.


Что такое Authentik
#

Краткий обзор
#

Authentik — open source / open-core система Identity Provider (IdP) и Single Sign-On (SSO), созданная с упором на гибкость и расширяемость.

Ключевые возможности
#

  • Поддержка стандартов: OAuth2 / OIDC, SAML2, LDAP, SCIM, RADIUS
  • Механизм Flows / Stages для построения сценариев аутентификации
  • Удобный UI для админа и пользователей
  • Self-service (регистрация, восстановление пароля, MFA)
  • Политики условного доступа (conditional access)
  • API, Terraform, Blueprints — конфигурация как код
  • Масштабирование от Docker до Kubernetes / Helm
  • Поддержка внешних провайдеров идентификации

IdP — критически важный элемент безопасности. Authentik нужно регулярно обновлять и мониторить. В 2024 году фиксировались уязвимости, связанные с управлением сертификатами, но они были оперативно устранены.


Основные концепции
#

Концепция Описание
Flows / Stages Логика последовательности аутентификации (пароль, MFA, IP-проверка и т.д.).
Applications / Providers Настройка приложений и провайдеров входа (OIDC, SAML и др.).
Policy / Conditions Контроль доступа на основе атрибутов (группа, IP, время суток).
SCIM / LDAP / Federation Синхронизация пользователей из внешних систем.
Self-Service / Enrollment Интерфейс для пользователей (смена пароля, MFA и пр.).
Consent / Attribute Mapping Управление атрибутами, передаваемыми приложениям.
API / Automation Полная автоматизация конфигураций через API, Terraform, Blueprints.

Преимущества и ограничения
#

Преимущества
#

  • Высокая гибкость и кастомизация (flows, policies).
  • Поддержка широкого набора протоколов (OIDC, SAML, LDAP, RADIUS).
  • Подходит для small/medium окружений и Kubernetes-кластеров.
  • Простой интерфейс по сравнению с Keycloak.
  • API и Terraform для автоматизации.
  • Open source — контроль над данными и кодом.

Ограничения
#

  • Менее крупное сообщество, чем у Keycloak.
  • При больших нагрузках может требовать оптимизации.
  • Требует регулярных обновлений и аудита.
  • Часть функций доступна только в enterprise-версии.
  • Настройка flows требует опыта.

Сравнение Authentik с конкурентами
#

Характеристика Authentik Keycloak Authelia Auth0 / Okta (SaaS)
Тип решения Self-host / open core Self-host / enterprise Self-host / gateway SaaS / managed
Поддерживаемые протоколы OAuth2 / OIDC, SAML2, LDAP, SCIM, RADIUS OAuth2 / OIDC, SAML2, Kerberos, LDAP / AD SSO / 2FA, ограниченные протоколы OAuth2 / OIDC, SAML, social login
Кастомизация Очень гибкий (flows, policies) Высокая (plugins) Простая Минимальная
Интеграции LDAP, SCIM, внешние OAuth LDAP / AD, федерация LDAP Много готовых
Установка Docker, Helm, UI Java-стек (тяжёлый) Легковесная Без установки
Масштабируемость Средние нагрузки, кластеризация Enterprise Малые сценарии Неограниченно
Сообщество Молодое, быстрорастущее Зрелое Нишевое Огромное
Безопасность Требует обновлений Зрелая Упрощённая Высокая (SLA)
Стоимость Бесплатно / enterprise support Бесплатно / поддержка Red Hat Бесплатно Подписка
Оптимальный кейс Homelab, SMB, кастомизация Enterprise Простые SSO / 2FA Без администрирования

Authentik часто называют «золотой серединой» между тяжёлыми IAM-решениями и простыми proxy-системами вроде Authelia.


Установка и архитектурные рекомендации
#

Подходы к установке
#

  • Docker Compose — идеально для homelab и тестов
  • Kubernetes / Helm — для production
  • Cloud AMI / Marketplace — готовые образы (AWS и др.)

Архитектура и советы
#

  • Разделяйте сервисы: PostgreSQL, Redis, Authentik web/worker.
  • Используйте внешние БД и Redis.
  • Настройте резервное копирование.
  • Обеспечьте TLS/HTTPS для интерфейсов.
  • Настройте мониторинг и обновления.
  • При необходимости — кластеризация и репликация.

Минимальный пример установки (Docker Compose) версии 2025.10.1
#

---
services:
  postgresql:
    image: docker.io/library/postgres:16-alpine
    container_name: authentik_postgres
    restart: unless-stopped
    healthcheck:
      interval: 30s
      retries: 5
      start_period: 20s
      test:
      - CMD-SHELL
      - pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}
      timeout: 5s
    volumes:
        - database:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: ${PG_PASS:?database password required}
      POSTGRES_USER: ${PG_USER:-authentik}
      POSTGRES_DB: ${PG_DB:-authentik}
    env_file:
    - .env
    networks:
        authentik:
#
  server:
    command: server   
    depends_on:
      postgresql:
        condition: service_healthy
    env_file:
        - .env
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.10.1}
    container_name: authentik_server
    restart: unless-stopped
    environment:
        AUTHENTIK_REDIS__HOST: redis
        AUTHENTIK_POSTGRESQL__HOST: postgresql
        AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
        AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
        AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
        TZ: Europe/Moscow
    volumes:
        - ./media:/media
        - ./custom-templates:/templates
    networks:
        authentik:
        proxy:
    labels:
        - "traefik.enable=true"
        - "traefik.http.routers.authentik.entrypoints=web"
        - "traefik.http.routers.authentik.rule=Host(`authentik.domain.ru`)"
        - "traefik.http.middlewares.authentik-https-redirect.redirectscheme.scheme=https"
        - "traefik.http.routers.authentik.middlewares=authentik-https-redirect"
        - "traefik.http.routers.authentik-secure.entrypoints=websecure"
        ## Individual Application forwardAuth regex (catch any subdomain using individual application forwardAuth)
        - "traefik.http.routers.authentik-secure.rule=Host(`authentik.domain.ru`) || HostRegexp(`{subdomain:[a-z0-9]+}.domain.ru`) && PathPrefix(`/outpost.goauthentik.io/`)"
        - "traefik.http.routers.authentik-secure.tls=true"
        - "traefik.http.routers.authentik-secure.service=authentik"
        - "traefik.http.services.authentik.loadbalancer.server.port=9000"
        - "traefik.docker.network=proxy"
#
  worker:
    image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2025.10.1}
    restart: unless-stopped
    command: worker
    container_name: authentik_worker
    environment:
        AUTHENTIK_REDIS__HOST: redis
        AUTHENTIK_POSTGRESQL__HOST: postgresql
        AUTHENTIK_POSTGRESQL__USER: ${PG_USER:-authentik}
        AUTHENTIK_POSTGRESQL__NAME: ${PG_DB:-authentik}
        AUTHENTIK_POSTGRESQL__PASSWORD: ${PG_PASS}
        TZ: Europe/Moscow
    # `user: root` and the docker socket volume are optional.
    # See more for the docker socket integration here:
    # https://goauthentik.io/docs/outposts/integrations/docker
    # Removing `user: root` also prevents the worker from fixing the permissions
    # on the mounted folders, so when removing this make sure the folders have the correct UID/GID
    # (1000:1000 by default)
    #user: root
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock
        - ./media:/media
        - ./certs:/certs
        - ./custom-templates:/templates
    env_file:
        - .env
    depends_on:
      postgresql:
        condition: service_healthy
    networks:
        proxy:
        authentik:
#
volumes:
  database:
      driver: local
#
networks:
  proxy:
      external: true
  authentik:
      external: true
PG_PASS=pass
AUTHENTIK_SECRET_KEY=secret
# SMTP Host Emails are sent to
AUTHENTIK_ERROR_REPORTING__ENABLED=true
AUTHENTIK_EMAIL__HOST=smtp.gmail.com
AUTHENTIK_EMAIL__PORT=465
# Optionally authenticate (don't add quotation marks to your password)
AUTHENTIK_EMAIL__USERNAME=mail@gmail.com
AUTHENTIK_EMAIL__PASSWORD=password
# Use StartTLS
AUTHENTIK_EMAIL__USE_TLS=false
# Use SSL
AUTHENTIK_EMAIL__USE_SSL=true
AUTHENTIK_EMAIL__TIMEOUT=10
# Email address authentik will send from, should have a correct @domain
AUTHENTIK_EMAIL__FROM=mail@gmail.com
AUTHENTIK_ERROR_REPORTING__ENABLED=true
IAM-решения - This article is part of a series.
Part : This Article

Related

Установка Authelia в Docker | Полный гайд

·810 слов·4 минут· loading · loading
Установка Authelia в Docker | Полный гайд # Authelia — это современное решение для управления доступом и двухфакторной аутентификации, которое легко разворачивается в Docker-среде. В этом руководстве мы разберём, что такое Authelia, как его установить и чем оно отличается от других решений для SSO (Single Sign-On). --- Что такое Authelia? # Authelia — это открытая платформа для аутентификации и авторизации, предназначенная для защиты веб-приложений, развернутых за обратным прокси (например, Traefik или NGINX).

ZITADEL — современное IAM-решение с открытым исходным кодом

·417 слов·2 минут· loading · loading
Пошаговая инструкция по установке и настройке Zitadel для организации двухфакторной аутентификации с обратным прокси. Рассмотрены конфигурация пользователей, интеграция с Docker и рекомендации по повышению безопасности веб-сервисов.