Uvod u Spring Cloud Vault

1. Pregled

U ovom uputstvu pokazat ćemo kako možemo koristiti Hashicorpov Vault u Spring Boot aplikacijama za zaštitu osjetljivih podataka o konfiguraciji.

Ovdje pretpostavljamo neko znanje iz Vault-a i da već imamo pokrenut testni program. Ako to nije slučaj, odvojimo trenutak i pročitajte naš vodič za Vault Intro kako bismo se mogli upoznati s njegovim osnovama.

2. Proljetni oblačni svod

Spring Cloud Vault relativno je nedavni dodatak Spring Cloud stogu koji omogućuje aplikacijama pristup tajnama pohranjenim u instanci Trezora na transparentan način.

Općenito, migracija na Vault vrlo je jednostavan postupak: samo dodajte potrebne knjižnice i dodajte nekoliko dodatnih konfiguracijskih svojstava u naš projekt i trebali bismo krenuti. Nisu potrebne promjene koda!

To je moguće jer djeluje kao prioritet PropertySource registriran u tekućem Okoliš.

Kao takav, Spring će ga koristiti kad god je potrebno svojstvo. Primjeri uključuju Izvor podataka Svojstva, ConfigurationProperties, i tako dalje.

3. Dodavanje Spring Cloud Vault-a projektu Spring Boot

Da bi se uključio proljeće-oblak-svod knjižnicu u projektu Spring Boot koji se temelji na Mavenu, koristimo pridruženu starter artefakt, koji će povući sve potrebne ovisnosti.

Osim glavne starter, uključit ćemo i baze podataka spring-vault-config-data, koji dodaje podršku za vjerodajnice dinamičke baze podataka:

 baze podataka baze podataka org.springframework.cloud spring-cloud-starter-vault-config org.springframework.cloud-spring-cloud-vault-config-config 

Najnoviju verziju pokretača Spring Cloud Vault možete preuzeti s Maven Central.

3.1. Osnovna konfiguracija

Da bi ispravno radio, Spring Cloud Vault treba način da odredi gdje će kontaktirati poslužitelj Vault-a i kako se autentificirati protiv njega.

To činimo davanjem potrebnih podataka u bootstrap.yml ili bootstrap.svojstva:

# bootstrap.yml spring: cloud: vault: uri: // localhost: 8200 ssl: trust-store: classpath: /vault.jks trust-store-password: changeit 

The proljeće. oblak.svod.uri svojstvo ukazuje na API adresu Vault-a. Budući da naše testno okruženje koristi HTTPS sa samopotpisanim certifikatom, također moramo pružiti pohranu ključeva koja sadrži njegov javni ključ.

Imajte na umu da ova konfiguracija nema podataka za provjeru autentičnosti. U najjednostavnijem slučaju, kada koristimo fiksni token, možemo ga proslijediti kroz svojstvo sustava proljeće. oblak.skup.token ili varijabla okoline. Ovaj pristup dobro funkcionira zajedno sa standardnim mehanizmima za konfiguraciju oblaka, poput Kubernetesovih ConfigMaps ili Docker tajni.

Spring Vault također zahtijeva dodatnu konfiguraciju za svaku vrstu tajne koju želimo koristiti u našoj aplikaciji. Sljedeći odjeljci opisuju kako možemo dodati podršku za dvije uobičajene tajne vrste: ključ / vrijednost i vjerodajnice baze podataka.

4. Korištenje generičkih tajni

Za pristup koristimo generičku tajnu bezverzijski tajne pohranjene kao parovi ključ / vrijednost u trezoru.

Pod pretpostavkom da već imamo spring-cloud-starter-vault-config ovisnost u našem razredna staza, sve što moramo učiniti je dodati nekoliko svojstava aplikaciji bootstrap.yml konfiguracijska datoteka:

spring: cloud: vault: # ostala svojstva trezora su izostavljena ... generičko: omogućeno: true name-name: fakebank 

Vlasništvo naziv aplikacije nije obavezno u ovom slučaju. Ako nije navedeno, Spring će poprimiti vrijednost standarda proljeće.aplikacija.ime umjesto toga.

Sada možemo koristiti sve parove ključ / vrijednost pohranjene u tajna / lažna banka kao i svaki drugi Okoliš imovine. Sljedeći isječak pokazuje kako možemo pročitati vrijednost foo ključ pohranjen pod ovom stazom:

