3 SAML

Обзор

SAML 2.0 аутентификация может использоваться для входа в Zabbix.

Если настроен только вход через SAML, то пользователь также должен существовать в Zabbix, однако его пароль Zabbix использоваться не будет. Если аутентификация выполнена успешно, то Zabbix сопоставит локальное имя пользователя с атрибутом имени пользователя, возвращенным SAML.

Подготовка пользователей

Можно настроить JIT (just-in-time) подготовку пользователей для пользователей SAML. В этом случае не требуется, чтобы пользователь уже существовал в Zabbix. Учетная запись пользователя может быть создана при первом входе пользователя в Zabbix.

Если включена JIT-подготовка, на вкладке Аутентификация необходимо указать группу пользователей для деактивированных пользователей.

Помимо JIT-подготовки также можно включить и настроить SCIM (System for Cross-domain Identity Management) provisioning — непрерывное управление учетными записями пользователей для тех пользователей, которые были созданы с помощью подготовки пользователей. Для аутентификации в Zabbix SCIM provisioning требует API-токен 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

Необходимо установить php-openssl, если вы хотите использовать аутентификацию SAML во веб-интерфейсе.

Чтобы использовать аутентификацию SAML, Zabbix должен быть настроен следующим образом:

1. Укажите закрытый ключ SP и сертификаты. Для активации SAML через веб-интерфейс необходимо указать сертификат IdP (вставить текст или выбрать файл). Если выбраны параметры Sign или Encrypt, необходимо указать сертификат SP и закрытый ключ SP.

Если в zabbix.conf.php задано $SSO['CERT_STORAGE'] = 'database', вы можете вставить текст сертификата или загрузить файл сертификата во веб-интерфейсе во время настройки SAML — файлы в файловой системе не требуются.

Если в zabbix.conf.php задано $SSO['CERT_STORAGE'] = 'file', сертификат должен быть доступен в файловой системе (по умолчанию в ui/conf/certs или по пути, указанному в zabbix.conf.php), и веб-интерфейс не будет хранить сертификаты в базе данных. Обратите внимание: если $SSO['CERT_STORAGE'] не задан или закомментирован, предполагается файловое хранилище.

По умолчанию Zabbix будет искать в следующих расположениях:

  • ui/conf/certs/sp.key - файл закрытого ключа SP
  • ui/conf/certs/sp.crt - файл сертификата SP
  • ui/conf/certs/idp.crt - файл сертификата IDP

Материалы сертификатов можно импортировать через веб-интерфейс, вставив текст или загрузив файлы. Хотя незашифрованный импорт допускается для удобства в некоторых средах, настоятельно рекомендуется использовать зашифрованную передачу (например, включить HTTPS/TLS для веб-интерфейса Zabbix). Если сертификаты/ключи SAML хранятся в базе данных, включите TLS/SSL для подключений к базе данных, чтобы защитить трафик между приложением и базой данных.
Шифруйте резервные копии базы данных, которые могут содержать сертификаты SAML или закрытые ключи, и ограничьте доступ к файлам резервных копий и к таблицам базы данных, в которых хранится материал SAML. Ограничьте привилегии пользователя базы данных минимально необходимыми.

2. Все наиболее важные параметры можно настроить во веб-интерфейсе Zabbix. Однако дополнительные параметры можно указать в файле конфигурации.

Параметры конфигурации, доступные во веб-интерфейсе Zabbix:

Parameter Description
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 Запросить в ответе определенный формат Name ID.

Примеры:
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
IdP certificate Содержимое сертификата поставщика услуг (SP) для настройки службы единого входа (SSO) SAML.
SP private key Содержимое закрытого ключа поставщика услуг (SP) для настройки службы единого входа (SSO) SAML. Обеспечивает безопасную аутентификацию и обмен данными с поставщиком удостоверений (IdP).
SP certificate Содержимое сертификата поставщика услуг (SP) для настройки службы единого входа (SSO) SAML.
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 пользователя (например, email) с медиа пользователя 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
  • 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