Hvad er hemmeligheder, og hvordan man håndterer dem i Java
Hemmeligheder er tegnstrenge, der ikke skal deles med omverdenen: Det kan være databaseadgangskoder, private krypteringsnøgler, personlige adgangstokens osv. Af hensyn til øget sikkerhed mener mange også, at alt, der kan hjælpe en hacker, bør betragtes som en hemmelighed: URL-adressen til din produktionsdatabase kan f.eks. ses som en hemmelighed. Databasen bør ikke være offentligt tilgængelig. Rationalet er, at denne type oplysninger er følsomme af natur, og jo mindre information er tilgængelig i din kode, jo bedre.
Hvad er Zero Trust og Zero Secrets?
Begrebet Zero Trust er, at ingen bør være blindt betroet, og lov til at få adgang til virksomhedens ressourcer uden at blive valideret og godkendt.
Dette koncept gælder også for webprogrammer: De bør ikke have hemmeligheder gemt i deres kode eller i deres endelige binære filer. Det er det, vi kalder Zero Secrets.
Hemmeligheder skal administreres af et eksternt system med strenge adgangsregler og validering for at reducere risikoen for angreb.
Placer ikke hemmeligheder i Git-lagre
Selvom dit Git-lager er privat, er det en dårlig praksis at placere enhver hemmelighed i din kildekode:
- Alle med adgang til dit lager kender dine følsomme data
- Alle med adgang til dit binære program kan udtrække hemmeligheder fra det
Når en hemmelighed er gemt i et Git-lager, kan hackere også altid finde den ved at kigge i lagerets historie, hvor den kan glemmes efter lang tid.
Selvom det virker praktisk at gøre det, bør du aldrig gemme nogen hemmeligheder i dit kildekodelager. Hvis du vil undgå dette problem, kan du bruge automatiske værktøjer, der regelmæssigt kontrollerer dit lager og sender advarsler, hvis de finder en adgangskode eller url-adresse til databasen, der er gemt ved en fejl.
Brug af miljøvariabler
Den nemmeste løsning til administration af hemmeligheder er at bruge miljøvariabler. De har flere fordele:
- De er nemme at bruge
- De arbejder på alle systemer (selv i systemer i det lokale miljø)
- Alle kender dem og forstår, hvordan de fungerer
De er dog ikke sikre nok: Alle processer på dit system kan læse dem, og de vises nemt ved hjælp af JMX (Java Management Extensions) på et Java-system.
Derfor ses miljøvariabler ofte som et første skridt i retning af Zero Trust: De er mere sikre end at gemme hemmeligheder direkte i kildekoden, men de mangler administrationsfunktioner og er nemme at få adgang til for hackere.
Brug af Kubernetes-hemmeligheder
Kubernetes har en forestilling om secrets, som er en anden god løsning. Disse hemmeligheder kan indlæses som en fil i programmets filsystem: Et Java-program kan derefter læse filen på starttidspunktet for at få adgang til disse hemmeligheder. Værktøjer som f.eks. spring frameworks har endda standardunderstøttelse af denne mekanisme, hvilket gør det muligt for dem at bruge disse hemmeligheder på en nem og effektiv måde.
Denne mekanisme er mere sikker end miljøvariabler, da disse filer kan være skrivebeskyttet af den proces, der kræver dem. De drager også fordel af det rige Kubernetes-økosystem, og de kan administreres af forskellige administrationsværktøjer, herunder de værktøjer, der leveres af din cloududbyder.
Selvom Kubernetes-hemmeligheder er en god løsning for Kubernetes, er de også begrænset til Kubernetes og mangler avancerede administrationsfunktioner, afhængigt af de værktøjer, der bruges til at administrere Kubernetes-infrastrukturen.
Brug af en butik med hemmeligheder
En butik med hemmeligheder, f.eks. Hashicorp Vault eller Azure Key Vault, er specialiseret software til administration af hemmeligheder. Det tilbyder et omfattende administrationssystem til at godkende brugere, rotere sikkerhedsnøgler og validerer, hvilket program der kan få adgang til hvilken hemmelighed.
De leverer også en ekstern API, så de kan bruges på et hvilket som helst system. Du kan f.eks. bruge Azure Key Vault på alle Azure-tjenester, herunder Virtual Machines, Azure App Services, Azure Kubernetes Services eller Azure Spring Apps.
En secrets store er den mest sikre løsning til administration af hemmeligheder, men de kræver brug af et dedikeret værktøj.