# 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.