Ce sunt secretele, și cum să le manipuleze în Java

Finalizat

Secretele sunt șiruri de caractere care nu ar trebui partajate cu lumea exterioară: acestea ar putea fi parole de bază de date, chei de criptare private, tokenuri de acces personal și așa mai departe. Pentru securitate îmbunătățită, multe persoane consideră, de asemenea, că orice lucru care ar putea ajuta un atacator ar trebui să fie considerat un secret: de exemplu, URL-ul la baza de date de producție ar putea fi văzut ca un secret. Baza de date nu ar trebui să fie accesibilă public. Rațiunea este că acest tip de informații este sensibil prin natură, iar cu atât mai puține informații sunt disponibile în codul dvs., cu atât mai bine.

Ce este Zero Trust și Zero Secrete?

Conceptul de Zero Trust este că nimeni nu ar trebui să fie orbât de încredere și a permis să acceseze resursele firmei fără a fi validat și autorizat.

Acest concept se aplică și aplicațiilor Web: acestea nu ar trebui să aibă secrete stocate în codul lor sau în fișierele lor binare finale. E ceea ce numim Zero Secrete.

Secretele trebuie gestionate de un sistem extern, cu reguli stricte de acces și validare, pentru a reduce riscul de atac.

Nu puneți secrete în depozitele Git

Chiar dacă depozitul dvs. Git este privat, punerea oricărui secret în codul sursă este o practică slabă:

  • Orice persoană care are acces la depozit va ști datele dvs. sensibile
  • Oricine are acces la binarul aplicației poate extrage secrete din el

De asemenea, odată ce un secret este stocat într-un depozit Git, atacatorii îl pot găsi întotdeauna căutând în istoria depozitului, unde poate fi uitat după ce a trecut mult timp.

Chiar dacă pare practic să faceți acest lucru, nu ar trebui să stocați niciodată secrete în depozitul de cod sursă. Pentru a evita această problemă, puteți utiliza instrumente automate care verifică regulat depozitul și trimite avertismente dacă găsesc o parolă sau un URL de bază de date stocat din greșeală.

Utilizarea variabilelor de mediu

Cea mai simplă soluție pentru gestionarea secretelor este să utilizați variabile de mediu. Acestea au mai multe beneficii:

  • Acestea sunt ușor de utilizat
  • Acestea lucrează la toate sistemele (chiar și în sistemele locale)
  • Toată lumea le cunoaște și înțelege cum lucrează

Cu toate acestea, acestea nu sunt suficient de sigure: toate procesele din sistemul dvs. le pot citi și sunt expuse cu ușurință utilizând Java Management Extensions (JMX) pe un sistem Java.

Prin urmare, variabilele de mediu sunt adesea văzute ca un prim pas către Zero Trust: acestea sunt mai sigure decât stocarea secretelor direct în codul sursă, dar acestea nu au capacități de gestionare și sunt ușor de accesat pentru atacatori.

Utilizarea secretelor Kubernetes

Kubernetes are o idee de secrets, care este o altă soluție bună. Aceste secrete pot fi încărcate ca fișier în sistemul de fișiere al aplicației: un program Java poate citi apoi acel fișier la momentul pornirii, pentru a accesa aceste secrete. Instrumente precum Spring Frameworks au chiar suport standard pentru acest mecanism, permițându-le să utilizeze aceste secrete într-un mod ușor și eficient.

Acest mecanism este mai sigur decât variabilele de mediu, deoarece acele fișiere pot fi citite doar de procesul care le solicită. De asemenea, acestea beneficiază de ecosistemul Kubernetes bogat și pot fi gestionate de diverse instrumente de gestionare, inclusiv de instrumentele furnizate de furnizorul dvs. de cloud.

Deși secretele Kubernetes sunt o soluție bună pentru Kubernetes, acestea sunt, de asemenea, limitate la Kubernetes, și lipsa capacităților avansate de gestionare, în funcție de instrumentele utilizate pentru a gestiona infrastructura Kubernetes.

Utilizarea unui magazin Secrete

Un magazin Secrete, cum ar fi Hashicorp Vault sau Azure Key Vault, este software specializat pentru gestionarea secretelor. Acesta oferă un sistem de gestionare îmbogățit pentru a autoriza utilizatorii, a roti cheile de securitate și a valida ce aplicație poate accesa secretul.

De asemenea, oferă un API extern, astfel încât să poată fi utilizat pe orice sistem. De exemplu, puteți utiliza Azure Key Vault pentru toate serviciile Azure, inclusiv mașini virtuale, Servicii de aplicații Azure, Servicii Azure Kubernetes sau aplicații Azure Spring.

Un magazin Secrets este cea mai sigură soluție pentru gestionarea secretelor, dar acestea necesită utilizarea unui instrument dedicat.