Vault von HashiCorp ist eine Software, die geheime Daten speichert, und die in den Identity Server integriert werden kann. Es handelt sich um einen Ersatz für die Apache Secure Vault-Implementierung, die sich derzeit im WSO2 Identity Server befindet. Wir werden in diesem Blog Vault einrichten und es in WSO2 Identity Server Version 5.11.0 integrieren. Diese Einrichtung wird unter Windows erfolgen, lässt sich aber problemlos auch unter Linux und MacOS ausführen.
Wenn Sie den Namen HashiCorp kennen, könnte das daran liegen, dass es sich um das Unternehmen handelt, das auch Vagrant und Packer entwickelt hat. Zwei Tools zur Konfiguration und Implementierung, die oft in Verbindung mit WSO2 verwendet werden. Wenn Sie Vault noch nicht kennen, empfehle ich Ihnen einen Blick in die entsprechende Beschreibung zu werfen, die Sie auf der Website von HashiCorp finden können, da die Konzepte dort sehr gut erklärt werden. Ich werde in diesem Blog einige der Details erklären, soweit sie die Kombination von WSO2 Identity Server und Vault betreffen.
Vault einrichten
Zunächst aber müssen wir Vault herunterladen und installieren. Wie gesagt, ich werde dies auf Windows tun. Ich werde Vault herunterladen und in einem Verzeichnis installieren, das sich in der Nähe des Stammverzeichnisses befindet. Darüber hinaus werde ich das Vault-Installationsverzeichnis zum Pfad hinzufügen und von überall aus zugänglich machen. Um das zu testen, gebe ich den Befehl vault -version ein.
Es sieht so aus, als wäre dies in Ordnung; ich erhalte eine Antwort von Vault. Nun geht es an die Konfiguration von Vault.
Wir starten eine spezielle Version, die lokal arbeitet, den sogenannten -dev-Server. Das ist ein In-Memory-Vault, der kein TLS verwendet und NIEMALS für etwas anderes als Tests verwendet werden sollte. Sorgen Sie dafür, dass Vault aktiv ist und läuft, wenn Sie diesen Blog lesen.
Starten Sie den Vault-Server mit vault server -dev
Außerdem müssen wir die Vault-Adresse mit dem unten gezeigten Befehl festlegen.
set VAULT_ADDR=http://127.0.0.1:8200
Setzen Sie in ähnlicher Weise das Token auf den Wert, der in der Serverprotokollausgabe angezeigt wird.
set VAULT_TOKEN=s.dx9VgiWBnb0h6KgqBWQKNBM
Beachten Sie, dass Sie den Vault-Server leeren, wenn Sie diesen anhalten und starten, da er ein In-Memory-Datenspeicher ist. Vault schreibt regulär auf die Festplatte. Dies ist allerdings eine komplexere Einrichtung.
Wir starten Vault und lassen es im Befehlsfenster geöffnet. In einem zweiten Fenster fragen wir den Status ab.
WSO2 Identity Server einrichten
Laden Sie die Version 5.11.0 des Identity Servers herunter und installieren Sie sie auf Ihrem Computer. Ich werde in diesem Blog nicht den gesamten Prozess der Einrichtung eines WSO2-Produkts beschreiben. Falls Sie mehr Informationen dazu benötigen, können Sie unsere anderen Blogs über die Installation von WSO2 Produkten lesen.
Key/Value-Engine
Wir werden mit einem KV-Engine beginnen, dies steht natürlich für Key Value. Der KV-Unterbefehl ermöglicht Ihnen unter anderem das Setzen und Abrufen aller in Vault gespeicherten Schlüssel-Wert-Paare.
Wir arbeiten mit einem so genannten Path, der es uns erlaubt, Werte in einer geordneten Weise zu speichern. Das heißt, wir verwenden Vorgaben, um Werte zu speichern, die zum Identity Server gehören, aber auch zu anderen WSO2-Produkten oder Benutzerfällen.
Beginnen wir mit dem Hinzufügen des Key Value Engine. Tragen Sie den folgenden Befehl in die Befehlszeile ein:
vault secrets enable -path=wso2is -version=2 kv
# Hinzufügen neuer Secrets
vault kv put wso2is/keystore_password value=wso2carbon
# Secrets abrufen (zum Prüfen)
vault kv get -field=value wso2is/keystore_password
Jetzt müssen wir sicherstellen, dass der Identity Server den HashiCorp Vault und nicht den eigenen sicheren Datenspeicher verwendet. Wir erweitern den Identity Server mit einer speziellen jar-Datei, die für die Umleitung zu HashiCorp verwendet wird.
Hierzu laden wir den Quellcode des HashiCorp Vault Integration OSGI-Bundles herunter. In diesem Falle verwende ich die Zip-Datei. Sie können sie auch klonen, indem Sie Git verwenden oder sie mit GitHub Desktop öffnen.
Entpacken Sie die Zip-Datei in ein Verzeichnis. Ich habe mich dafür entschieden, die Dateien in einem Unterverzeichnis der eigentlichen Vault-Installation abzulegen. Mit dem folgenden Befehl werden wir die jar-Datei von Grund auf neu erstellen:
mvn clean install
Der Build wird ein paar Minuten in Anspruch nehmen. Im Zielverzeichnis befindet sich das soeben erstellte OSGI-Bundle, das wir nun in das dropins-Verzeichnis des Identity Servers kopieren werden.
Kopieren Sie die Datei target/org.wso2.carbon.securevault.hashicorp-1.0.jar in das Verzeichnis [IS_HOME]/repository/components/dropins/.
Außerdem fügen wir das spezielle vault-java-driver-5.1.0.jar in das Verzeichnis [IS_HOME]/repository/components/lib/ ein.
Umleiten
Wir müssen die folgenden Elemente zur Datei [IS-HOME]/repository/conf/security/secret-conf.properties hinzufügen und die folgenden Konfigurationen festlegen. Für den verwendeten -dev-Server haben wir die https://127.0.0.1:8200 auf http://127.0.0.1:8200 geändert.
In einer Produktionsumgebung sollten Sie immer die Vault-Adresse mit aktiviertem HTTPS/TLS verwenden.
keystore.identity.location=repository/resources/security/wso2carbon.jks
keystore.identity.type=JKS
keystore.identity.store.password=identity.store.password
keystore.identity.store.secretProvider=org.wso2.carbon.securevault.DefaultSecretCallbackHandler
keystore.identity.key.password=identity.key.password
keystore.identity.key.secretProvider=org.wso2.carbon.securevault.DefaultSecretCallbackHandler
carbon.secretProvider=org.wso2.securevault.secret.handler.SecretManagerSecretCallbackHandler
secVault.enabled=true
secretRepositories=vault
secretRepositories.vault.provider=org.wso2.carbon.securevault.hashicorp.repository.HashiCorpSecretRepositoryProvider
secretRepositories.vault.properties.address=http://127.0.0.1:8200
secretRepositories.vault.properties.namespace=ns1
secretRepositories.vault.properties.enginePath=wso2is
secretRepositories.vault.properties.engineVersion=2
Log4J2
Wenn wir die neue Vault-Ergänzung debuggen wollen, können wir die folgenden Zeilen in die Datei [IS_HOME]/repository/conf/log4j2.properties einfügen. Wenn Sie die Stufe auf debug setzen, werden beim Aufruf Debugging-Informationen protokolliert.
logger.org-wso2-carbon-securevault-hashicorp.name=org.wso2.carbon.securevault.hashicorp
logger.org-wso2-carbon-securevault-hashicorp.level=INFO
logger.org-wso2-carbon-securevault-hashicorp.additivity=false
logger.org-wso2-carbon-securevault-hashicorp.appenderRef.CARBON_CONSOLE.ref = CARBON_CONSOLE
Fügen Sie dann org-wso2-carbon-securevault-hashicorp an die Logger-Liste an anderer Stelle in der Datei log4j2.properties an. Achten Sie auf die Zeile loggers = und fügen Sie diesen Logger-Namen am Ende hinzu.
loggers = AUDIT_LOG, trace-messages, … ,org-wso2-carbon-securevault-hashicorp
Werte zu Vault hinzufügen
Wenn wir im Vault gespeicherte Werte verwenden möchten, dann müssen wir sie zuerst hinzufügen. In diesem Blog geht es um die Werte, die im Pfad ‚wso2is‘ Key Vault gespeichert sind. Also müssen Sie sie zum Vault hinzufügen und Änderungen an der deployment.toml vornehmen.
Fügen wir zunächst zwei Werte zum Tresor hinzu.
vault kv put wso2is/admin_password value=wso2carbon
vault kv put wso2is/database_password value=wso2carbon
Jetzt müssen wir die deployment.toml des WSO2 Identity Servers ändern. Diese finden Sie im Verzeichnis [IS_HOME]/repository/conf/. Diese Datei öffnen Sie mit einem Editor und fügen diese Zeilen am Ende der Datei ein (wenn die Markierung [secrets] bereits vorhanden ist, fügen Sie die Markierung nicht hinzu).
[secrets]admin_password = „“
keystore_password = „“
database_password = „“
Ergänzen Sie die entsprechenden Abschnitte in der Datei deployment.toml um den verschlüsselten Passwort-Alias, indem Sie einen Platzhalter verwenden: $secret{alias}. Zum Beispiel (und wir zeigen nicht alle Zeilen):
[super_admin]username=“admin“
password=“$secret{admin_password}“ [keystore.primary]
file_name = „wso2carbon.jks“
password = „$secret{keystore_password}“ [database.identity_db]
type = „h2“
…
password = „$secret{database_password}“
Identity Server starten
Jetzt können wir den Identity Server starten. Vor dem Start werden Sie zur Eingabe des Keystore-Passworts aufgefordert. Tragen Sie den Wert wso2carbon (den Standardwert) ein, damit der Identity Server startet. Sie können auch das Passwort im Klartext in einer Passwort-Persist-Datei (password-persist.txt für Windows) ablegen, damit es von dort gelesen wird. Dies ist allerdings weniger sicher. Wenn Sie es auch aus Vault lesen möchten, sollten Sie einen benutzerdefinierten Java-Code erstellen (einen benutzerdefinierten DefaultSecretCallbackHandler / Custom CallBack Handler), der eine Verbindung zur Vault-API herstellt und den Wert von dort liest. Dadurch wird es sicherer, da es auch Vault für die Speicherung dieses Wertes nutzt.