Säkerhet
Flowion ansluter riktiga laddstationer till riktiga organisationers laddnätverk, så vi ser autentisering, behörighet och dataisolering som en kärna i produkten, inte som något i efterhand. Den här sidan beskriver hur systemet i drift skyddar dina laddstationer, ditt team och dina förare.
I korthet
| Område | Hur |
|---|---|
| Anslutningar | TLS på varje anslutning: konsolen, API:t och varje laddstation |
| Operatörsinloggning | Google, GitHub eller en länk via e-post, genom Google Cloud Identity Platform. Inga lösenord |
| Laddstationsinloggning | Ett hashat lösenord per laddstation som kan bytas, över TLS, eller ett klientcertifikat från vår egen certifikatutfärdare på laddstationer som stöder det |
| Isolering mellan kunder | Varje anrop behörighetskontrolleras mot verkligt medlemskap och de behörighetspolicyer personen faktiskt har |
| Förarnas id-uppgifter | Krypterade vid lagring; att visa en kräver en behörighet som bara policyn Owner innehåller, och det loggas |
| Drift | Google Cloud, region Stockholm, uppsatt som kod |
| Rapportering | security@flowion.io |
Kryptering under överföring
Varje anslutning till plattformen går över TLS – webbläsarsessioner mot konsolen, anrop till hanterings-API:t och varje laddstations anslutning till plattformen. Inget pratar med Flowion i klartext.
Autentisering av operatörer
För att logga in i konsolen eller anropa hanterings-API:t krävs en giltig ID-token från vår identitetsleverantör, Google Cloud Identity Platform. Du loggar in med Google, med GitHub eller med en länk som vi mejlar dig: det finns inga Flowion-lösenord att gissa, återanvända eller läcka. Varje anrop verifieras mot Googles publicerade nycklar – signatur, giltighetstid, utfärdare och mottagare kontrolleras innan ett anrop räknas som autentiserat.
För sina egna backends kan operatörer skapa avgränsade API-nycklar. En nyckel visas en gång och lagras bara som en hash, är avgränsad till en enda organisation eller ett enda projekt, kan ha ett fast utgångsdatum, kan aldrig ha policyn Owner och kan återkallas när som helst.
Autentisering av laddstationer
Varje laddstation autentiserar sig med ett eget lösenord som skickas över TLS (OCPP Security Profile 2). Varje lösenord hashas med Argon2id innan det alls skrivs till databasen; vi lagrar inte lösenordet i klartext och kan inte återskapa det, bara verifiera det. En laddstations lösenord kan bytas när som helst, utan fysisk åtkomst till hårdvaran.
Laddstationer som stöder det kan i stället autentisera sig med ett TLS-klientcertifikat (OCPP Security Profile 3), utfärdat av Flowions egen certifikatutfärdare.
Behörighet och isolering mellan kunder
Varje anrop till hanterings-API:t behörighetskontrolleras mot verkligt medlemskap i organisationen – de behörighetspolicyer personen faktiskt har, i hela organisationen eller i ett enskilt projekt (Owner, Admin eller User), och vad var och en tillåter – aldrig mot ett kund-id som klienten själv skickar med. Ett anrop för en organisation, ett projekt eller en laddstation du inte tillhör får samma ”hittades inte”-svar som ett anrop för något som inte finns, så obehöriga anrop kan inte användas för att kartlägga andra kunders data.
När en kund ger en installatör åtkomst till sina laddstationer omfattar åtkomsten driftsättning och felsökning för de laddstationer kunden anger. Den når aldrig kundens fakturering, medlemmar, förarnas id-uppgifter eller laddningar, och båda parter kan avsluta den när som helst.
Anrop till API:t från andra ursprung är begränsade till kända, uttryckligen tillåtna webbläsarursprung.
Förarnas data
Laddbrickor och andra id-uppgifter som ett laddnätverk accepterar är personuppgifter, och de lagras krypterade. Laddningar hänvisar till en förares id-uppgift bara genom en ogenomskinlig referens, aldrig genom dess värde. Att visa en id-uppgifts värde kräver en behörighet som bara policyn Owner innehåller, och varje visning skrivs till en granskningslogg innan värdet returneras. En kund kan radera en id-uppgift permanent.
Det enda stället där en id-uppgift syns som laddstationen skickade den är loggen över laddstationernas råa meddelanden, som sparas i sju dagar så att ett misslyckat utbyte kan utredas, och sedan raderas.
Webhooks
Varje webhook-leverans är signerad, så att mottagaren kan kontrollera att den kom från Flowion innan den litar på den. En webhook måste använda https, och dess adress kontrolleras vid varje leveransförsök: en adress som slås upp till en privat adress, en loopback-adress eller en länklokal adress nekas, så att en webhook inte kan riktas in i någons nätverk.
Infrastruktur
Flowions backend körs som Rust-tjänster på Google Kubernetes Engine i Google Clouds region i Stockholm, helt uppsatt med Terraform och driftsatt som Helm-charts – ändringar i infrastrukturen granskas som vilken kodändring som helst, i stället för att göras för hand i en konsol. Gatewayen som laddstationerna ansluter till och hanterings-API:t driftsätts och skalas oberoende av varandra, så en driftsättning av den ena avbryter inte den andras aktiva laddstationsanslutningar.
Så bygger vi
Hela testsviten – enhetstester, lint, formatering och de strukturella kontroller som håller reglerna ovan på plats – körs vid varje ändring innan den når produktion. API:ets OpenAPI-specifikation genereras direkt från koden som besvarar anropen, så dokumentationen kan inte i det tysta glida ifrån det som faktiskt är driftsatt. Och var tredje minut startar vi en riktig laddning i produktion, på både äldre och nyare laddstationer, och kontrollerar resultatet genom samma publika API som våra kunder använder.
Rapportera ett säkerhetsproblem
Om du tror att du har hittat en säkerhetsbrist i Flowion, mejla security@flowion.io med detaljerna. Vi tar sådana rapporter på allvar och svarar så snabbt vi kan – ge oss en rimlig chans att utreda och åtgärda problemet innan du offentliggör det.