Det säkraste fältet är det som aldrig skickas
Maskningen sker på enheten, före överföringen. Ett personnummer som ersattes med [personnummer] i webbläsaren finns inte hos oss, alltså behöver det varken sökas fram, bedömas eller raderas när någon begär det. Nedan står vad som maskas, vad ni styr själva, hur ni kör Log i er egen miljö, och vem som kommer åt det som ligger kvar.

I Europa, med maskning innan den lämnar din process
Tjugoen fält och fem mönster maskas i klienten, alltså före sändningen. Det som aldrig lämnar din server kan ingen läcka.

Lagring i Europa, med utpekad region. 
Maskningen sker hos dig, inte hos oss. 
Historiken går att exportera, hela vägen tillbaka.

Regionen står utpekad, inte antydd. 
Det som aldrig lämnar er process kan ingen läcka. 
Historiken går att exportera hela vägen tillbaka.
Fem mönster och tjugoen fältnamn, före sändningen
Maskningen körs på två sätt samtidigt. Fältnamnet jämförs mot standardlistan, och innehållet jämförs mot mönstren. Ett värde behöver alltså bara träffa en av dem för att ersättas.
Mönstren, med ett exempel före och efter
| Vad | Formen som träffas | Blir |
|---|---|---|
| Personnummer | Sex siffror, valfritt bindestreck eller plus, sedan fyra siffror | [personnummer] |
| Kortnummer | Tretton till nitton siffror, med eller utan mellanslag och bindestreck | [kortnummer] |
| E-postadress | Namn, snabel-a, domän och toppdomän | [epost] |
| Nycklar | sk_, pk_ eller rk_ följt av live eller test och minst tio tecken | [nyckel] |
| Bärartoken | Ordet Bearer följt av ett värde | Bearer [maskerad] |
- PersonnummerKund 900101-1234 kunde inte betalaKund [personnummer] kunde inte betala
- KortnummerAvvisat kort 4242 4242 4242 4242Avvisat kort [kortnummer]
- E-postadressIngen mottagare för anna@example.seIngen mottagare för [epost]
- NycklarNekad med sk_live_51Hx9QpABCDEFNekad med [nyckel]
- BärartokenAuthorization: Bearer eyJhbGciOiJIAuthorization: Bearer [maskerad]
Mönstren ligger i PATTERNS och körs av scrubString i packages/telemetry/src/index.ts. De körs på meddelandet och på stackspåret, alltså också på text ni själva aldrig hade tänkt skicka.
21 fältnamn, ordagrant ur standardlistan
- password
- losenord
- lösenord
- token
- secret
- authorization
- cookie
- apikey
- api_key
- personnummer
- ssn
- card
- kortnummer
- cvc
- cvv
- iban
- epost
- e-post
- phone
- telefon
Jämförelsen görs gemen och på delsträng. Ett fält som heter kundEpost träffar alltså epost, och ett fält som heter API_KEY_V2 träffar api_key. Värdet ersätts med [maskerad], och nyckelns namn står kvar så att felet fortfarande går att läsa.
- Fältnamn i standardlistan
- 21
- Mönster som gäller oavsett fältnamn
- 5
- Egna fältnamn ni lägger till i scrubKeys
- utan tak
- Nivåer maskningen går ned i ett nästlat objekt
- 6
- Poster som behålls ur en lista
- 50
- Nivåer där maskningen går att stänga av
- 0
Listan och jämförelsen ligger i DEFAULT_SCRUB och i funktionen scrub i packages/telemetry/src/index.ts. Maskningen går sex nivåer ned i ett nästlat objekt och kortar en lista till femtio poster, så att ett djupt objekt inte kan smyga förbi genom att vara djupt.
1log.captureError(fel, {
2 ordernummer: order.id,
3 epost: "anna@example.se",
4 authorization: "Bearer eyJhbGciOiJI",
5 meddelande: "Kund 900101-1234 nekades",
6});
Så här ser anropet ut i er kod. Fälten epost och authorization träffar standardlistan, och personnumret inuti meddelandet träffar ett mönster.
1"context": {
2 "ordernummer": "SO-49182",
3 "epost": "[maskerad]",
4 "authorization": "[maskerad]",
5 "meddelande": "Kund [personnummer] nekades"
6}
Så här ser samma anrop ut när det lämnar enheten. Ordernumret står kvar, eftersom det är det ni behöver för att felsöka. Resten är borta redan här, inte hos oss.

