Sunday, October 25, 2015

Настройка авторизации LDAP для Grafana


Прикрутив к ZabbixGrafana порадовался красивым графикам. Стандартному Zabbix несколько не хватает возможностей работы с графиками, а ведь именно графики наиболее удобно использовать для выявления отклонений в динамике.
Сама Grafana ставится очень просто и быстро, установка модуля для подключения к Zabbix так же не вызвала осложнений. А вот на авторизацию с помощью LDAP в среде Microsoft Active Directory ушло много времени. Кстати, если решили настроить авторизацию LDAP, убедитесь что сам сервер с установленной Grafana надежно защищен, по крайней мере пароль root не 123456 ), ведь вы будете доверять ему Ваши доменные логин и пароль.
На самом Grafana процедура настройки описана хорошо, но у меня не взлетело.
Содержание файла ldap.toml пришлось подправить.
Для работы необходимо во первых использовать sAMAccountName=%s, во вторых необходимо точное соответствие всех параметров с ответами сервера LDAP. То есть если сервер отвечает на запрос "DC=mydomain", то вариант с "dc=mydomain" не прокатит.
Вот что заработало в итоге у меня, под себя нужно подправить выделенное:
# Set to true to log user information returned from LDAP
verbose_logging = false
[[servers]]
# Ldap server host
host = "10.10.10.2"
# Default port is 389 or 636 if use_ssl = true
port = 389
# Set to true if ldap server supports TLS
use_ssl = false
# set to true if you want to skip ssl cert validation
ssl_skip_verify = false
# Search user bind dn
bind_dn = "%s@mydomain.local"
# Search user bind password
#bind_password = 'no matter'
# Search filter, for example "(cn=%s)" or "(sAMAccountName=%s)"
search_filter = "(sAMAccountName=%s)"
# An array of base dns to search through
search_base_dns = ["dc=mydomain,dc=local"]
# Specify names of the ldap attributes your ldap uses
[servers.attributes]
name = "givenName"
surname = "sn"
username = "cn"
member_of = "memberOf"
email =  "email"

# Map ldap groups to grafana org roles
[[servers.group_mappings]]
group_dn = "CN=myGRAdmins,OU=mybusiness,DC=mydomain,DC=local"
org_role = "Admin"
# The Grafana organization database id, optional, if left out the default org (id 1) will be used
# org_id = 1
[[servers.group_mappings]]
#group_dn = "CN=grusers,DC=mydomain,DC=local"
#org_role = "Editor"
[[servers.group_mappings]]
# If you want to match all (or no ldap groups) then you can use wildcard
#group_dn = "*"
#org_role = "Viewer"
При такой настройке нет необходимости создавать учетную запись для bind, вместо этого используются логин и пароль введенные пользователем.
Понятно что должна быть группа myGRAdmins в подразделении mybusiness, и пользователь должен быть членом этой группы чтобы войти в Grafana с правами администратора. То же самое с grusers. 
Если все работает нормально, дальше уже заменяем IP на mydoman.local, включаем TLS.

Из минусов решения:
  • права пользователя в Zabbix никак не связаны с авторизацией в LDAP, то есть для связи используется отдельная, статически заданная учетная запись. А значит, если какие то пользователи не должны видеть какие то показатели внутри заббикса, а какие то должны, то реализовать это будет не так просто (несколько datasource и организаций). В моем случае не критично.
  • Пока не разобрался как массово изменить параметры в панелях на Dashboard. Ну, например, цвет в Single Stat для состояния 1 был зеленым при создании всех 20 панелей, а захотел изменить на оранжевый. Это нужно в каждый войти. Template тут мне пока не помогли. Вероятно, это сделать через веб интерфейс вообще нельзя. Ну и создать эти 20 панелей для 20-ти разных хостов пришлось вручную. Может руки кривые у меня.
  • При добавлении новых хостов и использовании template, у меня не добавляются в  template новые хосты автоматически. Нужно зайти в Template, обновить, сохранить. Может конечно кэш браузера влияет.
За модуль подключения Grafana к Zabbix спасибо Alexander Zobnin.
И конечно благодарность разработчикам Zabbix, Grafana и CentOS на которую я себе все это поставил (внутри Hyper-v).