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"
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"