Bevezetés a Spring Cloud Vault-ba

1. Áttekintés

Ebben az oktatóanyagban megmutatjuk, hogyan használhatjuk a Hashicorp Vault in Spring Boot alkalmazásait az érzékeny konfigurációs adatok biztonságossá tételéhez.

Feltételezzük, hogy itt van némi Vault ismeret, és hogy már van tesztkészletünk és futunk. Ha nem ez a helyzet, akkor szánjunk egy percet a Vault Intro oktatóanyagunk elolvasására, hogy megismerkedhessünk annak alapjaival.

2. Tavaszi felhőboltozat

A Spring Cloud Vault egy viszonylag friss kiegészítője a Spring Cloud stacknek lehetővé teszi az alkalmazások számára, hogy átlátható módon hozzáférjenek a Vault példányban tárolt titkokhoz.

Általában a Vaultra való áttérés nagyon egyszerű folyamat: csak adja hozzá a szükséges könyvtárakat, és adjon hozzá néhány extra konfigurációs tulajdonságot a projektünkhöz, és jónak kell lennünk. Nincs szükség kódváltásra!

Ez azért lehetséges, mert kiemelt prioritásként működik PropertySource bejegyzett a jelenlegi Környezet.

Mint ilyen, a Spring akkor használja, amikor ingatlanra van szükség. Ilyenek például Adatforrás tulajdonságok, ConfigurationProperties, stb.

3. A Spring Cloud Vault hozzáadása a Spring Boot Projecthez

Annak érdekében, hogy a tavasz-felhő-boltozat könyvtárat egy Maven-alapú Spring Boot projektben, a társítottat használjuk indító műtárgy, amely kihúzza az összes szükséges függőséget.

A fő mellett indító, mi is beletesszük a spring-vault-config-adatbázisok, amely támogatja a dinamikus adatbázis-hitelesítő adatok támogatását:

 org.springframework.cloud spring-cloud-starter-vault-config org.springframework.cloud spring-cloud-vault-config-database 

A Spring Cloud Vault indító legújabb verziója letölthető a Maven Central oldalról.

3.1. Alapkonfiguráció

A megfelelő működés érdekében a Spring Cloud Vaultnak módjára van szüksége annak meghatározására, hogy hol vegye fel a kapcsolatot a Vault szerverével, és hogyan hitelesítse magát az ellen.

Ezt úgy tesszük meg, hogy a szükséges információkat megadjuk a bootstrap.yml vagy bootstrap.tulajdonságok:

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

A tavasz.felhő.boltozat.uri tulajdonság a Vault API-címére mutat. Mivel tesztkörnyezetünk HTTPS-t használ, önaláírt tanúsítvánnyal, meg kell adnunk egy kulcstárat, amely tartalmazza a nyilvános kulcsát.

Vegye figyelembe, hogy ennek a konfigurációnak nincs hitelesítési adata. A legegyszerűbb esetben, ha fix tokent használunk, átadhatjuk a rendszer tulajdonságán tavasz.felhő.boltozat.mondta vagy környezeti változó. Ez a megközelítés jól működik a szokásos felhő konfigurációs mechanizmusokkal, például a Kubernetes ConfigMaps vagy a Docker titkokkal együtt.

A Spring Vault emellett külön konfigurációt is igényel minden olyan titokhoz, amelyet az alkalmazásunkban használni szeretnénk. A következő szakaszok leírják, hogyan adhatunk támogatást két általános titkos típushoz: kulcs / érték és adatbázis hitelesítő adatok.

4. A General Secrets Backend használata

A hozzáféréshez a Generic Secret háttérprogramot használjuk változatlan Key érték párokként tárolt titkok a Vaultban.

Feltéve, hogy már megvan a spring-cloud-starter-vault-config függőség a mi osztályút, csak annyit kell tennünk, hogy hozzáadunk néhány tulajdonságot az alkalmazáshoz bootstrap.yml konfigurációs fájl:

tavasz: felhő: boltozat: # egyéb tároló tulajdonság kihagyva ... általános: engedélyezve: igaz alkalmazásnév: fakebank 

A tulajdon Alkalmazás neve ebben az esetben nem kötelező. Ha nincs megadva, a Spring felveszi a szabvány értékét tavasz.alkalmazás.neve helyette.

Most már használhatjuk az összes tárolt kulcs / érték párot titkos / fakebank mint bármely más Környezet ingatlan. A következő részlet azt mutatja be, hogyan olvashatjuk le a foo kulcs ezen az útvonalon tárolva:

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

