55 lines
2.9 KiB
Markdown
55 lines
2.9 KiB
Markdown
# 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.
|