docs(security): genomgång av hardening-checklist inför prod

This commit is contained in:
Sven (AAMOS AI)
2026-08-11 07:30:50 +07:00
parent 8627331cc9
commit 714d0a2e5b
+11 -11
View File
@@ -2,19 +2,19 @@
## 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)
- [ ] 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
- [ ] 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)
- [ ] 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
@@ -39,5 +39,5 @@
- [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
- [ ] Personuppgiftsbiträdesavtal med AWS + AAMOS-drift*ej på plats*
- [x] Ingen hälso-/kostdata till reklam policybeslut, inga annons-SDK:er i appen