Der Grafana-CARP
Die Grafana-Authentifizierung läuft über einen sogenannten CARP, das steht für Cas-Authentication-Reverse-Proxy.
Die Funktionsweise des Carp ist die, dass dieser als Proxyserver vor Grafana läuft und die Cas-Authentifizierung übernimmt.
Wird auf
Grafana selbst implementiert die Proxy-Authentifizierung: https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/auth-proxy/ Dieses Feature nutzt der CARP aus, um zu authentifizieren. Dabei wird einfach ein Header mit dem entsprechenden Benutzernamen beim Weiterleiten des Requests an Grafana übergeben.
Der CARP übernimmt auch die Replizierung von Accounts, Gruppen (Teams) und Berechtigungen. Dies geschieht dadurch, dass Requests an die Rest-API von Grafana gesendet werden. Grundsätzlich hätte Grafana auch eine Berechtigungs- und Team(Gruppen)-Replizierung angeboten, allerdings nur in der Premium-Variante, die wir an dieser Stelle nicht verwenden.
Grafana an sich unterstützt auch andere Authentifizierungsmethoden, jedoch haben diese sich bei der Verprobung als weniger vorteilhaft ergeben als der CARP.
Als Grundlage für den CARP wurde unser bereits vorher gebauter CARP verwendet: https://github.com/cloudogu/carp Da dessen Funktionen für Grafana erweitert werden mussten, wurde sich entschieden, diesen nicht als Dependency, sondern als Fork zu verwenden.
Carp lokal starten
Damit der Grafana-Carp lokal debugged werden kann, kann dieser lokal gestartet und an ein lokales Grafana anzubinden.
Damit dies funktioniert, muss zuvor ein docker login
(Credentials von unserem Harbor) durchgeführt werden, damit die
Docker-Images außerhalb des CES heruntergeladen werden können.
Außerdem muss durch das Setzen eines ETCD-Keys und des cas-Neustarts der CAS in den
development-Modus gebracht werden: etcdctl set config/_global/stage development; cesapp restart cas
Anschließend kann grafana lokal gebaut und gestartet werden.
Das kann mit folgendem Befehl (aus dem Projekt-root-Verzeichnis) erreicht werden: make grafana-local
Wenn gewünscht, kann mit dem Befehl make stop-grafana-local
das Grafana wieder entfernt werden.
Anschließend kann der Carp lokal gestartet werden mit: cd grafana-carp && go run .
Grafana ist nun lokal erreichbar unter http://localhost:8080
Ports anpassen
Der Carp läuft lokal immer unter dem Port 8080 und das dazu passende lokale Grafana unter dem Port 3000. Sollte es nicht möglich sein, diese Ports zu verwenden, müssen folgende Dateien angepasst werden (siehe Kommentare in den Dateien):
- Makefile (
grafana-local
-Target) - dev.ini
- grafana-carp/carp.yml