Nyckelhierarki
Hur hemlighetsvärden krypteras, var huvudnyckeln förvaras och vad det innebär att förlora den.
Två nivåer av nycklar
- Varje värde krypteras med AES-256-GCM. Chiffertexten är bunden till sitt valv, sin hemlighet och sin version, så den kan inte flyttas till en annan hemlighet.
- Varje valv har en egen datanyckel. Den förvaras krypterad — omsluten med huvudnyckeln — i
Kubernetes-hemligheten
sv-keys-<vault>i valvets namespace, aldrig i databasen. - Huvudnyckeln (nyckelkrypteringsnyckeln) är en Kubernetes-hemlighet med namnet
stackship-secrets-kekistackship-system, datanyckelkey: 32 slumpmässiga byte, base64-kodade.
Databasen innehåller bara metadata och chiffertext.
Huvudnyckeln
Installern skapar huvudnyckeln vid den första installationen och ersätter aldrig en befintlig.
Secrets-tjänsten kontrollerar den när den startar och vägrar starta när hemligheten saknas, saknar
key eller innehåller en nyckel som inte är 32 byte eller ser svag ut (till exempel läsbar text
eller för lite variation); loggen säger då vad som är fel. När allt stämmer loggar den nyckelns
fingeravtryck som sha256:…, så att du kan bekräfta att två installationer använder samma nyckel
utan att avslöja den.
Tjänsten håller huvudnyckeln i minnet så länge den kör, och upplåsta valvnycklar i fem minuter.
Rotation
Ingen av nycklarna kan roteras i dag. Att byta huvudnyckel gör alla befintliga valv oläsbara, och tjänsten vägrar skapa en valvnyckel där det redan finns en.
Säkerhetskopiera huvudnyckeln
Utan huvudnyckeln kan inget valv läsas. Förvara en kopia av stackship-secrets-kek utanför
klustret, lika varsamt som själva hemligheterna. En återställd plattform måste få tillbaka samma
huvudnyckel: valvnycklarna i hemligheterna sv-keys-* kan bara låsas upp med den.