Grafana LDAP-Authentifizierung mit FreeIPA

Grafana bietet die Möglichkeit, Benutzer über LDAP zu authentifizieren - somit lässt sich das Tool leicht in bestehende Verzeichnisdienste integrieren. Ich verwende in meiner Labor-Umgebung FreeIPA als Verzeichnis-/Authentifizierungsdienst und musste einige Anpassungen vornehmen, um Grafana zu integrieren.

Zuerst muss die Hauptkonfigurationsdatei von Grafana (/etc/grafana/grafana.ini) angepasst werden, um das LDAP-Modul und die dazugehörigen Konfiguration zu aktivieren:

1[auth.ldap]
2enabled = true
3config_file = /etc/grafana/ldap.toml

In diesem Zuge empfiehlt es sich auch, das Registrieren von neuen Benutzern über das Web-Formular zu unterbinden:

1[users]
2allow_sign_up = false
3allow_org_create = false

Für Grafana habe ich im FreeIPA-Backend zwei Gruppen erstellt:

  • grafana-admins
  • grafana-editors

Zu den einzelnen Grafana-Rollen kommen wir gleich noch. Die LDAP-Konfiguration von Grafana (/etc/grafana/ldap.toml) habe ich wie folgt angepasst:

 1[[servers]]
 2host = "dict.test.loc"
 3port = 636
 4use_ssl = true
 5ssl_skip_verify = true
 6root_ca_cert = /etc/ipa/ca.crt
 7
 8# Search user bind dn
 9bind_dn = "uid=svc-bigbrother,cn=users,cn=accounts,dc=test,dc=loc"
10bind_password = '...'
11...
12# User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"
13search_filter = "(uid=%s)"
14
15# An array of base dns to search through
16search_base_dns = ["cn=users,cn=accounts,dc=test,dc=loc"]
17...
18## An array of the base DNs to search through for groups. Typically uses ou=groups
19group_search_base_dns = ["cn=groups,cn=accounts,dc=test,dc=loc"]
20
21# Specify names of the ldap attributes your ldap uses
22[servers.attributes]
23name = "givenName"
24surname = "sn"
25username = "uid"
26member_of = "memberOf"
27email =  "mail"

Grafana

Wird Grafana auf einem System ausgeführt, welches bereits in FreeIPA integriert wurde, liegt das entsprechende SSL-Zertifikat bereits unter /etc/ipa/ca.cert. Ist dies nicht der Fall, muss das Zertifikat kopiert werden. Soll keine Verschlüsselung verwendet werden, müssen die Variablen port und use_ssl angepasst werden.

Die Attribute username und email müssen angepasst werden, damit die Felder dem FreeIPA-Schema entsprechen.

Der nächste Schritt ist, die einzelnen Grafana-Rollen entsprechenden LDAP-Gruppen zuzuordnen. Grafana unterstützt drei unterschiedliche Rollen:

  • Admin - volle Berechtigungen, zusätzlich Administration von Datenquellen
  • Editor - Benutzen und Erstellen/Anpassen von Dashboards
  • Viewer - Benutzen von Dashboards

Ich habe mich dazu entschieden, die Admin- und Editor-Rollen eigenen Gruppen zuzuordnen und das Benutzen von Dashboards jedem authentifizierten Benutzer zu ermöglichen. In der Konfigurationsdatei sieht das folgendermaßen aus:

 1# Administrators
 2[[servers.group_mappings]]
 3group_dn = "cn=grafana-admins,cn=groups,cn=accounts,dc=test,dc=loc"
 4org_role = "Admin"
 5
 6# Editors
 7[[servers.group_mappings]]
 8group_dn = "cn=grafana-editors,cn=groups,cn=accounts,dc=test,dc=loc"
 9org_role = "Editor"
10
11# Read-only for any authenticated user
12[[servers.group_mappings]]
13group_dn = "*"
14org_role = "Viewer"

Übersetzungen: