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:
- titok/fakebank/Termelés (magasabb prioritás)
- titok/fakebank
- titkos / alkalmazás / gyártás
- 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.