3 SAML
Обзор
SAML 2.0 аутентификация может использоваться для входа в Zabbix.
Если вход по SAML настроен без JIT-подготовки пользователей, пользователь должен уже существовать в Zabbix; пароль пользователя Zabbix не используется для аутентификации. После успешной аутентификации SAML Zabbix сопоставляет атрибут имени пользователя, полученный из SAML, с существующим локальным именем пользователя Zabbix.
Подготовка пользователей
Можно настроить JIT (just-in-time) подготовку пользователей для пользователей SAML. В этом случае не требуется, чтобы пользователь уже существовал в Zabbix. Учетная запись пользователя может быть создана, когда пользователь впервые входит в Zabbix.
Если включена JIT-подготовка, на вкладке Authentication необходимо указать группу пользователей для деактивированных пользователей.
Помимо JIT-подготовки также можно включить и настроить SCIM (System for Cross-domain Identity Management) provisioning — непрерывное управление учетными записями пользователей для тех пользователей, которые были созданы с помощью подготовки пользователей. Для аутентификации в Zabbix SCIM provisioning требует API token Zabbix (с правами Super admin).
Например, если пользователь перемещается из одной группы SAML в другую, в Zabbix он также будет перемещен из одной группы в другую; если пользователь удаляется из группы SAML, он также будет удален из группы в Zabbix и, если не принадлежит ни к какой другой группе, добавлен в группу пользователей для деактивированных пользователей.
Если SCIM включен и настроен, пользователь SAML будет подготовлен в момент входа пользователя в Zabbix и будет непрерывно обновляться на основе изменений в SAML. Уже существующие пользователи SAML не будут подготовлены, и обновляться будут только подготовленные пользователи. Обратите внимание, что при подготовке или обновлении пользователя будут добавляться только допустимые способы оповещения.
Если SCIM не включен, пользователь SAML будет подготовлен (а затем обновляться) в момент входа пользователя в Zabbix.
Если включена аутентификация SAML, пользователи смогут выбирать между локальным входом и единым входом через SAML. Если используется JIT-подготовка, то возможен только единый вход.
Настройка поставщика удостоверений
Чтобы работать с Zabbix, поставщик удостоверений SAML (onelogin.com, auth0.com, okta.com и т. д.) должен быть настроен следующим образом:
- Assertion Consumer URL должен быть установлен в
<path_to_zabbix_ui>/index_sso.php?acs - Single Logout URL должен быть установлен в
<path_to_zabbix_ui>/index_sso.php?sls
Примеры <path_to_zabbix_ui>: https://example.com/zabbix/ui,
http://another.example.com/zabbix, http://<any_public_ip_address>/zabbix
Настройка Zabbix
Если вы хотите использовать аутентификацию SAML в веб-интерфейсе, необходимо установить php-openssl.
Для использования аутентификации SAML Zabbix необходимо настроить следующим образом:
1. Закрытый ключ и сертификат должны храниться в ui/conf/certs/, если не указаны пользовательские пути в zabbix.conf.php.
По умолчанию Zabbix будет искать их в следующих расположениях:
- ui/conf/certs/sp.key - файл закрытого ключа SP
- ui/conf/certs/sp.crt - файл сертификата SP
- ui/conf/certs/idp.crt - файл сертификата IDP
2. Все наиболее важные параметры можно настроить в веб-интерфейсе Zabbix. Однако дополнительные параметры можно указать в файле конфигурации.

Параметры конфигурации, доступные в веб-интерфейсе Zabbix:
| Параметр | Описание |
|---|---|
| Enable SAML authentication | Установите флажок, чтобы включить аутентификацию SAML. |
| Enable JIT provisioning | Установите флажок, чтобы включить автоматическое создание пользователей JIT. |
| IDP entity ID | Уникальный идентификатор сущности в поставщике удостоверений SAML. |
| SSO service URL | URL-адрес, на который пользователи будут перенаправляться при входе в систему. |
| SLO service URL | URL-адрес, на который пользователи будут перенаправляться при выходе из системы. Если оставить поле пустым, служба SLO использоваться не будет. |
| Username attribute | Атрибут SAML, который будет использоваться в качестве имени пользователя при входе в Zabbix. Список поддерживаемых значений определяется поставщиком удостоверений. Примеры: uid userprincipalname samaccountname username userusername urn:oid:0.9.2342.19200300.100.1.1 urn:oid:1.3.6.1.4.1.5923.1.1.1.13 urn:oid:0.9.2342.19200300.100.1.44 |
| SP entity ID | Уникальный идентификатор поставщика услуг (если он не совпадает, операция будет отклонена). Можно указать URL-адрес или любую строку данных. |
| SP name ID format | Запросить определенный формат идентификатора имени в ответе. Примеры: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified urn:oasis:names:tc:SAML:2.0:nameid-format:transient |
| Sign | Снимите флажки, чтобы отключить подписи SAML для соответствующих сущностей: Messages Assertions AuthN requests Logout requests Logout responses |
| Encrypt | Установите флажки, чтобы выбрать сущности, для которых необходимо включить шифрование SAML: Name ID Assertions |
| Case-sensitive login | Снимите флажок, чтобы отключить учет регистра при входе для имен пользователей (по умолчанию функция включена). Отключение учета регистра при входе позволяет, например, войти как "admin", даже если пользователь Zabbix называется "Admin" или "ADMIN". Обратите внимание: если учет регистра при входе отключен и существует несколько пользователей Zabbix с похожими именами (например, Admin и admin), вход для этих пользователей всегда будет запрещен со следующим сообщением об ошибке: "Authentication failed: supplied credentials are not unique." |
| Configure JIT provisioning | Установите этот флажок, чтобы отобразить параметры, связанные с автоматическим созданием пользователей JIT. |
| Group name attribute | Укажите атрибут имени группы для автоматического создания пользователей JIT. |
| User name attribute | Укажите атрибут имени пользователя для автоматического создания пользователей JIT. |
| User last name attribute | Укажите атрибут фамилии пользователя для автоматического создания пользователей JIT. |
| User group mapping | Сопоставьте шаблон группы пользователей SAML с группой пользователей и ролью пользователя Zabbix. Это необходимо для определения группы пользователей и роли, которые получит созданный пользователь в Zabbix. Нажмите Add, чтобы добавить сопоставление. Поле SAML group pattern поддерживает подстановочные символы. Имя группы должно соответствовать существующей группе. Если пользователь SAML соответствует нескольким группам пользователей Zabbix, он становится участником всех этих групп. Если пользователь соответствует нескольким ролям пользователей Zabbix, он получит наивысший уровень разрешений среди них. |
| Media type mapping | Сопоставьте атрибуты типов носителей SAML пользователя (например, адрес электронной почты) с типами носителей пользователя Zabbix для отправки уведомлений. |
| Enable SCIM provisioning | Установите этот флажок, чтобы включить автоматическое создание пользователей SCIM 2.0. |
Примеры настройки поставщиков удостоверений SAML для входа и автоматического создания пользователей в Zabbix:
Примечания по SCIM provisioning
Для SCIM provisioning укажите путь к веб-интерфейсу Zabbix и добавьте к нему api_scim.php на стороне поставщика удостоверений, то есть:
https://<path-to-zabbix-ui>/api_scim.php
Атрибуты пользователя, которые используются в Zabbix (username, user name, user lastname и media attributes), нужно добавить как пользовательские атрибуты, и, при необходимости, внешний namespace должен совпадать со схемой пользователя: urn:ietf:params:scim:schemas:core:2.0:User.
Дополнительные настройки
Дополнительные параметры SAML можно настроить в файле конфигурации веб-интерфейса Zabbix (zabbix.conf.php):
- $SSO['SP_KEY'] = '<путь к файлу закрытого ключа SP>';
- $SSO['SP_CERT'] = '<путь к файлу сертификата SP>';
- $SSO['IDP_CERT'] = '<путь к файлу сертификата IDP>';
- $SSO['SETTINGS']
Массив $SSO['SETTINGS'] должен иметь ту же структуру, которую ожидает библиотека SAML PHP Toolkit (поставляется вместе с Zabbix).
Полное описание доступных параметров конфигурации см. в официальной документации библиотеки.
В составе $SSO['SETTINGS'] можно задать только следующие параметры:
- strict
- baseurl
- compress
- contactPerson
- organization
- sp (только параметры, указанные в этом списке)
- attributeConsumingService
- x509certNew
- idp (только параметры, указанные в этом списке)
- singleLogoutService (только один параметр)
- responseUrl
- certFingerprint
- certFingerprintAlgorithm
- x509certMulti
- singleLogoutService (только один параметр)
- security (только параметры, указанные в этом списке)
- signMetadata
- wantNameId
- requestedAuthnContext
- requestedAuthnContextComparison
- wantXMLValidation
- relaxDestinationValidation
- destinationStrictlyMatches
- rejectUnsolicitedResponsesWithInResponseTo
- signatureAlgorithm
- digestAlgorithm
- lowercaseUrlencoding
Все остальные параметры будут взяты из базы данных и не могут быть переопределены. Параметр debug будет проигнорирован.
Кроме того, если веб-интерфейс Zabbix находится за прокси или балансировщиком нагрузки, можно использовать пользовательский параметр use_proxy_headers:
- false (по умолчанию) - игнорировать параметр;
- true - использовать HTTP-заголовки X-Forwarded-* для формирования базового URL.
Если для подключения к экземпляру Zabbix используется балансировщик нагрузки, при этом балансировщик использует TLS/SSL, а Zabbix — нет, необходимо указать параметры 'baseurl', 'strict' и 'use_proxy_headers' следующим образом:
$SSO['SETTINGS'] = [
'strict' => false,
'baseurl' => 'https://zabbix.example.com/zabbix/',
'use_proxy_headers' => true
];
Пример настройки:
$SSO['SETTINGS'] = [
'security' => [
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
// ...
],
// ...
];
Настройка веб-интерфейса с Kerberos/ADFS
Файл конфигурации веб-интерфейса Zabbix (zabbix.conf.php) можно использовать для настройки SSO с аутентификацией Kerberos и ADFS:
$SSO['SETTINGS'] = [
'security' => [
'requestedAuthnContext' => [
'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
],
'requestedAuthnContextComparison' => 'exact'
]
];
В этом случае в поле SP name ID конфигурации SAML установите:
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified