Spring Vault

Spring Vault

1. Überblick

HashiCorp’s Vault ist ein Tool zum Speichern und Sichern von Geheimnissen. Vault löst im Allgemeinen das Softwareentwicklungs-Sicherheitsproblem bei der Verwaltung von Geheimnissen. Weitere Informationen finden Sie unterour article here.

Spring Vault liefert Frühlingsabstraktionen für das HashiCorp-Gewölbe.

In diesem Tutorial werden wir ein Beispiel zum Speichern und Abrufen von Geheimnissen aus dem Tresor durchgehen.

2. Maven-Abhängigkeiten

Schauen wir uns zunächst die Abhängigkeiten an, die wir benötigen, um mit Spring Vault zu arbeiten:


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

Die neueste Version vonspring-vault-core finden Sie aufMaven Central.

3. Vault konfigurieren

Lassen Sie uns nun die Schritte ausführen, die zum Konfigurieren von Vault erforderlich sind.

3.1. VaultTemplate erstellen

Um unsere Geheimnisse zu sichern, müssen wirVaultTemplate instanziieren, für die wirVaultEndpoint undTokenAuthentication Instanzen benötigen:

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

3.2. VaultEndpoint erstellen

Es gibt verschiedene Möglichkeiten,VaultEndpoint zu instanziieren. Schauen wir uns einige davon an.

Die erste besteht darin, es einfach mit einem Standardkonstruktor zu instanziieren, der einen Standardendpunkt erstellt, der aufhttp://localhost:8200: zeigt

VaultEndpoint endpoint = new VaultEndpoint();

Eine andere Möglichkeit besteht darin, einVaultEndpointzu erstellen, indem Sie den Host und den Port von Vault angeben:

VaultEndpoint endpoint = VaultEndpoint.create("host", port);

Und schließlich können wir es auch über die Vault-URL erstellen:

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

Hier sind einige Dinge zu beachten: Vault wird mit einem Root-Token von00000000-0000-0000-0000-000000000000 konfiguriert, um diese Anwendung auszuführen.

In unserem Beispiel haben wirTokenAuthenticationverwendet, aber es werden auch andereauthentication methodsunterstützt.

4. Vault Beans mit Spring konfigurieren

Mit Spring können wir den Tresor auf verschiedene Arten konfigurieren. Zum einen werdenAbstractVaultConfiguration, erweitert, zum anderen werdenEnvironmentVaultConfiguration verwendet, die die Umgebungseigenschaften von Spring nutzen.

Wir werden jetzt beide Wege durchgehen.

4.1. Verwenden vonAbstractVaultConfiguration

Erstellen wir eine Klasse, dieAbstractVaultConfiguration, erweitert, um Spring Vault zu konfigurieren:

@Configuration
public class VaultConfig extends AbstractVaultConfiguration {

    @Override
    public ClientAuthentication clientAuthentication() {
        return new TokenAuthentication("00000000-0000-0000-0000-000000000000");
    }

    @Override
    public VaultEndpoint vaultEndpoint() {
        return VaultEndpoint.create("host", 8020);
    }
}

Dieser Ansatz ähnelt dem im vorherigen Abschnitt beschriebenen. Der Unterschied besteht darin, dass wir Spring Vault zum Konfigurieren von Vault-Beans verwendet haben, indem wir die abstrakte KlasseAbstractVaultConfiguration. erweitert haben

Wir müssen nur die Implementierung bereitstellen, umVaultEndpoint undClientAuthentication zu konfigurieren.

4.2. Verwenden vonEnvironmentVaultConfiguration

Wir können Spring Vault auch mitEnviromentVaultConfiguration konfigurieren:

@Configuration
@PropertySource(value = { "vault-config.properties" })
@Import(value = EnvironmentVaultConfiguration.class)
public class VaultEnvironmentConfig {
}

EnvironmentVaultConfiguration verwendet SpringPropertySource, um Vault-Beans zu konfigurieren. Wir müssen nur die Eigenschaftendatei mit einigen akzeptablen Einträgen versehen.

Weitere Informationen zu allen vordefinierten Eigenschaften finden Sie inofficial documentation.

Zum Konfigurieren des Tresors benötigen wir mindestens einige Eigenschaften:

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

5. Geheimnisse sichern

Wir erstellen eine einfacheCredentials-Klasse, die dem Benutzernamen und dem Kennwort zugeordnet ist:

public class Credentials {

    private String username;
    private String password;

    // standard constructors, getters, setters
}

Nun wollen wir sehen, wie wir unserCredentials-Objekt mitVaultTemplate: sichern können

Credentials credentials = new Credentials("username", "password");
vaultTemplate.write("secret/myapp", credentials);

Mit diesen Zeilen sind unsere Geheimnisse nun gespeichert.

Als Nächstes sehen wir, wie Sie darauf zugreifen können.

6. Zugriff auf Geheimnisse

Wir können auf die gesicherten Geheimnisse zugreifen, indem wir die Methoderead() inVaultTemplate, verwenden, die als Antwort die VaultResponseSupport zurückgibt:

VaultResponseSupport response = vaultTemplate
  .read("secret/myapp", Credentials.class);
String username = response.getData().getUsername();
String password = response.getData().getPassword();

Unsere geheimen Werte sind jetzt fertig.

7. Fazit

In diesem Artikel haben wir die Grundlagen von Spring Vault anhand eines Beispiels kennengelernt, das zeigt, wie der Tresor in typischen Szenarien.funktioniert

Der hier vorgestellte Quellcode befindet sich wie üblich inover on GitHub.