Úvod do služby Spring Cloud Vault

1. Prehľad

V tomto tutoriáli si ukážeme, ako môžeme pomocou aplikácie Hashicorp's Vault v aplikáciách Spring Boot zabezpečiť citlivé konfiguračné údaje.

Tu predpokladáme určité vedomosti o Vaulte a to, že máme testovacie nastavenie už spustené. Ak to tak nie je, prečítajme si chvíľu náš tutoriál Vault Intro, aby sme sa mohli oboznámiť s jeho základmi.

2. Spring Cloud Vault

Spring Cloud Vault je relatívne nedávny prírastok do zásobníka Spring Cloud umožňuje aplikáciám transparentným spôsobom pristupovať k tajomstvám uloženým v inštancii Vault.

Všeobecne je migrácia do aplikácie Vault veľmi jednoduchý proces: stačí pridať požadované knižnice a pridať do nášho projektu niekoľko ďalších konfiguračných vlastností a mali by sme byť pripravení. Nie sú potrebné žiadne zmeny kódu!

Je to možné, pretože to funguje ako vysoká priorita PropertySource registrované v aktuálnom Životné prostredie.

Spring ho ako taký použije, kedykoľvek bude požadovaná nehnuteľnosť. Príklady zahŕňajú Dátový zdroj vlastnosti, Vlastnosti konfigurácie, a tak ďalej.

3. Pridanie Spring Cloud Vault do projektu Spring Boot

S cieľom zahrnúť jarná oblačná klenba knižnice v projekte Spring Boot založenom na Maven, použijeme asociované štartér artefakt, ktorý vytiahne všetky požadované závislosti.

Okrem hlavnej štartér, zahrnieme tiež konfigurácie databáz jarnej úschovne, ktorá pridáva podporu pre poverenia dynamickej databázy:

 org.springframework.cloud spring-cloud-starter-vault-config org.springframework.cloud spring-cloud-vault-config-databáz 

Najnovšiu verziu štartéra Spring Cloud Vault si môžete stiahnuť z Maven Central.

3.1. Základná konfigurácia

Aby Spring Cloud Vault fungoval správne, potrebuje spôsob, ako určiť, kde je potrebné kontaktovať server Vault a ako sa proti nemu autentifikovať.

Robíme to tak, že poskytneme potrebné informácie v bootstrap.yml alebo bootstrap.properties:

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

The jar.oblačno.vault.uri vlastnosť ukazuje na adresu API aplikácie Vault. Pretože naše testovacie prostredie používa HTTPS s certifikátom podpísaným sám sebou, musíme poskytnúť aj sklad kľúčov obsahujúci jeho verejný kľúč.

Upozorňujeme, že táto konfigurácia nemá žiadne autentifikačné údaje. V najjednoduchšom prípade, keď používame pevný token, ho môžeme odovzdať cez systémovú vlastnosť jar.oblačno.vault.token alebo premenná prostredia. Tento prístup funguje dobre v spojení so štandardnými mechanizmami konfigurácie cloudu, ako sú Kubernetesove ConfigMaps alebo Dockerove tajomstvá.

Spring Vault tiež vyžaduje osobitnú konfiguráciu pre každý typ tajomstva, ktoré chceme použiť v našej aplikácii. V nasledujúcich častiach je popísané, ako môžeme pridať podporu k dvom bežným tajným typom: kľúč / hodnota a poverenia databázy.

4. Používanie servera Generic Secrets Backend

Na prístup používame back-end Generic Secret bezverzia tajomstvá uložené ako páry kľúč - hodnota v trezore.

Za predpokladu, že už máme spring-cloud-starter-vault-config závislosť v našom triedna cesta, všetko, čo musíme urobiť, je pridať do aplikácie niekoľko vlastností bootstrap.yml konfiguračný súbor:

jar: cloud: trezor: # ďalšie vlastnosti trezoru vynechané ... všeobecné: povolené: skutočný názov aplikácie: falošná banka 

Vlastníctvo názov aplikácie je v tomto prípade voliteľná. Pokiaľ nie je uvedené inak, Spring prevezme hodnotu normy spring.application.name namiesto toho.

Teraz môžeme použiť všetky páry kľúč / hodnota uložené na tajná / falošná banka ako každý iný Životné prostredie nehnuteľnosť. Nasledujúci úryvok ukazuje, ako môžeme prečítať hodnotu parametra foo kľúč uložený pod touto cestou:

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

