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

2.4 KiB
Raw Blame History

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

  • Lösenord: scrypt med OWASP-parametrar
  • Refresh-tokens: hashade, roterande, familjeåterkallelse vid återanvändning
  • Rate limiting globalt + strikt på auth-endpoints
  • Idempotency-nycklar för känsliga POST (tabell finns; aktiveras per route)
  • Correlation-ID på alla requests
  • Audit log för känsliga åtgärder
  • Zod-validering på all indata
  • Säkerhetsheaders (nosniff, frame-deny, no-referrer, no-store)
  • CORS låst till kända origins
  • Hälsodata i egna tabeller, exponeras aldrig via hushålls-endpoints
  • Produktion vägrar starta med dev-hemligheter eller AAMOS_MODE=mock

GDPR (spec §56)

  • Export: GET /v1/me/export
  • Radering: DELETE /v1/me (cascade + anonymisering)
  • Samtycken: separata, med tidsstämplar och audit
  • Minne: transparent, korrigerbart, pausbart, raderbart
  • Träningsdata endast med anonymized_improvement-samtycke (snapshot per korrigering)
  • 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)
  • 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
  • Ingen hälso-/kostdata till reklam policybeslut, inga annons-SDK:er i appen