NODEDC_PLATFORM/docs/SECURITY_CHECKLIST.md

55 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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