ZETA-Guard-Quickstart
[TOC]
Installation
Benötigte Werkzeuge
- Helm, kubectl und Terraform
- ein Kubernetes-Cluster (für lokale Deployments bietet sich KIND an)
- mit über Stateful Sets provisionierbarem Storage
- mit eingerichtetem Ingress-Controller (zukünftig optionaler Bestandteil des ZETA Guard)
- lokal den passenden Kontext in kubectl eingerichtet
- Einen Fachdienst – in diesem Dokument wird dieser als verfügbar unter https://testfachdienst angenommen.
Installationsschritte
Die Installation gliedert sich grob in folgende Schritte
- Helm aufsetzen
- PDP konfigurieren
- PEP konfigurieren
1. Helm aufsetzen
Das ZETA Guard Helm Chart ist für Helm 3 konzipiert.
Kopieren Sie nun die Datei values-demo.yaml in das Arbeitsverzeichnis. Sie können diese Datei als Konfigurationsvorlage verwenden, umbenennen und anpassen.
Unter authserver können Sie Name und Passwort des Admin-Accounts für den PDP festlegen. Zum Beispiel:
authserver:
admin:
username: admin-Name
password: admin-Passwort
Im Produktivbetrieb kann das Passwort z.B. via Helm Parameter --set-file von einem CD Server gesetzt werden.
Mit dieser values-demo.yaml können Sie ZETA Guard über folgendes Kommando installieren:
helm upgrade --install zeta-guard oci://europe-west3-docker.pkg.dev/gematik-pt-zeta-prod/zeta-dcr/zeta-guard-helm/zeta-guard:0.2.3 -f values-demo.yaml --wait --atomic
2. PDP konfigurieren
Der PDP wird über Terraform konfiguriert. Terraform übernimmt dabei die vollständige Verwaltung der Keycloak-Konfiguration des ZETA-Guard-Realms: von TLS-Parametern über die Domain-Zuordnung bis hin zur Erstellung der benötigten PDP-Scopes. Eine manuelle Einrichtung über die Keycloak-Admin-Konsole ist nicht erforderlich.
Die folgenden Schritte beschreiben, wie Sie die notwendigen Variablen definieren, das Terraform-Backend initialisieren und anschließend die gewünschte Konfiguration sicher und reproduzierbar anwenden.
Die relevanten Terraform Templates finden sich im Unterverzeichnis terraform hier.
Voraussetzungen
Stellen Sie sicher, dass folgende Voraussetzungen erfüllt sind:
- Der ZETA-Guard-Cluster läuft und ist über kubectl erreichbar.
- Terraform ist installiert und befindet sich in einer Version, die mit den benötigten Providern kompatibel ist (1.5.x aufwärts).
- Der PDP (
authserver) ist im Cluster deployt. - Sie verfügen über die Keycloak-Admin-Zugangsdaten, sofern diese nicht im Cluster-Secret hinterlegt sind (siehe Abschnitt Helm aufsetzen).
Terraform Variablen definieren
Unterteilt in drei Kategorien müssen diese gesetzt werden:
- Admin-Rechte, um den PDP zu konfigurieren
- Informationen, um im Cluster zu agieren
- Ihre Zeta-Guard-Konfiguration
Setzen Sie ihr Admin-Passwort als Umgebungsvariablen, um Terraform den Zugriff auf den PDP zu ermöglichen:
export TF_VAR_keycloak_password="IhrPasswort"
Weisen Sie Terraform auf die zu verwendende kubeconfig und den Namespace hin:
Die Datei demo.backend.hcl ermöglicht es Terraform mit dem Cluster und dem Namespace zu interagieren. Passen Sie die Werte an Ihre Umgebung an.
config_path = "~/.kube/config" # Pfad zur kubeconfig-Datei
namespace = "zeta-demo" # Namespace, in dem Zeta-Guard deployt wurde
Die PDP-Konfiguration wird über eine stage-spezifische Datei gesteuert:
insecure_tls = true # Aktivieren bei selbst signierten Zertifikaten (optional, Default ist false)
keycloak_url = "https://example.domain/auth" # Externe URL des Keycloak-Servers
keycloak_namespace = "zeta-demo" # Namespace des Authservers im Cluster
pdp_scopes = ["zero:read", "zero:write"] # Zusätzliche PDP-Scopes
Siehe demo.tfvars.
Backend initialisieren
Terraform speichert den zustandsführenden State im Kubernetes-Cluster als Secret unter dem Namen tfstate-default-state. Vor jeder Konfiguration muss das Backend initialisiert werden:
terraform -chdir=terraform/authserver init \
-backend-config=environments/demo.backend.hcl \
-reconfigure
Konfiguration anwenden
Sobald Variablen und Backend korrekt eingerichtet sind, spielen Sie die Konfiguration ein (common.tfvars enthält den Realm-Namen):
terraform -chdir=terraform/authserver apply \
-var-file=environments/common.tfvars \
-var-file=demo.tfvars \
-auto-approve
Terraform konfiguriert dabei den Keycloak so, dass dieser als PDP eingesetzt werden kann.
Die Konfiguration ist beliebig wiederholbar; Terraform sorgt dafür, dass nur notwendige Änderungen ausgeführt werden.
Optional: Konfiguration vor Anwendung prüfen:
terraform -chdir=terraform/authserver plan \
-var-file=environments/common.tfvars \
-var-file=demo.tfvars
Sollten Sie ihre Änderungen an dem PDP vorher prüfen wollen, dann können Sie den obigen Terraform-Befehl nutzen. Dieser vergleicht Ihre Konfiguration mit dem State, der bereits im Cluster vorhanden ist. Die angezeigten Unterschiede werden unterteilt in
- create (erstellen)
- update (ändern)
- delete (löschen)
- replace (ersetzen, eine Kombination aus delete und create)
3. PEP konfigurieren
Die values-demo.yaml enthält eine PEP-Beispielkonfiguration, welche eine nginx-Welcome-Seite ausliefert. Für den Demo-Use-Case können Sie diesen Abschnitt überspringen.
Falls der PEP an einen Fachdienst angeschlossen werden soll, geht dies wie folgt:
Der PEP ist auf Basis von nginx umgesetzt. In der values-demo.yaml ist im Feld pepproxy.nginxConf.fileContent der Dateiinhalt einer nginx-Konfiguration (…/nginx.conf) anzugeben. Dort sind in der values-demo.yaml die folgenden Direktiven auf die Konfiguration des PDP abzustimmen:
-
pep_issuerDie Realm URL des PDP. Sollte z.B. wie folgt aussehen:
https://public-name-of-keycloak-here/auth/realms/zeta-guard -
proxy_passDas abzusichernde Ziel. In der values-demo.yaml ist das Ausliefern des http-Verzeichnisses via
root ...eingerichtet. Der Fachdienst ist in der Regel über die nginx-Standarddirektiveproxy_passanzubinden. In der values-demo.yaml wäre dann dieroot-Direktive zu ersetzen, z.B. durchproxy_pass https://testfachdienst/
Anmerkung: Die nginx-Direktive pep on; schaltet das PEP-spezifische Verhalten auf dem entsprechenden Pfad ein. Eine genauere Referenz zur PEP-Konfiguration findet sich hier.
Nachdem Sie die values-demo.yaml entsprechend angepasst haben, können Sie Ihre Änderungen über folgendes Helm-Kommando ausrollen:
helm upgrade --install zeta-guard zeta/zeta-guard -f values-demo.yaml --wait --atomic
Nun haben Sie den ZETA-Guard eingerichtet und ein Zugriff über den ZETA-Testclient und das ZETA-Client-SDK ist möglich.
Der ZETA Guard ist nun fertig installiert. Für einen Test bietet es sich an, den Testclient oder alternativ Testdriver aufzusetzen.