Files
Sven (AAMOS AI) c32a7e33c7
CI / Typecheck, test & build (push) Failing after 2s
ci: trigga på master + formatfix inför Gitea Actions
2026-08-13 17:25:14 +07:00

44 lines
2.9 KiB
Markdown
Raw Permalink 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`_ej provisionerad (/opt tom)_
- [ ] Secrets i `/opt/<slug>-platform/secrets/*.env`, ägare `<slug>`, chmod 600 — _ej provisionerad_
- [x] Docker-containrar kör som non-root — `Dockerfile.api` och `Dockerfile.worker` har `USER app`; **`Dockerfile.admin` saknar USER och kör som root** (gap)
- [ ] API exponeras endast på 127.0.0.1 bakom reverse proxy med TLS (API-domän ur brand.config.json) — _deploy-skriptet väntar 127.0.0.1:4100/healthz, men reverse proxy/TLS är ej uppsatt i denna miljö_
- [ ] Brandvägg: endast 80/443 inåt; Redis/Postgres nås aldrig utifrån — _ej verifierad i denna miljö_
- [ ] Automatiska säkerhetsuppdateringar (unattended-upgrades) — _ej verifierad i denna miljö_
## AWS
- [ ] Egen IAM-roll `<slug>-app` med åtkomst ENDAST till appens S3-bucket — _ej provisionerad_
- [ ] S3: block public access, SSE-S3-kryptering, lifecycle (temporary/ 7 dagar, scans/ 90 dagar) — _ej provisionerad_
- [x] RDS: separat databas + användare med minsta privilegier — `create-database.sql` finns och skapar begränsad roll; faktisk RDS-instans ej provisionerad i denna miljö
- [ ] Secrets Manager/SSM för produktionshemligheter (steg 2) — _ej provisionerad; first-deploy.sh vägrar generera prod-secrets_
## 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 — _ej på plats_
- [x] Ingen hälso-/kostdata till reklam policybeslut, inga annons-SDK:er i appen