Files
Cibello-app/infrastructure/security/hardening-checklist.md
T
2026-08-05 19:21:11 +07:00

44 lines
2.4 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.
# Säkerhets-hardening checklista (spec §51, §56)
## Server (steg 1, befintlig maskin)
- [ ] Dedikerad Linux-användare `<slug>` (från brand.config.json) utan sudo; äger `/opt/<slug>-platform`
- [ ] Secrets i `/opt/<slug>-platform/secrets/*.env`, ägare `<slug>`, chmod 600
- [ ] Docker-containrar kör som non-root (Dockerfiles gör detta)
- [ ] API exponeras endast på 127.0.0.1 bakom reverse proxy med TLS (API-domän ur brand.config.json)
- [ ] Brandvägg: endast 80/443 inåt; Redis/Postgres nås aldrig utifrån
- [ ] Automatiska säkerhetsuppdateringar (unattended-upgrades)
## AWS
- [ ] Egen IAM-roll `<slug>-app` med åtkomst ENDAST till appens S3-bucket
- [ ] S3: block public access, SSE-S3-kryptering, lifecycle (temporary/ 7 dagar, scans/ 90 dagar)
- [ ] RDS: separat databas + användare med minsta privilegier (create-database.sql)
- [ ] Secrets Manager/SSM för produktionshemligheter (steg 2)
## Applikation
- [x] Lösenord: scrypt med OWASP-parametrar
- [x] Refresh-tokens: hashade, roterande, familjeåterkallelse vid återanvändning
- [x] Rate limiting globalt + strikt på auth-endpoints
- [x] Idempotency-nycklar för känsliga POST (tabell finns; aktiveras per route)
- [x] Correlation-ID på alla requests
- [x] Audit log för känsliga åtgärder
- [x] Zod-validering på all indata
- [x] Säkerhetsheaders (nosniff, frame-deny, no-referrer, no-store)
- [x] CORS låst till kända origins
- [x] Hälsodata i egna tabeller, exponeras aldrig via hushålls-endpoints
- [x] Produktion vägrar starta med dev-hemligheter eller AAMOS_MODE=mock
## GDPR (spec §56)
- [x] Export: `GET /v1/me/export`
- [x] Radering: `DELETE /v1/me` (cascade + anonymisering)
- [x] Samtycken: separata, med tidsstämplar och audit
- [x] Minne: transparent, korrigerbart, pausbart, raderbart
- [x] Träningsdata endast med `anonymized_improvement`-samtycke (snapshot per korrigering)
- [x] Retentionspolicy automatiserad: dagligt RUN_RETENTION-jobb (tokens 7 d, refresh 30 d, skanningar/notiser 90 d); S3 lifecycle sätts vid bucket-skapandet (runbook steg 3)
- [x] Backup-restore-test genomfört och protokollfört (skript: infrastructure/deployment/backup-restore-test.sh; senaste protokoll i infrastructure/backups/ GODKÄND, 62 tabeller identiska). Upprepa kvartalsvis
- [ ] Personuppgiftsbiträdesavtal med AWS + AAMOS-drift
- [x] Ingen hälso-/kostdata till reklam policybeslut, inga annons-SDK:er i appen