Federgewölbe

Sicherheit Top

Ich habe gerade den neuen Learn Spring Security-Kurs angekündigt, einschließlich des vollständigen Materials zum neuen OAuth2-Stack in Spring Security 5:

>> Überprüfen Sie den Kurs

1. Übersicht

HashiCorp's Vault ist ein Werkzeug zum Speichern und Sichern von Geheimnissen. Vault löst im Allgemeinen das Sicherheitsproblem der Softwareentwicklung bei der Verwaltung von Geheimnissen. Um mehr darüber zu erfahren, lesen Sie unseren Artikel hier.

Spring Vault bietet Spring-Abstraktionen für das HashiCorp's Vault.

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.1.1.RELEASE   

Die neueste Version von Spring-Vault-Core finden Sie auf Maven Central.

3. Vault konfigurieren

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

3.1. Erstellen einer VaultTemplate

Um unsere Geheimnisse zu schützen , müssen wir eine VaultTemplate instanziieren, für die wir die Instanzen VaultEndpoint und TokenAuthentication benötigen :

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

3.2. Erstellen eines VaultEndpoint

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 auf // localhost: 8200: verweist.

VaultEndpoint endpoint = new VaultEndpoint();

Eine andere Möglichkeit besteht darin, einen VaultEndpoint zu 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 von 00000000-0000-0000-0000-000000000000 konfiguriert , um diese Anwendung auszuführen.

In unserem Beispiel haben wir die TokenAuthentication verwendet , es werden jedoch auch andere Authentifizierungsmethoden unterstützt.

4. Konfigurieren von Vault Beans mit Spring

Mit Spring können wir den Tresor auf verschiedene Arten konfigurieren. Zum einen wird die AbstractVaultConfiguration erweitert, zum anderen wird die EnvironmentVaultConfiguration verwendet, bei der die Umgebungseigenschaften von Spring verwendet werden.

Wir werden jetzt beide Wege durchgehen.

4.1. Verwenden von AbstractVaultConfiguration

Erstellen wir eine Klasse, die AbstractVaultConfiguration 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, was wir im vorherigen Abschnitt gesehen haben. Der Unterschied besteht darin, dass wir Spring Vault zum Konfigurieren von Vault-Beans verwendet haben, indem wir die abstrakte Klasse AbstractVaultConfiguration erweitert haben.

Wir müssen nur die Implementierung bereitstellen, um VaultEndpoint und ClientAuthentication zu konfigurieren .

4.2. Verwenden von EnvironmentVaultConfiguration

Wir können Spring Vault auch mithilfe der EnviromentVaultConfiguration konfigurieren :

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

EnvironmentVaultConfiguration verwendet Spring's PropertySource , 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 in der offiziellen Dokumentation.

Um den Tresor zu konfigurieren, benötigen wir mindestens einige Eigenschaften:

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

5. Geheimnisse sichern

Wir erstellen eine einfache Klasse für Anmeldeinformationen , 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 unser Anmeldeinformationsobjekt mit der VaultTemplate sichern können :

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

Nachdem diese Zeilen abgeschlossen sind, werden unsere Geheimnisse gespeichert.

Als nächstes werden wir sehen, wie wir darauf zugreifen können.

6. Zugriff auf Geheimnisse

Wir können auf die gesicherten Geheimnisse mit der read () -Methode in VaultTemplate zugreifen, die den VaultResponseSupport als Antwort 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 bereit.

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 ist wie gewohnt auf GitHub zu finden.

Sicherheit unten

Ich habe gerade den neuen Learn Spring Security-Kurs angekündigt, einschließlich des vollständigen Materials zum neuen OAuth2-Stack in Spring Security 5:

>> Überprüfen Sie den Kurs