Ako vidíme, samotný kód nevie nič o aplikácii Vault, čo je dobrá vec! Stále môžeme používať pevné vlastnosti v lokálnych testoch a prepínať na Vault, ako sa nám páči, iba povolením jednej vlastnosti v bootstrap.yml.

4.1. Poznámka k jarným profilom

Ak je k dispozícii v aktuálnom Životné prostredie, Spring Cloud Vault použije dostupné názvy profilov ako príponu pripojenú k zadanej základnej ceste, kde sa budú hľadať páry kľúč / hodnota.

Bude tiež hľadať vlastnosti v rámci konfigurovateľnej predvolenej cesty aplikácie (s alebo bez prípony profilu), aby sme mohli mať zdieľané tajomstvá na jednom mieste. Túto funkciu používajte opatrne!

Ak to zhrniem, ak výroba profil von falošná banka Aplikácia je aktívna, Spring Vault vyhľadá vlastnosti uložené pod nasledujúcimi cestami:

  1. tajomstvo /falošná banka/ výroba (vyššia priorita)
  2. tajomstvo /falošná banka
  3. tajomstvo / prihláška / výroba
  4. tajomstvo / prihláška (nižšia priorita)

V predchádzajúcom zozname žiadosť je názov, ktorý Spring používa ako predvolené ďalšie miesto pre tajomstvá. Môžeme ho upraviť pomocou spring.cloud.vault.generic.default-context nehnuteľnosť.

Vlastnosti uložené na najšpecifickejšej ceste budú mať prednosť pred ostatnými. Napríklad ak je rovnaká vlastnosť foo je k dispozícii pod vyššie uvedenými cestami, potom bude poradie priorít:

5. Používanie databázového tajného servera

Modul Backend databázy umožňuje aplikáciám Spring používať dynamicky generované poverenia databázy vytvorené Vaultom. Spring Vault vloží tieto poverenia podľa štandardu spring.datasource.username a spring.datasource.password vlastnosti, aby ich bolo možné vybrať regulárnymi Dátový zdrojs.

Upozorňujeme, že pred použitím tohto backendu musíme vytvoriť konfiguráciu databázy a role v aplikácii Vault, ako je popísané v našom predchádzajúcom tutoriáli.

Aby sme mohli použiť poverenia databázy vygenerované Vaultom v našej jarnej aplikácii, spring-cloud-vault-config-databáz musí byť prítomný v triede projektu spolu s príslušným ovládačom JDBC.

Musíme tiež povoliť jeho použitie v našej aplikácii pridaním niekoľkých vlastností do našej bootstrap.yml:

jar: cloud: trezor: # ... vynechané ďalšie vlastnosti databázy: povolené: skutočná rola: fakebank-accounts-rw

Najdôležitejšou vlastnosťou tu je úlohu vlastnosť, ktorá obsahuje názov roly databázy uložený v úložisku. Počas bootstrapu bude Spring kontaktovať Vault a požiada ho, aby vytvoril nové poverenia so zodpovedajúcimi privilégiami.

Trezor predvolene zruší privilégiá spojené s týmito povereniami po nakonfigurovanom čase životnosti.

Našťastie Aplikácia Spring Vault automaticky obnoví leasing spojený so získanými povereniami. Týmto spôsobom poverenia zostanú platné, pokiaľ je naša aplikácia spustená.

Pozrime sa teraz na túto integráciu. Nasledujúci úryvok získa nové pripojenie k databáze z jarnej správy Dátový zdroj:

Pripojenie c = datasource.getConnection (); 

Opäť vidíme, že v našom kóde nie sú žiadne stopy po použití aplikácie Vault. Celá integrácia sa deje na Životné prostredie úrovni, takže náš kód možno ľahko testovať na jednotku ako obvykle.

6. Záver

V tomto tutoriáli sme si ukázali, ako integrovať Vault do Spring Boot pomocou knižnice Spring Vault. Pokryli sme dva bežné prípady použitia: generické páry kľúč / hodnota a poverenia dynamickej databázy.

Vzorový projekt obsahujúci všetky požadované závislosti, testy integrácie a skripty nastavenia trezoru je k dispozícii na serveri GitHub.


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