Säkerhet och datahantering
Hur vi skyddar din och dina användares data — i klartext, utan marknadsföringspuffning. Denna sida är avsedd för kommunala IT-säkerhetsansvariga och upphandlare.
Datacenter och kryptering
Plats
All data lagras och behandlas i Google Clouds region europe-west1 (Belgien, EU). Vi använder ingen annan region för primär datalagring. Det innebär att din data stannar inom EU/EES och att GDPR:s krav på dataminimering och skydd gäller fullt ut.
Kryptering i vila (encryption-at-rest)
Firestore och Cloud Storage krypterar all data i vila med Google-hanterade nycklar (AES-256) som standard. Vi använder inte kundhanterade krypteringsnycklar (CMEK) i dagsläget — det är en funktion vi utvärderar inför framtida Pro-tier-åtaganden.
Kryptering under transport (in-transit)
All trafik till och från Skolkoll sker via TLS 1.2 eller senare. Firebase Hosting aktiverar HSTS (HTTP Strict Transport Security) automatiskt, vilket förhindrar nedgradering till okrypterad HTTP. Certifikat hanteras automatiskt av Google och förnyas utan manuell åtgärd.
Secrets och autentisering
Secrets Management
Alla hemligheter — inklusive ADMIN_TOKEN, STRIPE_SECRET_KEY
och STRIPE_WEBHOOK_SECRET — lagras i Firebase Secret Manager
(Google Cloud Secret Manager). Inga hemligheter finns hårdkodade i källkod eller miljöfiler.
Cloud Functions v2 hämtar hemligheter vid driftsättning via IAM-kontrollerade bind-anrop.
ID-token revocation
Firebase Authentication-token verifieras med checkRevoked: true på alla
skyddade admin-endpoints. Det innebär att inloggning på en annan enhet, lösenordsbyte
eller manuell token-revokering omedelbart ogiltigförklarar befintliga sessioner, utan att
vänta på token-expiry (standardlivslängd: 1 timme).
Admin-åtkomst
Admin-token roteras manuellt och lagras aldrig i klientkod. Admin-endpoints kräver
HTTP-headern X-Admin-Token med korrekt värde, kontrollerat server-side.
Inga admin-operationer är tillgängliga från webbläsaren utan explicit autentisering.
Kommunlicens SSO
Kommunlicens använder Firebase Authentication som kontolager. Standardflödet är e-postbaserad inloggning och organisationsinbjudningar. För kommuner som kräver central identitetshantering kan SAML 2.0 eller OIDC aktiveras som Enterprise SSO-tillägg.
- IdP-spår: SAML 2.0 eller OIDC, inklusive Microsoft Entra ID/Azure AD.
- Rollmappning: Kommunens IdP styr identiteten; Skolkoll lagrar roll och organisationstillhörighet för behörighet i tjänsten.
- Avslut: När kommunen tar bort användaren i sin IdP upphör ny inloggning. Befintliga Firebase-sessioner kan revokeras manuellt vid behov.
- Start: Metadata-utbyte, testkonto och domänverifiering krävs före produktionsstart.
Se även SSO-status i upphandlingspaketet.
Audit logging
Känsliga administratörsoperationer loggas i Firestore-kollektionen auditLog.
Kollektionen har deny-all Firestore Security Rules — ingen klient
kan läsa eller skriva till den. Åtkomst sker uteslutande via Firebase Admin SDK
(server-side), vilket eliminerar risken för manipulation via klientkod.
Varje audit-loggpost innehåller: tidsstämpel, operation, utförande identitet och påverkat objekt. Loggen raderas inte automatiskt — den bevaras för granskningsändamål.
AI-chatbottens anrop loggas separat med pseudonymiserade poster (SHA-256-hash av IP, längd på fråga/svar, inte innehåll) och raderas automatiskt efter 90 dagar.
Backup och återställning
Firestore-databasen är konfigurerad med Point-in-Time Recovery (PITR) via Google Cloud. Det innebär att vi kan återställa databasens tillstånd till valfri tidpunkt inom de senaste 7 dagarna, utan att behöva manuella backup-rutiner. PITR-fönstret täcker alla oavsiktliga dataändringar eller korruption som kan uppstå under en incidentperiod.
Subprocessors (underbiträden)
Nedanstående tjänster behandlar data på Skolkolls uppdrag. Alla underbiträden är bundna av antingen EU:s standardavtalsklausuler (SCC) eller befinner sig inom EU/EES. En fullständig GDPR-beskrivning finns i vår integritetspolicy.
| Tjänst | Roll / funktion | Plats | GDPR-grund |
|---|---|---|---|
| Firebase / Google Cloud | Hosting, databas (Firestore), Cloud Functions, Secret Manager, Cloud Storage | EU (europe-west1) | Avtal (art. 6.1.b); DPA med Google ingår i Firebase-villkoren |
| Stripe | Betalningshantering för Pro-tjänster; kortuppgifter hanteras aldrig av Skolkoll | USA (PCI DSS-certifierat) | Avtal (art. 6.1.b); SCC; Stripes DPA |
| Google Analytics 4 (GA4) | Anonym besöksstatistik; laddas bara efter samtycke | USA | Samtycke (art. 6.1.a); SCC; IP-anonymisering aktiverad |
| Sentry | Felövervakning; samlar in anonymiserade stacktraces | USA | Berättigat intresse (art. 6.1.f); SCC |
| Anthropic (Claude API) | AI-assistenten Kollen; bearbetar chatmeddelanden i realtid | USA | Samtycke (art. 6.1.a); SCC; Anthropics DPA; data bevaras max 30 dagar hos Anthropic |
| Resend | E-postleverans för skolbevakning och transaktionsmail | USA | Berättigat intresse / samtycke (art. 6.1.f/a); SCC |
| Nominatim (OpenStreetMap) | Geokodning för "Nära mig"-funktionen; ingen persondata lagras | EU/EES | Berättigat intresse (art. 6.1.f); ingen DPIA krävs |
| ResRobot (Trafiklab) | Kollektivtrafikdata för pendlingsflik; koordinater proxas via Skolkolls server | Sverige (EU) | Berättigat intresse (art. 6.1.f) |
| JobTech (JobEd Connect) | Yrkesmatchning för karriärfliken; utbildningstext skickas, ingen persondata | Sverige (EU) | Berättigat intresse (art. 6.1.f) |
| Skolverkets API | Skoldata (öppen data); behandlar inte personuppgifter | Sverige (EU) | Ej tillämpligt (offentlig data) |
Incidentrespons
Vi är ett litet team och vill vara ärliga om vår process: vi har inte ett formellt Security Operations Center (SOC) eller 24/7-beredskap. Vad vi har är en definierad process som vi följer konsekvent.
- Övervakning och detektion: Sentry fångar applikationsfel i realtid. Google Cloud-konsolen har alerting på ovanliga CPU-toppar, quota-överskridanden och auth-fel. Vi granskar Sentry-dashboard dagligen.
- Triage (inom 24 timmar): När en möjlig säkerhetsincident detekteras gör ansvarig utvecklare en initial klassificering: påverkar incidenten personuppgifter? Är tjänsten otillgänglig? Finns tecken på obehörig åtkomst?
- Inneslutning och mitigering: Beroende på incidenttyp vidtas omedelbara åtgärder — revokering av komprometterade tokens, spärr av misstänkta IP-adresser, eller tillfällig nedstängning av berörd funktion.
- Notifiering: Om incidenten bedöms innebära en personuppgiftsincident enligt GDPR art. 33 notifierar vi Integritetsskyddsmyndigheten (IMY) inom 72 timmar. Drabbade registrerade kontaktas om incidenten sannolikt medför hög risk för dem (GDPR art. 34). Notifiering sker via markus@skolkoll.se.
- Återställning: Vid databaspåverkan återställs data via Firestores PITR-funktion (upp till 7 dagars historik). Statiska sidor byggs om från källdata.
- Post-incident review: Efter varje allvarlig incident dokumenterar vi rotorsak, åtgärder och förebyggande ändringar internt. Väsentliga säkerhetsförbättringar kommuniceras i releaseloggen.
Driftstatus och planerat underhåll publiceras på driftsstatussidan.
Compliance och certifieringar
| Standard / krav | Status | Kommentar |
|---|---|---|
| GDPR | Uppfyllt | Fullständig integritetspolicy, samtyckesbanner, DPA tillgängligt på begäran, rätt att radera data |
| SOC 2 Type II | Ej certifierat | Vi följer SOC 2-principerna (säkerhet, tillgänglighet, konfidentialitet) men har inte genomgått en formell Type II-revision. Certifiering utvärderas inför storskalig kommunlansering. |
| ISO 27001 | Ej certifierat | ISO 27001-certifiering är inte genomförd. Vi arbetar strukturerat med informationssäkerhet men utan formell ISMS-implementation. |
| Extern penetrationstest | Ej genomförd | Ingen extern säkerhetsrevision av applikationen har genomförts under 2026. En extern pentest är planerad inför produktionslansering av public free-tier API. |
| PCI DSS | Via Stripe | Skolkoll hanterar inga kortuppgifter direkt. Stripe, som är PCI DSS Level 1-certifierat, hanterar all kortdata. |
Responsible disclosure
Om du upptäcker en säkerhetsbrist i Skolkoll uppskattar vi att du rapporterar den till oss innan du publicerar den offentligt. Vi åtar oss att:
- Bekräfta mottagning av din rapport inom 5 arbetsdagar.
- Hålla dig informerad om utredningens progress.
- Åtgärda bekräftade säkerhetsbrister inom rimlig tid beroende på allvarlighetsgrad.
- Erkänna ditt bidrag i releaseloggen om du önskar det (med ditt samtycke).
Vi erbjuder ingen ekonomisk belöning (bug bounty) i dagsläget, men vi tar alla rapporter på allvar och kommunicerar öppet om utredningens resultat.
Disclosure-policy: Vi tillämpar en 90-dagars koordinerad disclosure-period. Om en brist inte åtgärdats inom 90 dagar från din rapport förbehåller du dig rätten att publicera detaljerna. Vi kommunicerar proaktivt om vi behöver mer tid.
Kontakt: Skicka din rapport till security@skolkoll.se med ämnesraden "Security disclosure". Inkludera reproduktionssteg och bedömning av påverkan. Kryptera gärna med vår offentliga nyckel om du hanterar känslig information — kontakta oss så delar vi den.
Vänligen rapportera inte via GitHub Issues eller sociala medier.
DPA och avtalsdokumentation
Skolkoll fungerar som personuppgiftsbiträde för kommuner och skolor som ansluter sig till Pro-tjänsten. Vi tillhandahåller ett personuppgiftsbiträdesavtal (PuB-avtal / DPA) anpassat för kommunal upphandling.
- Standardmall: Se vår PuB-mall för ett färdigt biträdesavtal.
- Anpassat avtal: Kontakta markus@skolkoll.se om din organisation kräver ett skräddarsytt DPA.
- ROPA (Register of Processing Activities): Tillgänglig på ropa-sidan.
- Dataskyddsdetaljer: Se dataskydds- och underbiträdessidan för operativa GDPR-detaljer.
Se även: Integritetspolicy · SLA och driftnivå · Kommersiell separation · Transparens