Authentifizierung und Zugriff über die Konfiguration einrichten
Richte Login, OAuth und Rollenzuordnung in grafana.ini ein und behandle Benutzer und Teams als Code.
Wer sich anmelden darf und mit welcher Rolle, ist Teil der Plattform und gehört genauso in die Versionskontrolle wie Dashboards. Das meiste davon liegt in grafana.ini. Der Rest, etwa Benutzer, Teams und Service Accounts, hat kein Provisioning-Dateiformat, daher zeigt diese Anleitung auch, wie du diese als Code verwaltest. Die unten genannten Optionsnamen entsprechen der Grafana-Konfigurationsreferenz, verifiziere sie aber gegen defaults.ini deiner Version, bevor du dich darauf verlässt.
Grundeinstellungen
[users]
allow_sign_up = false # keine Selbstregistrierung
auto_assign_org = true
auto_assign_org_role = Viewer # Standardrolle für neue Benutzer
[auth]
disable_login_form = false # auf true setzen, sobald SSO funktioniert und du das Formular nicht mehr brauchst
[auth.anonymous]
enabled = false
Lass allow_sign_up = false, sofern du nicht bewusst eine offene Instanz willst. Wenn du anonymen Zugriff aktivierst, gib ihm die geringstmögliche Rolle:
[auth.anonymous]
enabled = true
org_role = Viewer
Single Sign-On mit Generic OAuth
Jeder OpenID-Connect- oder OAuth-2-Anbieter lässt sich in der Datei anbinden. Secrets kommen aus der Umgebung:
[server]
root_url = https://grafana.example.com/
[auth.generic_oauth]
enabled = true
name = Company SSO
allow_sign_up = true
client_id = grafana
client_secret = ${OAUTH_CLIENT_SECRET}
scopes = openid profile email groups
auth_url = https://sso.example.com/oauth2/authorize
token_url = https://sso.example.com/oauth2/token
api_url = https://sso.example.com/oauth2/userinfo
login_attribute_path = preferred_username
email_attribute_path = email
role_attribute_path = contains(groups[*], 'grafana-admins') && 'Admin' || contains(groups[*], 'grafana-editors') && 'Editor' || 'Viewer'
Was du wissen solltest:
- Die Redirect-URI des Anbieters ist
<root_url>login/generic_oauth, daher mussroot_urlexakt stimmen. role_attribute_pathist ein JMESPath-Ausdruck, der gegen das Token oder Userinfo des Benutzers ausgewertet wird. Er bildet Gruppen des Identity Providers auf Grafana-Rollen (Admin,Editor,Viewer) ab, sodass Rollenänderungen im Identity Provider stattfinden und nicht in Grafana.allow_sign_upbedeutet hier „beim ersten SSO-Login einen Grafana-Benutzer anlegen“, was du auch dann willst, wenn[users] allow_sign_upfalse ist.- Für gängige Anbieter gibt es eigene Abschnitte (
[auth.github],[auth.google],[auth.azuread],[auth.gitlab]und weitere), und SAML und LDAP sind in Grafana Enterprise und Grafana Cloud verfügbar. LDAP liest außerdem eine separate Dateildap.toml.
Sobald SSO funktioniert, setze disable_login_form = true und behalte das Admin-Konto nur als Break-Glass-Option, oder lass das Formular aktiviert, schütze es aber durch Netzwerkregeln.
Rollen und was Dateien nicht setzen können
Grafana hat Organisationsrollen (Admin, Editor, Viewer), und RBAC fügt in Enterprise und Cloud feingranulare Rollen hinzu. Diese Ressourcen haben in Open-Source-Grafana kein Provisioning-Dateiformat:
| Ressource | Wie du sie als Code verwaltest |
|---|---|
| Benutzer | Über SSO erstellen oder per Admin-API in einem Bootstrap-Skript |
| Teams und Team-Mitgliedschaft | Terraform (grafana_team), die API oder Team Sync vom Identity Provider |
| Organisationen | Terraform (grafana_organization) oder die API |
| Service Accounts und Tokens | Terraform (grafana_service_account, grafana_service_account_token) oder die API |
| Berechtigungen für Ordner und Dashboards | Terraform (grafana_folder_permission, grafana_dashboard_permission), der Operator oder die API |
Die Terraform-Anleitung zeigt das Muster. Für ein kleines Setup ist ein einmaliges Skript, das die HTTP-API mit einer Admin-Berechtigung aufruft, im Repository gehalten und in CI ausgeführt, eine vernünftige Alternative.
Service Accounts für Automatisierung bootstrappen
Werkzeuge wie Terraform, der Operator und CI brauchen eine nicht menschliche Identität. Erstelle einmal einen Service Account mit der niedrigsten Rolle, die funktioniert, und speichere sein Token als Secret:
# den Service Account erstellen (Admin-API, Basic Auth)
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
-H 'Content-Type: application/json' \
-d '{"name":"terraform","role":"Admin"}' \
http://localhost:3000/api/serviceaccounts
# ein Token dafür erstellen, mit der oben zurückgegebenen id
curl -s -X POST -u admin:$GRAFANA_ADMIN_PASSWORD \
-H 'Content-Type: application/json' \
-d '{"name":"terraform-token"}' \
http://localhost:3000/api/serviceaccounts/<id>/tokens
Das Token wird nur einmal angezeigt. Lege es direkt in deinem Secret Store ab und setze ein Ablaufdatum oder rotiere es nach Zeitplan.
Härtungseinstellungen, die es wert sind, committet zu werden
[security]
cookie_secure = true
cookie_samesite = lax
disable_gravatar = true
allow_embedding = false
[auth]
login_maximum_lifetime_duration = 30d
login_maximum_inactive_lifetime_duration = 7d
Prüfe sie bei Upgrades erneut und halte sie über Umgebungen hinweg identisch, außer wo sich ein Wert wirklich unterscheidet, wie root_url.
Ohne UI prüfen
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/admin/settings | jq '."auth.generic_oauth" | {enabled, name}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/users | jq '.[] | {login, isAdmin}'
curl -s -u admin:$GRAFANA_ADMIN_PASSWORD http://localhost:3000/api/teams/search | jq '.teams[].name'
Die vollständige Liste der Optionen pro Anbieter findest du in der Grafana-Dokumentation zur Authentifizierung.
Beliebte Anleitungen
-
Grafana als Code betreiben: Das große Ganze Was in Dateien leben kann, was eine API braucht und wie die Teile zusammenpassen. -
Den Grafana-Server mit grafana.ini und Umgebungsvariablen konfigurieren Wisse, wo Konfigurationsdateien liegen, wie Überschreibungen geordnet sind und wie du Einstellungen in Git hältst. -
Dashboards aus JSON-Dateien provisionieren Lade Dashboards von der Platte, bilde Ordner aus Verzeichnissen ab und erstelle sie, ohne Änderungen zu verlieren. -
Alert-Regeln, Contact Points und Notification Policies provisionieren Definiere die gesamte Alerting-Pipeline in YAML, damit sie wie Code geprüft und versioniert wird. -
Grafana auf Kubernetes mit Helm und Provisioning-Values deployen Betreibe Grafana aus einem Helm-Chart, bei dem Datenquellen, Dashboards und Einstellungen alle aus Values-Dateien stammen. -
Provisioning von der Kommandozeile neu laden, prüfen und Fehler beheben Finde heraus, was Grafana geladen hat, lade ohne Neustart neu und behebe die üblichen Provisioning-Fehler.