Всем привет! Мы делаем проекты по Zabbix, накопили большую экспертизу и решили сделать переводы нескольких статей, которые нам показались интересными и полезными. Наверняка, будут полезны и вам. Также своим опытом делимся в телеграм-канале zabbix_ru, где вы можете найти полезные материалы и записи наших вебинаров, опубликованных на нашем ютуб-канале (прим. переводчика). Ниже ссылки на предыдущие статьи из цикла.
В этой статье обсуждаются варианты аутентификации в Zabbix, рассматривются примеры их настройки, а также обсуждаются преимущества и возможные недостатки использования отдельных методов.
Варианты аутентификации в Zabbix
По умолчанию Zabbix использует внутреннюю аутентификацию для всех пользователей. Однако, можно использовать комбинацию внутренних учётных записей и учётных записей LDAP (Microsoft Active Directory и OpenLDAP), SAML 2.0 или SCIM. Для проверки имени пользователя и пароля можно использовать даже HTTP-аутентификацию (например, базовую аутентификацию или NTLM/Kerberos), но, в отличие от других методов, в этом случае невозможно использовать JIT.
В наших примерах сначала необходимо включить аутентификацию LDAP, а затем включить JIT-подготовку.
В разделе Users -> Authentication -> Authentication установите параметр Default authentication в значение LDAP.
Для элемента Deprovisioned user groups выберите группу Disabled.

LDAP (Active Directory)
Базовые настройки
Сначала в разделе Users -> Authentication -> LDAP settings установите флажки Enable LDAP authentication и Enable JIT provisioning.
При необходимости можно включить учет регистра при входе в систему, т. е. пользователи с одинаковыми именами и фамилиями могут различаться по регистрозависимому имени.
Вы также можете установить более низкую или более высокую частоту выполнения JIT-подготовки, чем значение по умолчанию (1 час).

Затем добавьте LDAP-сервер и настройте JIT-подготовку, нажав на ссылку Add, расположенную в разделе Servers.
В следующем диалоговом окне заполните все данные о сервере LDAP, входе на него (например, с использованием учетной записи службы), а также данные, необходимые для просмотра структуры целевого сервера LDAP.
Сначала укажите имя LDAP-сервера, его IP-адрес или имя хоста, а также порт службы LDAP (стандартный порт 389 для LDAP и 636 для LDAP). Да, вы можете определить несколько LDAP-серверов.
Теперь выберите путь, по которому Zabbix будет искать пользователей и группы в LDAP ( BaseDN), а также атрибут LDAP для поиска ( Search attribute), это значение по умолчанию sAMAccountName.
Заполните путь в LDAP к пользователю, которому разрешено подключение к LDAP ( BindDN), и его пароль ( Bind password).
Примечание: в целях безопасности мы рекомендуем отключить анонимную привязку на уровне сервера LDAP и строго использовать ldaps (tcp/636).

JIT
Теперь приступаем к настройке самой JIT-подготовки, установив флажок Configure JIT provisioning, который раскрывает меню параметров конфигурации.
Сначала в пункте Group configuration выбираем способ поиска групп на уровне LDAP. В данном случае мы выберем метод memberOf, чтобы Zabbix искал пользователей и их членство в группах.
Далее заполняем имя атрибута, определяющего имя группы ( Group name attribute), обычно это CN, т.е. CommonName.
В элементе User group membership attribute добавьте атрибут, определяющий принадлежность к группе.
Обратите внимание, что в примере ниже эта запись правильно заполнена значением memberof, хотя подсказка, которую предлагает Zabbix, имеет значение , но это неверно!memberOf
Правка: Эта ошибка была официально зарегистрирована и исправлена в [ZBX-22597] resolved issue with LDAP group membership mapping not matching case-insensitive entries. Начиная с версии 6.4.2, проблема устранена, и в справке указано правильное значение, рекомендованное выше.
Другие элементы — это атрибуты, указывающие имя пользователя ( User name attribute) и его фамилию ( User last name attribute).
В случае Active Directory givenName это значения для имени и sn для фамилии.

Сопоставление атрибутов
В разделе «User group mapping» выберите уже существующую группу на уровне Zabbix, к которой будут привязаны пользователи LDAP.
Группа должна иметь одинаковое название в Zabbix и в LDAP, в нашем случае это группа Zabbix_Super_Admins.
Затем назначьте этой группе нужную роль пользователя, разрешения которой она будет унаследовать, например, Super admin role.
Примечание: для обеих настроек разрешены подстановочные знаки (например, *).

Следующий элемент Media type mapping сопоставляет атрибуты объектов в LDAP для нужд заполнения типов носителей отдельных пользователей.
Ниже вы можете увидеть пример сопоставления адреса электронной почты:

Перед сохранением конфигурации вы можете проверить работоспособность всей настройки с помощью кнопки Test.

На этом этапе вы уже настроили вход в систему LDAP, включая JIT-подготовку пользователей.
Вы можете сохранить конфигурацию и войти в систему, используя наши учетные данные LDAP.

Если вы используете «привязку» пользователя для подключения к серверу LDAP и устанавливаете LDAP в качестве метода аутентификации по умолчанию (как в данном случае), то также можно выполнить однократную подготовку.
Например, если вы знаете об изменениях, внесенных на уровне LDAP, и не хотите ждать предопределенной частоты автоматической подготовки.
Вы можете выполнить однократную, мгновенную подготовку в разделе Users -> Users. Кнопка находится под списком пользователей Provision now.

SAML (Azure AD/Microsoft Entra ID)
Базовые настройки
Самый первый шаг — создание нового приложения в Azure, в разделе Enterprise applications -> All applications -> New application, см. следующий снимок экрана.

Здесь нажмите на кнопку Create your own application.

Появится диалоговое окно, в котором вам нужно выбрать опцию, чтобы приложение не было частью меню, дать новому приложению имя и подтвердить свой выбор кнопкой Create.

В созданном приложении выберите метод единого входа SAML.

Это перенаправит вас к параметрам настройки SAML, где мы нажимаем на ссылку Edit в первом варианте Basic SAML Configuration.

Здесь вам необходимо заполнить поле Identity ID, которое является URL-адресом веб-интерфейса Zabbix. В нашем случае это https://student-01.initmax.cz/zabbix.
Далее идет «Reply URL», то есть место, где Zabbix ожидает токен аутентификации, т. е https://student-01.initmax.cz/zabbix/index_sso.php?acs.
При желании вы также можете заполнить Logout URL, который для нашего примера Zabbix выглядит следующим образом: https://student-01.initmax.cz/zabbix/index_sso.php?sls.
Сохраните настройки с помощью кнопки Save и можете закрыть диалоговое окно.

Появится всплывающее окно с предложением протестировать вашу настройку. На данный момент вам следует пропустить этот шаг и выбрать, No, I'll test later поскольку настройка еще не завершена.

Атрибуты пользователей и групп
В разделе Attributes & Claims выберите ссылку Edit.

Создайте настройки для группы здесь с помощью кнопки Add a group claim.

В диалоговом окне настроек группы выберите All groups и выберите sAMAccountName в качестве Source attribute.
В дополнительных параметрах настроек установите флажок, чтобы настроить имя для вашей новой «групповой заявки», и введите значение по вашему выбору, например groups.

Далее вам необходимо создать новую заявку для имени пользователя, имени и фамилии, а также для медиа.
Создайте новую заявку с помощью кнопки Add new claim.

На этом изображении вы можете увидеть пример анализа атрибута ресурса user.mail для типа носителя Email.
Этот атрибут очень важен, так как в этом примере мы используем адрес электронной почты пользователя в качестве имени входа в Zabbix.

Здесь вы можете увидеть пример установки значений даже для необязательных атрибутов, таких как имя и фамилия пользователя, его номер телефона и идентификатор получателя.
После установки всех необходимых значений вы можете закрыть окно настроек.

После этого загрузите сертификат Base64, содержащий токен входа.
Для этой цели в разделе SAML Certificates есть ссылка Download, как вы можете видеть на изображении ниже.

Убедитесь, что вы успешно загрузили сертификат с токеном входа, и можете переходить к настройкам Zabbix.
Zabbix
Сначала в разделе Users -> Authentication -> SAML settings отметьте галочкой Enable SAML authentication.
При необходимости можно включить учет регистра при входе в систему, т. е. пользователи с одинаковыми именами и фамилиями могут различаться по регистрозависимому имени.
Вы также можете установить более низкую или более высокую частоту выполнения подготовки, чем значение по умолчанию (1 час).

Правильные значения всех необходимых настроек SAML можно найти в соответствующих разделах веб-интерфейса MS Azure.
Идентификатор сущности IdP на уровне Azure именуется Azure AD Identifier, значение URL-адреса службы SSO можно найти в Azure под именем Login URL, а URL-адрес службы SLO — это Logout URL.
Значение элемента Username attribute — это имя созданной вами заявки для электронной почты пользователя, в нашем случае user_email.
Заполните SPN для идентификатора сущности SP значением Application ID из Azure. Это значение можно найти в меню Properties созданного нами приложения.
Скопируйте это значение в буфер обмена и перед вставкой его в элемент идентификатора сущности SP необходимо добавить к нему префикс spn: иначе эта настройка не будет работать!
На данный момент настройка SAML завершена, и вы можете сохранить ее с помощью кнопки Update.

Однако на данный момент вход в систему не работает, поскольку у Zabbix еще нет сертификата, содержащего токен аутентификации, который вы уже загрузили из MS Azure.
Вам необходимо физически разместить его на сервере Zabbix. Поэтому подключитесь к серверу Zabbix по SSH и сначала создайте папку для сертификатов:
Для Zabbix версии 7.0 и более ранних версий:
mkdir /usr/share/zabbix/conf/certs/
Начиная с версии Zabbix 7.2:
mkdir /usr/share/zabbix/ui/conf/certs/
Скопируйте туда свой сертификат под именем AZURE.cer(например) и установите правильные разрешения:
Для Zabbix версии 7.0 и более ранних версий:
chmod 644 /usr/share/zabbix/conf/certs/AZURE.cer
Начиная с версии Zabbix 7.2:
chmod 644 /usr/share/zabbix/ui/conf/certs/AZURE.cer
Затем откройте файл конфигурации интерфейса Zabbix по следующему пути:
nano /etc/zabbix/web/zabbix.conf.php
Здесь, в разделе аутентификации SAML, отредактируйте директиву конфигурации $SSO['IDP_CERT'], указав значение относительного пути к нашему сертификату, в нашем случае следующим образом:
// Used for SAML authentication.
// Uncomment to override the default paths to SP private key, SP and IdP X.509 certificates, and to set extra settings.
//$SSO['SP_KEY'] = 'conf/certs/sp.key';
//$SSO['SP_CERT'] = 'conf/certs/sp.crt';
$SSO['IDP_CERT'] = 'conf/certs/AZURE.cer';
//$SSO['SETTINGS'] = [];
JIT
Теперь можно перейти к настройке JIT-подготовки, снова в разделе Users -> Authentication -> SAML settings, отметьте флажками Enable JIT provisioning и Configure JIT provisioning.
Откроются настройки подготовки. Заполните необходимые поля названиями наших заявок, созданных ранее на уровне Azure.

После сохранения этой настройки можно будет войти в систему под своими учетными данными, используя единый вход (SSO). Для этого воспользуйтесь ссылкой Sign in with Single Sign-On (SAML) на экране входа, которая перенаправит нас на страницу входа Microsoft, или выполните вход напрямую.

Проверить, действительно ли подготовка работает для конкретного пользователя, можно в разделе Users -> Users.
В столбце Provisioned будут указаны дата и время последней успешной подготовки.

После нажатия на конкретного пользователя вы увидите, что все поля неактивны, поскольку эти настройки управляются централизованно в Azure AD.

SCIM (Azure AD/Microsoft Entra ID)
Базовые настройки
Чтобы настроить SCIM, необходимо сначала включить его. Это можно сделать, установив флажок на Enable SCIM provisioning в том же разделе настроек SAML.
Итак, снова в разделе Users -> Authentication -> SAML settings.

Далее вам необходимо создать токен API с правами суперадминистратора.
В разделе Users -> API tokens нажмите кнопку Create API token и в диалоговом окне настроек токена выберите имя токена и выберите локального привилегированного пользователя Admin в качестве владельца.
Затем отключите предопределенный срок действия этого токена, сняв флажок с Set expiration date and time.
Установите флажок Enabled, чтобы включить эту функцию, и завершите настройку, нажав кнопку Add.

После создания токена появится окно статуса с описанием токена и самим токеном, скопируйте его в буфер обмена и сохраните для дальнейшего использования.

Настройки окружения Azure
Теперь возвращаемся в веб-интерфейс Azure и в созданном нами ранее приложении переходим в раздел Provisioning, где нужно нажать на кнопку Get started.

В настройках предоставления услуг выберите режим Automatic и заполните раздел Tenant URL в Admin Credentials, в нашем случае URL-адрес SCIM API в Zabbix.
А именно, https://student-01.initmax.cz/zabbix/api_scim.php в поле Secret Token вставьте сохраненный вами токен из предыдущих шагов.
Вы можете проверить соединение с помощью кнопки Test Connection и, если все в порядке, сохранить конфигурацию.

Сопоставление атрибутов
После сохранения конфигурации появятся параметры настройки сопоставления пользователей и групп.
Здесь выберите опцию Provision Azure Active Directory Users.

Вы перейдете в раздел Attribute Mapping, где вам необходимо добавить свои пользовательские атрибуты.
Для того чтобы иметь возможность редактировать и добавлять собственные атрибуты, необходимо поставить галочку в чекбоксе Show advanced options, который находится в самом низу этой страницы.
Затем нажмите на ссылку Edit attribute list for customappsso.

Это перенесет вас к списку всех атрибутов вашего приложения, и здесь вы добавите те же атрибуты, что и в предыдущих случаях.
По завершении сохраните конфигурацию сопоставления пользователей с помощью кнопки Save.
Уже добавленные атрибуты вы можете увидеть на изображении ниже.

Сохранение списка атрибутов возвращает нас к тому месту Attribute Mapping, где необходимо создать корректное сопоставление для этих атрибутов.
Для этого нажмите на ссылку Add New Mapping.

Для всех ваших атрибутов создайте сопоставление с их конкретным аналогом в AD, как и в предыдущих случаях.
Ниже вы можете увидеть пример сопоставления атрибута user_mobile.

Здесь вы можете увидеть список всех заполненных атрибутов с их правильно заданным исходным атрибутом.
После настройки сопоставления всех необходимых атрибутов нажмите кнопку Save и закройте диалоговое окно.

Последний шаг настройки функциональной SCIM — запуск самой подготовки.
Вернитесь в раздел Overview на домашней странице недавно созданной вами подготовки и нажмите кнопку Start provisioning здесь.

На этом настройка предоставления SCIM завершена.
Стоит отметить, что предоставление SCIM имеет определенные ограничения. Например, на уровне Zabbix можно создавать пользователей, но их больше нельзя обновлять или назначать им определенные права.
На этом все! Спасибо за внимание! Если статья была интересна, подпишитесьна телеграм‑канал zabbix_ru, где будет еще больше полезной информации.