Перейти к основному содержимому
  1. Статьи/

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

·400 слов·2 минут· loading · loading · ·
Обзоры Безопасность Установка Аутентификация
Stilicho2011
Автор
Stilicho2011
Site owner
IAM-решения - This article is part of a series.
Part : This Article

Что такое ZITADEL?
#

ZITADEL — это система управления идентификацией и доступом (IAM), разработанная швейцарской компанией CAOS AG. Она предоставляет полный набор функций по управлению пользователями, безопасной аутентификации и авторизации, подходящий как для небольших проектов, так и для крупных корпоративных решений.

Главное преимущество ZITADEL — это сочетание открытого исходного кода, современной архитектуры и облачной ориентации, что делает его удобным для DevOps, SaaS-платформ и internal tool-авторизации.


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

Поддержка современных протоколов
#

  • OIDC (OpenID Connect)
  • OAuth 2.0
  • SAML 2.0

Это делает Zitadel совместимым с большинством современных веб-приложений и сервисов.

Многоарендность и управление организациями
#

  • Поддержка multi-tenant архитектуры
  • Отдельные пространства для организаций
  • Делегирование прав администраторам

Многофакторная аутентификация (MFA)
#

  • Email/OTP
  • TOTP (Google Authenticator)
  • SMS
  • WebAuthn (FIDO2, YubiKey и др.)

Настраивается централизованно или на уровне организации.

API и CLI
#

  • Полноценный REST и gRPC API
  • zitadel CLI
  • Поддержка DevOps-инфраструктуры (CI/CD, GitOps)

Ролевое управление доступом
#

  • Роли на уровне проектов, приложений и пользователей
  • Кастомные клеймы и scopes в токенах
  • RBAC/ABAC-подход

Облачное и локальное развёртывание
#

  • Хостинг от разработчиков (SaaS)
  • Self-hosted: Docker, Kubernetes, Podman
  • Поддержка PostgreSQL и CockroachDB

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

ВозможностьZITADELKeycloakAuth0Authelia / TinyAuth
Open Source
OIDC/SAML❌/частично
MFA❌/частично
Multi-tenantЧастично
UI для self-service
API / CLIЧастично

Как начать
#

Пример docker compose файла, который использовался в ролике :

services:
    zitadel:
        restart: "always"
        container_name: zitadel
        networks:
            - zitadel
            - proxy
        image: "ghcr.io/zitadel/zitadel:latest"
        command: 'start-from-init --masterkey "${MASTERKEY_32}" --tlsMode external'
        env_file: .env
        environment:
            ZITADEL_DATABASE_POSTGRES_HOST: zitadel-db
            ZITADEL_DATABASE_POSTGRES_PORT: 5432
            ZITADEL_DATABASE_POSTGRES_DATABASE: zitadel
            ZITADEL_DATABASE_POSTGRES_USER_USERNAME: ${DB_USER}
            ZITADEL_DATABASE_POSTGRES_USER_PASSWORD: ${DB_PASSWORD}
            ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE: disable
            ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME: ${DB_ADMIN_USER}
            ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD: ${DB_ADMIN_PASSWORD}
            ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE: disable
            ZITADEL_FIRSTINSTANCE_ORG_HUMAN_USERNAME: ${ZITADEL_LOGIN_USER} 
            ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORD: ${ZITADEL_LOGIN_PASSWORD}
            ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORDCHANGEREQUIRED: false
            ZITADEL_FIRSTINSTANCE_ORG_NAME: HomeLab
            ZITADEL_PORT: 8080 #For External TLS (Also use h2c)
            ZITADEL_EXTERNALPORT: 443
            ZITADEL_EXTERNALDOMAIN: ${ZITADEL_SUBDOMAIN}.${DOMAIN_NAME} #eg. auth.DOMAIN_NAME
            ZITADEL_EXTERNALSECURE: true
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.zitadel.entrypoints=http"
            - "traefik.http.routers.zitadel.rule=Host(`${ZITADEL_SUBDOMAIN}.${DOMAIN_NAME}`)"
            - "traefik.http.middlewares.https-redirect.redirectscheme.scheme=https"
            - "traefik.http.routers.zitadel.middlewares=https-redirect"
            - "traefik.http.routers.zitadel-secure.entrypoints=https"
            - "traefik.http.routers.zitadel-secure.rule=Host(`${ZITADEL_SUBDOMAIN}.${DOMAIN_NAME}`)"
            - "traefik.http.routers.zitadel-secure.tls=true"
            - "traefik.http.routers.zitadel-secure.service=zitadel"
            - "traefik.http.services.zitadel.loadbalancer.server.scheme=h2c"
            - "traefik.http.services.zitadel.loadbalancer.passHostHeader=true"
            - "traefik.http.services.zitadel.loadbalancer.server.port=8080"
            - "traefik.docker.network=proxy"
        depends_on:
            zitadel-db:
                condition: "service_healthy"

    zitadel-db:
        restart: "always"
        container_name: zitadel-db
        image: postgres:17-alpine
        env_file: .env
        environment:
            POSTGRES_USER: ${DB_ADMIN_USER}
            POSTGRES_PASSWORD: ${DB_ADMIN_PASSWORD}
        networks:
            - zitadel
        healthcheck:
            test:
                [
                    "CMD-SHELL",
                    "pg_isready",
                    "-d",
                    "zitadel",
                    "-U",
                    "${DB_ADMIN_USER}",
                ]
            interval: "10s"
            timeout: "30s"
            retries: 5
            start_period: "20s"
        volumes:
            - ${DB_LOCATION}:/var/lib/postgresql/data

networks:
    zitadel:
        name: zitadel
    proxy:
        external: true
        name: proxy

Пример файла окружения с переменными

MASTERKEY_32=GENERATE_RANDOM_KEY_LENGTH_32_ChangeMe  #Replace Master Key (tr -dc A-Za-z0-9 </dev/urandom | head -c 32)
DB_USER=Enter_DB_User_ChangeMe
DB_PASSWORD=Enter_DB_Password_ChangeMe
DB_ADMIN_USER=Enter_DB_Root_User_ChangeMe
DB_ADMIN_PASSWORD=Enter_DB_Root_Password_ChangeMe
ZITADEL_LOGIN_USER=Loginusername@Your_Domain_ChangeMe.com
ZITADEL_LOGIN_PASSWORD=Zitadel_Password_ChangeMe
ZITADEL_SUBDOMAIN=zitadel
DOMAIN_NAME=Your_Domain_ChangeMe.com
DB_LOCATION=/path/to/directory/zitadel/zitadel-db
IAM-решения - This article is part of a series.
Part : This Article