4.1 KiB
4.1 KiB
Security Checklist
Staging path and runbook: docs/STAGING_SECURITY_PLAN.md.
Network
- Local dev compose публикует только reverse proxy port.
- Postgres не опубликован наружу в staging/production.
- Redis не опубликован наружу в staging/production.
- MinIO/storage не опубликован наружу в staging/production.
- Внутренние API не доступны напрямую извне.
- Authentik получает
X-Forwarded-Proto,X-Forwarded-For,Hostчерез Caddy. - Caddy reverse proxy сохраняет HTTP/1.1/WebSocket upgrade behavior для upstream.
Authentik
- Каждое приложение имеет отдельный Authentik Application.
- Каждое приложение имеет отдельный Provider.
- Для каждого приложения задана отдельная access policy.
- Группы app access заведены отдельно от app-local ролей.
- MFA/enrollment policy вынесены в отдельный этап.
- Authentik local compose не публикует server/worker/Postgres ports напрямую.
Launcher
- Authentik service token хранится только server-side.
- Frontend не получает service token.
- Admin endpoints требуют
nodedc:superadminилиnodedc:launcher:admin. - Все admin actions пишутся в audit log.
- Удаление пользователя реализовано как deactivate/disable, не hard delete.
- Local runtime не отдает
storage/launcher-data.jsonнапрямую через public static route. - Local runtime требует user session для
/api/storage/data.
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.
- Local internal API token отделен от
PLANE_OIDC_CLIENT_SECRET. - Launcher internal access API отклоняет запросы без token, с неверным token и со старым OIDC client secret.
- Tasker internal logout API отклоняет запросы без token и со старым OIDC client secret.
Acceptance scenarios
- Без логина Launcher отправляет в Authentik.
- Пользователь без Task Manager app access не видит Task Manager в Launcher.
- Пользователь без Task Manager app access получает deny в Tasker access middleware при прямом доступе.
- Пользователь с доступом открывает Task Manager.
- Старый Plane admin после OIDC видит старые workspace/tasks/comments.
- Деактивированный пользователь теряет доступ.
- Hard-deleted/annulled user теряет stale Tasker identity link и старая unlinked-сессия отзывается middleware.
- Hard-deleted/annulled user удаляется из active Tasker workspace/project members и issue assignees.
- Self-host Tasker workspace invite создает pending request в Launcher, а launcher-managed workspace не принимает self-service invite request.
- Admin action появляется в audit log.
- Повторный accept уже принятого invite отклоняется.