@Autowired Environment env; javni String getFoo () {return env.getProperty ("foo"); } 

Kao što vidimo, sam kôd ne zna ništa o Trezoru, što je dobra stvar! I dalje možemo koristiti fiksna svojstva u lokalnim testovima i prebaciti se na Vault po želji tako što ćemo omogućiti samo jedno svojstvo u bootstrap.yml.

4.1. Napomena o proljetnim profilima

Ako je dostupno u trenutnoj verziji Okoliš, Proljetni oblačni svod će koristiti dostupna imena profila kao sufiks dodan navedenom osnovnom putu gdje će se tražiti parovi ključ / vrijednost.

Također će tražiti svojstva pod konfigurabilnom zadanom aplikacijskom stazom (sa i bez sufiksa profila), tako da možemo dijeliti tajne na jednom mjestu. Ovu značajku koristite oprezno!

Da rezimiramo, ako je proizvodnja profil out lažna banka aplikacija aktivna, Spring Vault će tražiti svojstva pohranjena na sljedećim stazama:

  1. tajna/lažna banka/proizvodnja (veći prioritet)
  2. tajna/lažna banka
  3. tajna / prijava / izrada
  4. tajna / prijava (niži prioritet)

Na prethodnom popisu, primjena je ime koje Spring koristi kao zadano dodatno mjesto za tajne. Možemo ga izmijeniti pomoću spring.cloud.vault.generic.default-context imovine.

Svojstva pohranjena na najkonkretnijem putu imat će prednost nad ostalima. Na primjer, ako je isto svojstvo foo je dostupan u gornjim stazama, tada bi redoslijed prioriteta bio:

5. Korištenje tajne baze podataka baze podataka

Zaštitni modul baze podataka omogućuje aplikacijama Spring da koriste dinamički generirane vjerodajnice baze podataka koje je stvorio Vault. Spring Vault ubacuje te vjerodajnice prema standardu proljeće.dataizvor.korisničko ime i proljeće.dataizvor.zaporka svojstva tako da ih mogu odabrati redovni Izvor podatakas.

Imajte na umu da prije upotrebe ove pozadine moramo stvoriti konfiguraciju baze podataka i uloge u Trezoru kako je opisano u našem prethodnom vodiču.

Da bismo koristili vjerodajnice baze podataka generirane u Vault-u u našoj proljetnoj aplikaciji, baze podataka proljetnog oblaka-trezora-konfiguracije mora biti prisutan u stazi predavanja projekta, zajedno s odgovarajućim JDBC pokretačkim programom.

Također moramo omogućiti njegovu upotrebu u našoj aplikaciji dodavanjem nekoliko svojstava u našu bootstrap.yml:

proljeće: oblak: trezor: # ... ostala svojstva izostavljena baza podataka: omogućeno: istinska uloga: fakebank-accounts-rw

Ovdje je najvažnije svojstvo uloga svojstvo, koje sadrži ime uloge baze podataka pohranjeno u Trezoru. Tijekom bootstrapa Spring će kontaktirati Vault i zatražiti da kreira nove vjerodajnice s pripadajućim privilegijama.

Trezor će prema zadanim postavkama opozvati privilegije povezane s tim vjerodajnicama nakon konfiguriranog vremena života.

Srećom, Spring Vault automatski će obnoviti najam povezan sa stečenim vjerodajnicama. Na taj način vjerodajnice ostaju važeće dok god je naša aplikacija aktivna.

Pogledajmo sada ovu integraciju na djelu. Sljedeći isječak dobiva novu vezu baze podataka iz Spring-Managed-a Izvor podataka:

Veza c = datasource.getConnection (); 

Još jednom vidimo da u našem kodu nema znakova upotrebe Trezora. Sva integracija događa se na Okoliš na razini, tako da se naš kôd može lako testirati kao i obično.

6. Zaključak

U ovom uputstvu pokazali smo kako integrirati Vault s Spring Bootom pomoću knjižnice Spring Vault. Obradili smo dva uobičajena slučaja upotrebe: generički parovi ključ / vrijednost i vjerodajnice dinamičke baze podataka.

Uzorak projekta koji sadrži sve potrebne ovisnosti, integracijske testove i skripte za postavljanje trezora dostupan je na GitHubu.


$config[zx-auto] not found$config[zx-overlay] not found