АРХ - NODEDC PLATFORM: каркас платформенного репозитория

This commit is contained in:
Codex
2026-05-04 10:02:18 +03:00
commit 0f89c4d126
12 changed files with 755 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
# Security Checklist
## Network
- [ ] Наружу опубликованы только reverse proxy ports.
- [ ] Postgres не опубликован наружу в staging/production.
- [ ] Redis не опубликован наружу в staging/production.
- [ ] MinIO/storage не опубликован наружу в staging/production.
- [ ] Внутренние API не доступны напрямую извне.
- [ ] Authentik получает корректные `X-Forwarded-Proto`, `X-Forwarded-For`, `Host`.
- [ ] WebSocket headers настроены для Authentik/Plane/live.
## Authentik
- [ ] Каждое приложение имеет отдельный Authentik Application.
- [ ] Каждое приложение имеет отдельный Provider.
- [ ] Для каждого приложения задана отдельная access policy.
- [ ] Группы app access заведены отдельно от app-local ролей.
- [ ] MFA/enrollment policy вынесены в отдельный этап.
## Launcher
- [ ] Authentik service token хранится только server-side.
- [ ] Frontend не получает service token.
- [ ] Admin endpoints требуют `nodedc:superadmin` или `nodedc:launcher:admin`.
- [ ] Все admin actions пишутся в audit log.
- [ ] Удаление пользователя реализовано как deactivate/disable, не hard delete.
## Plane
- [ ] Перед изменениями сделан backup DB/env/uploads/storage.
- [ ] Существующий Plane user не пересоздается.
- [ ] `owner_id`, `created_by`, `assignee_id`, `member_id` не меняются без отдельной миграции.
- [ ] Публичный signup отключен.
- [ ] Лишние обходные auth сценарии закрыты или явно оставлены как временные.
- [ ] OIDC login проверяет state/nonce/token.
- [ ] `authentik_sub` связан с существующим `plane_user_id`.
## Tokens and secrets
- [ ] Secrets не попадают в git.
- [ ] Access/refresh tokens не логируются.
- [ ] Session cookies имеют `secure=true` в staging/production.
- [ ] В production включены HTTPS и HSTS.
## Acceptance scenarios
- [ ] Без логина Launcher отправляет в Authentik.
- [ ] Пользователь без `nodedc:taskmanager:access` не видит Task Manager в Launcher.
- [ ] Пользователь без `nodedc:taskmanager:access` получает deny на прямой `task.local.nodedc`.
- [ ] Пользователь с доступом открывает Task Manager.
- [ ] Старый Plane admin после OIDC видит старые workspace/tasks/comments.
- [ ] Деактивированный пользователь теряет доступ.
- [ ] Admin action появляется в audit log.