Mint láthatjuk, maga a kód sem tud semmit a Vaultról, ami jó dolog! A helyi tesztekben továbbra is használhatunk fix tulajdonságokat, és tetszés szerint válthatunk a Vaultra, ha csak egyetlen tulajdonságot engedélyezünk a rendszerben bootstrap.yml.

4.1. Megjegyzés a tavaszi profilokról

Ha rendelkezésre áll az aktuális Környezet, Tavaszi felhő boltozat a rendelkezésre álló profilneveket utótagként fogja használni a megadott alapútvonalhoz csatolva, ahol kulcs / érték párokat keresnek.

Tulajdonságokat is meg fog keresni egy konfigurálható alapértelmezett alkalmazási útvonal alatt (profil utótaggal és anélkül), így egyetlen helyen megoszthatjuk a titkait. Óvatosan használja ezt a funkciót!

Összefoglalva, ha a Termelés profilja ki fakebank az alkalmazás aktív, a Spring Vault a következő útvonalakon tárolt tulajdonságokat keresi:

  1. titok/fakebank/Termelés (magasabb prioritás)
  2. titok/fakebank
  3. titkos / alkalmazás / gyártás
  4. titok / alkalmazás (alacsonyabb prioritás)

Az előző listában Alkalmazás az a név, amelyet Spring a titkok alapértelmezett kiegészítő helyeként használ. Módosíthatjuk a spring.cloud.vault.generic.default-context ingatlan.

A legspecifikusabb útvonalon tárolt tulajdonságok elsőbbséget élveznek a többiekkel szemben. Például, ha ugyanaz a tulajdonság foo a fenti utak alatt érhető el, akkor az elsőbbségi sorrend a következő lenne:

5. Az adatbázis titkos háttérprogramjának használata

Az Adatbázis háttérmodul lehetővé teszi a Spring alkalmazások számára a Vault által létrehozott, dinamikusan generált adatbázis-hitelesítő adatok használatát. A Spring Vault a szabvány alapján beadja ezeket a hitelesítő adatokat spring.datasource.username és tavasz.adatforrás.jelszó tulajdonságok, így rendszeresen válogathatók Adatforráss.

Kérjük, vegye figyelembe, hogy a háttérprogram használata előtt létre kell hoznunk egy adatbázis-konfigurációt és szerepköröket a Vaultban, az előző oktatóanyagunkban leírtak szerint.

Annak érdekében, hogy a Vault által generált adatbázis-hitelesítő adatokat felhasználhassuk tavaszi alkalmazásunkban, a spring-cloud-vault-config-adatbázisok jelen kell lennie a projekt osztályterületén, a megfelelő JDBC illesztőprogrammal együtt.

Engedélyeznünk kell alkalmazását alkalmazásunkban is néhány tulajdonság hozzáadásával bootstrap.yml:

tavasz: felhő: boltozat: # ... egyéb tulajdonságok kihagyva adatbázis: engedélyezve: igaz szerep: fakebank-számlák-rw

A legfontosabb ingatlan itt a szerep tulajdonság, amely a Vault tárolt adatbázis-szerepkör nevét tartalmazza. A bootstrap során a Spring felveszi a kapcsolatot a Vaulttal, és kéri, hogy hozzon létre új hitelesítő adatokat a megfelelő jogosultságokkal.

A tároló alapértelmezés szerint a konfigurált élettartam után visszavonja a hitelesítő adatokhoz társított jogosultságokat.

Szerencsére, A Spring Vault automatikusan megújítja a megszerzett hitelesítő adatokhoz kapcsolódó bérleti szerződést. Ezzel a hitelesítő adatok érvényben maradnak, amíg alkalmazásunk fut.

Lássuk működés közben ezt az integrációt. A következő részlet egy új adatbázis-kapcsolatot kap egy Spring által kezeltől Adatforrás:

C kapcsolat = datasource.getConnection (); 

Ismét láthatjuk, hogy a Vault használatának nyoma sincs a kódunkban. Minden integráció a Környezet szinten, így a kódunk a szokásos módon könnyen tesztelhető egységenként.

6. Következtetés

Ebben az oktatóanyagban bemutattuk, hogyan integrálható a Vault a Spring Boot programba a Spring Vault könyvtár segítségével. Két általános használati esetet vizsgáltunk: általános kulcs / érték párokat és dinamikus adatbázis hitelesítő adatokat.

Az összes szükséges függőséget, integrációs tesztet és a Vault telepítési parancsfájlokat tartalmazó mintaprojekt elérhető a GitHubon.