feat(security): Zitadel — SSO для домашних сервисов (envoy-internal) #55
Loading…
Reference in a new issue
No description provided.
Delete branch "refs/pull/55/head"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что это
Zitadel как SSO/OIDC для домашних сервисов, публикация через
envoy-internal. Вход на том же хостеsso.<домен>, на котором живёт Zitadel:Login V2— на префиксе/ui/v2/login, всё остальное — на API/консоль Zitadel.Пришло на смену Authelia (PR #54 закрыт: нет регистрации и self-service сброса пароля без почты).
Состав (7 файлов, ns
security)zitadel/ks.yamlwait+ health-check на HelmRelease,dependsOncloudnative-pg (nsdatabase) и external-secrets-stores (nssecurity), postBuild-подстановка${SECRET_DOMAIN}zitadel/app/ocirepository.yamloci://ghcr.io/zitadel/zitadel-charts/zitadel, тег 10.0.6 (= Zitadel v4.15.3)zitadel/app/helmrelease.yamlzitadel/app/postgres.yamlCluster/postgres:instances: 3, база и владелецzitadel, 1Giproxmox-ssd,enableSuperuserAccess: truezitadel/app/externalsecret.yamlkv/zitadel) в Secretzitadel-masterkeyzitadel/app/kustomization.yaml,security/kustomization.yamlПочему такие решения
iam-admin, ключ login-сервиса), Login V2, PDB и умеет Gateway API (gateway.httpRoute) — на app-template это пришлось бы писать руками.postgresql.enabled: false) — правило репо: базы только CNPG..Values.envчарт прокидывает и в Deployment, и в init/setup-джобы (helperzitadel.dbEnv), поэтому в git ничего не попадает, а миграции ходят теми же кредами.postgres-app(пользовательzitadel) +postgres-superuser(админ для провижининга).zitadel.masterkeySecretName: zitadel-masterkey.driftDetection: Disabled: релиз собирается на Helm-хуках, иначе контроллер видит дрейф в hook-ресурсах.cleanupJob.enabled: false: post-delete-хук чарта удаляет секреты, созданные setup-джобой (ключ login-сервиса, ключ и PAT машинного админа) — они должны пережить переустановку релиза.dbSslCaCrtSecret/dbSslUserCrtSecret/dbSslAdminCrtSecret, а PKI у CNPG уже есть.minAvailable: 1у обоих. Реплики и ресурсы — ключи верхнего уровня чарта; внутриzitadel:живёт только конфигурация приложения (проверено рендером: с вложенными ключами deployment остаётся в 1 реплике).iam-adminостаётся (дефолтFirstInstance): машинный админ IAM с ключом и PAT — пригодится для IaC/API. Срок действия ключа и PAT — дефолт чарта2029-01-01.Требуется от владельца до деплоя
Секрет в Vault (fish, одна строка, генерация на месте):
Ровно 32 символа; копию значения — в менеджер паролей (без masterkey бэкап БД бесполезен).
Что дальше (после мёржа)
zitadel-initиzitadel-setup, затем подыzitadel-*иzitadel-login-*.https://sso.<домен>→ визард настройки: организация и человек-админ (в v4 человеческий админ не создаётся чартом:LoginClient/LoginClientPatPathиз чарта удалены).SecurityPolicy(OIDC) на первый защищаемый сервис — отдельным MR.sso.<домен>уже резолвится в192.168.40.11; в MikroTik осталась старая записьA sso.grachevko.ru → 192.168.1.2(комментарий «old cluster h1») — почистить.iam-admin-pat(в nssecurity), ключ — вzitadel-machinekey.Проверено
flate test all— 73 passed,flate build allбез ошибок.replicas: 2; PDB у обоихminAvailable: 1; Job/zitadel-init и Job/zitadel-setup с env БД и masterkey; HTTPRoute/zitadel (/→zitadel:8080) и HTTPRoute/zitadel-login (/ui/v2/login→zitadel-login:3000) на хостеsso.${SECRET_DOMAIN}; ConfigMapzitadel-config-yamlсодержит Host/User/Admin/SSL иFirstInstanceсiam-admin._helpers.tpl), а не с main ветки.