Fältnamnet och innehållet prövas samtidigt. 
Mönstren körs också på stackspåret, inte bara på fälten.
Ni bestämmer vad som skickas, hur länge det ligger kvar och var
Fyra reglage, och alla fyra sitter hos er. Två av dem sitter i klienten och gäller före sändningen, två sitter i projektet och gäller det som redan kommit in.
Egna fält som alltid maskas
scrubKeys tar era egna fältnamn, till exempel kundnummer eller leveransadress. De läggs till standardlistan. Det finns ingen väg att ta bort ett namn som redan står där, alltså kan en förbättring i klienten aldrig göra er behandling sämre.
Gäller före sändningenHur mycket som skickas alls
sampleRate avgör andelen som lämnar enheten, och maxEventsPerSession sätter taket per session till hundra som standard. Det som sållas bort räknas i dropped.sampled respektive dropped.quota, så en förlust är aldrig tyst.
Gäller före sändningenIngenting alls från utvecklingsmiljön
Är environment satt till development returnerar capture direkt. Era lokala fel, era testkunder och era påhittade personnummer lämnar aldrig maskinen, och de kostar heller ingenting av kvoten.
Gäller före sändningenHur länge det ligger kvar
Kvarhållningen sätts per projekt och inte per konto, alltså kan ett projekt med känsligare data hålla kortare än resten. Fri håller 30 dagar och Team håller 90 dagar.
Ingår från FriRegler per fält, för den som måste kunna visa dem
Planen Enterprise bär datastyrning per fält, med regler för vad som aldrig får lagras. Regeln gäller på mottagningssidan och träffar därmed också det som kommer in via OpenTelemetry från ett annat språk.
Ingår i EnterpriseUt igen, när ni vill
Exporten är öppen hela tiden och kostar ingenting. Ni behöver inte fråga oss, och ni behöver inte säga upp något för att få ut era data.
Ingår från Fri
scrubKeys, sampleRate, maxEventsPerSession och environment är fält i TelemetryConfig i packages/telemetry/src/index.ts. Kvarhållningen står som kvot i planerna i packages/pricing/src/index.ts, och datastyrning per fält står i planen Enterprise i samma fil.
1const log = initTelemetry({
2 ingestKey: "gdr_pk_din_nyckel",
3 environment: "production",
4 scrubKeys: ["kundnummer", "leveransadress", "fodelsedatum"],
5 sampleRate: 0.25,
6 maxEventsPerSession: 50,
7});
Fyra rader beskriver hela er behandling på klientsidan: vad som maskas utöver standarden, hur stor andel som skickas, och hur många händelser en session får producera innan taket slår till.

Två reglage sitter i klienten och gäller före sändningen. 
Två sitter i projektet och gäller det som redan kommit in. 
Ingen inställning stänger av maskningen.
Er maskin, era nycklar, samma produkt
Säger era efterlevnadskrav att loggarna aldrig får lämna er miljö, så gör de inte det. Klienten pekar om sin endpoint, och resten av koden ser likadan ut.
- Allt i Team
- Drift i er miljö, eller i vår, i Sverige
- SSO, SCIM och revisionslogg
- Datastyrning per fält, med regler för vad som aldrig får lagras
- Svarstid enligt avtal, med kompensation om vi missar den
Vill ni hellre att vi kör den åt er gör vi det i Sverige, med regionen utpekad i avtalet. Båda vägarna ligger i planen Enterprise, som prissätts i avtal.
Innehållet i listan är planen Enterprise ordagrant som den står i packages/pricing/src/index.ts. Fältet endpoint står i TelemetryConfig i packages/telemetry/src/index.ts, med standardvärdet https://log.gaddr.com/api/ingest/v1.
const log = initTelemetry({
ingestKey: "gdr_pk_din_nyckel",
environment: "production",
endpoint: "https://log.internt.example.se/api/ingest/v1",
});
En rad skiljer drift hos oss från drift hos er. Maskningen, taket och buntningen fungerar likadant i båda fallen, eftersom de sitter i klienten och inte i mottagaren.

