Spring Vault

Sikkerhedstop

Jeg annoncerede netop det nye Learn Spring Security-kursus, inklusive det fulde materiale med fokus på den nye OAuth2-stak i Spring Security 5:

>> KONTROLLER KURSEN

1. Oversigt

HashiCorps hvælving er et værktøj til at gemme og sikre hemmeligheder. Vault løser generelt sikkerhedsproblemet med softwareudvikling af, hvordan man administrerer hemmeligheder. For at lære mere om det, se vores artikel her.

Spring Vault leverer foråret abstraktioner til HashiCorps hvælving.

I denne vejledning gennemgår vi et eksempel på, hvordan du gemmer og henter hemmeligheder fra Vault.

2. Maven-afhængigheder

Til at begynde med skal vi se på de afhængigheder, vi har brug for for at begynde at arbejde med Spring Vault:

  org.springframework.vault spring-vault-core 2.1.1.RELEASE 

Den seneste version af fjeder-hvælving-kerne kan findes på Maven Central.

3. Konfiguration af hvælving

Lad os nu gennemgå de nødvendige trin for at konfigurere Vault.

3.1. Oprettelse af en VaultTemplate

For at sikre vores hemmeligheder bliver vi nødt til at instantiere en VaultTemplate som vi har brug for VaultEndpoint og TokenAuthentication tilfælde:

VaultTemplate vaultTemplate = nyt VaultTemplate (nyt VaultEndpoint (), nyt TokenAuthentication ("00000000-0000-0000-0000-000000000000"));

3.2. Oprettelse af en VaultEndpoint

Der er et par måder at instantiere på VaultEndpoint. Lad os se på nogle af dem.

Den første er simpelthen at instantiere den ved hjælp af en standardkonstruktør, som opretter et standardendepunkt, der peger på // lokal vært: 8200:

VaultEndpoint endpoint = nyt VaultEndpoint ();

En anden måde er at oprette en VaultEndpoint ved at specificere Vault's vært og port:

VaultEndpoint endpoint = VaultEndpoint.create ("vært", port);

Og endelig kan vi også oprette det fra Vault URL:

VaultEndpoint endpoint = VaultEndpoint.from (nyt URI ("vault uri"));

Der er et par ting at bemærke her - Vault konfigureres med et rodtoken på 00000000-0000-0000-0000-000000000000 for at køre denne applikation.

I vores eksempel har vi brugt TokenAuthentication, men der understøttes også andre godkendelsesmetoder.

4. Konfiguration af hvælvebønner ved hjælp af foråret

Med Spring kan vi konfigurere Vault på et par måder. Den ene er ved at udvide AbstraktVaultConfiguration, og den anden er ved hjælp af EnvironmentVaultConfiguration der gør brug af Spring's miljøegenskaber.

Vi går nu over begge veje.

4.1. Ved brug af AbstractVaultConfiguration

Lad os oprette en klasse, der strækker sig AbstraktVaultConfiguration, at konfigurere Spring Vault:

@Configuration public class VaultConfig udvider AbstractVaultConfiguration {@Override public ClientAuthentication clientAuthentication () {returner ny TokenAuthentication ("00000000-0000-0000-0000-000000000000"); } @ Override public VaultEndpoint vaultEndpoint () {return VaultEndpoint.create ("host", 8020); }}

Denne tilgang svarer til det, vi har set i det foregående afsnit. Hvad der er anderledes er, at vi har brugt Spring Vault til at konfigurere Vault-bønner ved at udvide den abstrakte klasse AbstractVaultConfiguration.

Vi skal bare levere implementeringen for at konfigurere VaultEndpoint og ClientAuthentication.

4.2. Ved brug af EnvironmentVaultConfiguration

Vi kan også konfigurere Spring Vault ved hjælp af EnviromentVaultConfiguration:

@Configuration @PropertySource (værdi = {"vault-config.properties"}) @Import (værdi = EnvironmentVaultConfiguration.class) offentlig klasse VaultEnvironmentConfig {}

EnvironmentVaultConfiguration gør brug af Spring's PropertySource for at konfigurere Vault-bønner. Vi skal bare levere egenskabsfilen med nogle acceptable poster.

Flere oplysninger om alle de foruddefinerede egenskaber findes i den officielle dokumentation.

For at konfigurere Vault har vi brug for mindst et par egenskaber:

vault.uri = // localhost: 8200 vault.token = 00000000-0000-0000-0000-000000000000

5. Sikring af hemmeligheder

Vi opretter en simpel Legitimationsoplysninger klasse, der kortlægges til brugernavn og adgangskode:

Public class Credentials {private String username; privat strengadgangskode; // standard konstruktører, getters, setters}

Lad os nu se, hvordan vi kan sikre vores Legitimationsoplysninger objekt ved hjælp af VaultTemplate:

Credentials credentials = new Credentials ("brugernavn", "password"); vaultTemplate.write ("hemmelig / myapp", legitimationsoplysninger);

Når disse linjer er afsluttet, gemmes vores hemmeligheder nu.

Derefter ser vi, hvordan du får adgang til dem.

6. Adgang til hemmeligheder

Vi kan få adgang til de sikrede hemmeligheder ved hjælp af Læs() metode i VaultTemplate, der returnerer VaultResponseSupport som svar:

VaultResponseSupport response = vaultTemplate .read ("secret / myapp", Credentials.class); String brugernavn = respons.getData (). GetUsername (); Strengadgangskode = respons.getData (). GetPassword ();

Vores hemmelige værdier er nu klar.

7. Konklusion

I denne artikel har vi lært om det grundlæggende i Spring Vault med et eksempel, der viser, hvordan Vault fungerer i typiske scenarier.

Som sædvanlig kan kildekoden, der præsenteres her, findes på GitHub.

Sikkerhedsbund

Jeg annoncerede netop det nye Learn Spring Security-kursus, inklusive det fulde materiale med fokus på den nye OAuth2-stak i Spring Security 5:

>> KONTROLLER KURSEN

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