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:

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

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

[users]
allow_sign_up = false
allow_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:

[[servers]]
host = "dict.test.loc"
port = 636
use_ssl = true
ssl_skip_verify = true
root_ca_cert = /etc/ipa/ca.crt

# Search user bind dn
bind_dn = "uid=svc-bigbrother,cn=users,cn=accounts,dc=test,dc=loc"
bind_password = '...'
...
# User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"
search_filter = "(uid=%s)"

# An array of base dns to search through
search_base_dns = ["cn=users,cn=accounts,dc=test,dc=loc"]
...
## An array of the base DNs to search through for groups. Typically uses ou=groups
group_search_base_dns = ["cn=groups,cn=accounts,dc=test,dc=loc"]

# Specify names of the ldap attributes your ldap uses
[servers.attributes]
name = "givenName"
surname = "sn"
username = "uid"
member_of = "memberOf"
email =  "mail"
Grafana

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:

# Administrators
[[servers.group_mappings]]
group_dn = "cn=grafana-admins,cn=groups,cn=accounts,dc=test,dc=loc"
org_role = "Admin"

# Editors
[[servers.group_mappings]]
group_dn = "cn=grafana-editors,cn=groups,cn=accounts,dc=test,dc=loc"
org_role = "Editor"

# Read-only for any authenticated user
[[servers.group_mappings]]
group_dn = "*"
org_role = "Viewer"

Schreibe einen Kommentar