En rad skiljer drift hos oss från drift hos er. 
Klienten pekar om sin endpoint, resten ser likadan ut.
Vem läste vad, och när
En loggplattform samlar det känsligaste ni har och gör det sökbart för hela teamet. Då är frågan om vem som sökte på vad en säkerhetsfråga i sig, och den ska gå att besvara i efterhand.
- Varje sökning, varje öppnad session och varje export skrivs som en rad med konto, tidpunkt och vad som lästes.
- Raderna går att läsa i vyn och att hämta ut, så att de kan läggas i ert eget arkiv utan att gå genom oss.
- Kontona styrs med SSO och SCIM, alltså tas åtkomsten bort i samma stund som anställningen gör det, från ert eget katalogsystem.
- Revisionsloggen går inte att redigera från vyn. En rad som går att ta bort av den som granskas är inte en revisionslogg.
Att alla i teamet får ett eget konto är en säkerhetsegenskap och inte bara en prisfråga. Delade inloggningar uppstår när ett konto kostar pengar, och en delad inloggning gör varje revisionslogg oläsbar. Kvoten för användare är utan tak redan i planen Fri, som kostar 0 kr.
SSO, SCIM och revisionslogg står i planen Enterprise i packages/pricing/src/index.ts. Kvoten för användare står i planen Fri i samma fil.

Frågan om vem som sökte på vad går att besvara i efterhand. 
Åtkomsten är en säkerhetsfråga i sig, inte en eftertanke.
Det som brukar komma från den som ska godkänna

Vanliga frågor
Går maskningen att stänga av?
Nej. Standardlistan läggs alltid först, och era egna namn i scrubKeys läggs till efter den. Det finns ingen flagga som tömmer listan, alltså kan ingen i ert team råka skicka ett lösenord genom att ändra en inställning.
Var sker maskningen, hos er eller hos oss?
Hos er, i klienten, före överföringen. Det är hela poängen. Data som aldrig lämnade enheten behöver varken sökas fram, bedömas eller raderas när någon begär det, och den kan inte läcka från en lagring den aldrig låg i.
Vad händer med ett personnummer som ligger inuti ett felmeddelande?
Det ersätts med [personnummer]. Mönstren körs på meddelandet och på stackspåret, inte bara på fälten ni skickar med som kontext. Ett kortnummer i samma mening ersätts med [kortnummer] i samma anrop.
Kan vi lägga till egna fält som alltid ska maskas?
Ja, med scrubKeys. Ni skickar in en lista med namn, till exempel kundnummer eller leveransadress, och de behandlas som standardlistans namn. Antalet är utan tak.
Är inmatningsnyckeln en hemlighet?
Nej. Den är publik, den skriver bara, och den får ligga i klientbygget. Den ger ingen åtkomst att läsa era data. Läcker den ändå återkallar ni den i projektets inställningar och skapar en ny.
Kan vi köra Log helt i vår egen miljö?
Ja, i planen Enterprise. Klienten pekar om sin endpoint och resten av koden ser likadan ut. Vill ni hellre att vi driftar den kör vi i Sverige, med regionen utpekad i avtalet.
Vem hos er kan läsa våra loggar?
Ingen utan att det står i revisionsloggen. Kör ni i egen miljö når vi dem inte alls, eftersom de aldrig lämnar er drift. Personuppgiftsbiträdesavtalet och registret över behandlingar hör till avtalet i planen Enterprise.
Skickar ni våra data vidare till någon annan?
Nej. Era data säljs inte vidare i någon form, och de används inte till något annat än att visa dem för er. Det står i villkoren och i integritetsinformationen.
Vad kostar säkerheten extra?
Maskningen, taket och kvarhållningen per projekt ingår från planen Fri, som kostar 0 kr. SSO, SCIM, revisionslogg och datastyrning per fält ligger i Enterprise, som prissätts i avtal. Beloppen på prissidan står exkl. moms.
Läs koden innan ni tror oss
Varje påstående på den här sidan pekar på en funktion i packages/telemetry/src/index.ts eller på en plan i packages/pricing/src/index.ts. Kom igång visar samma sak i den ordning ni skriver den.
