3 SAML
Aperçu
L’authentification SAML 2.0 peut être utilisée pour se connecter à Zabbix.
Si seule la connexion SAML est configurée, l’utilisateur doit également exister dans Zabbix ; toutefois, son mot de passe Zabbix ne sera pas utilisé. Si l’authentification réussit, Zabbix fera correspondre un nom d’utilisateur local avec l’attribut de nom d’utilisateur renvoyé par SAML.
Provisionnement des utilisateurs
Il est possible de configurer le provisionnement JIT (just-in-time) des utilisateurs SAML. Dans ce cas, il n'est pas nécessaire qu'un utilisateur existe déjà dans Zabbix. Le compte utilisateur peut être créé lorsque l'utilisateur se connecte à Zabbix pour la première fois.
Si le provisionnement JIT est activé, un groupe d'utilisateurs pour les utilisateurs déprovisionnés doit être spécifié dans l'onglet Authentication.
En plus du provisionnement JIT, il est également possible d'activer et de configurer le provisionnement SCIM (System for Cross-domain Identity Management) - une gestion continue des comptes utilisateurs pour les utilisateurs créés par le provisionnement des utilisateurs. Le provisionnement SCIM nécessite un jeton d'API Zabbix (avec des autorisations Super admin) pour l'authentification dans Zabbix.
Par exemple, si un utilisateur est déplacé d'un groupe SAML à un autre, l'utilisateur sera également déplacé d'un groupe à un autre dans Zabbix ; si un utilisateur est supprimé d'un groupe SAML, l'utilisateur sera également supprimé du groupe dans Zabbix et, s'il n'appartient à aucun autre groupe, ajouté au groupe d'utilisateurs pour les utilisateurs déprovisionnés.
Si SCIM est activé et configuré, un utilisateur SAML sera provisionné au moment où il se connecte à Zabbix et sera mis à jour en continu en fonction des changements dans SAML. Les utilisateurs SAML déjà existants ne seront pas provisionnés, et seuls les utilisateurs provisionnés seront mis à jour. Notez que seuls les médias valides seront ajoutés à un utilisateur lorsque celui-ci est provisionné ou mis à jour.
Si SCIM n'est pas activé, un utilisateur SAML sera provisionné (puis mis à jour ultérieurement) au moment où il se connecte à Zabbix.
Si l'authentification SAML est activée, les utilisateurs pourront choisir entre une connexion locale ou via l'authentification unique SAML. Si le provisionnement JIT est utilisé, seule l'authentification unique est possible.
Configuration du fournisseur d'identité
Afin de fonctionner avec Zabbix, un fournisseur d'identité SAML (onelogin.com, auth0.com, okta.com, etc.) doit être configuré de la manière suivante :
- Assertion Consumer URL doit être définie sur
<path_to_zabbix_ui>/index_sso.php?acs - Single Logout URL doit être définie sur
<path_to_zabbix_ui>/index_sso.php?sls
Exemples de <path_to_zabbix_ui> : https://example.com/zabbix/ui,
http://another.example.com/zabbix, http://<any_public_ip_address>/zabbix
Configuration de Zabbix
Il est nécessaire d’installer php-openssl si vous souhaitez utiliser l’authentification SAML dans le frontend.
Pour utiliser l’authentification SAML, Zabbix doit être configuré de la manière suivante :
1. Fournissez la clé privée SP et les certificats. Un certificat IdP doit être fourni (coller ou choisir un fichier) pour activer SAML via le frontend. Un certificat SP et une clé privée SP doivent être fournis si les options Sign ou Encrypt sont sélectionnées.
Si $SSO['CERT_STORAGE'] = 'database' est défini dans zabbix.conf.php, vous pouvez coller le texte du certificat ou téléverser le fichier de certificat dans le frontend pendant la configuration SAML — aucun fichier n’est requis sur le système de fichiers.
Si $SSO['CERT_STORAGE'] = 'file' est défini dans zabbix.conf.php, le certificat doit être disponible sur le système de fichiers (par défaut dans ui/conf/certs ou dans le chemin configuré dans zabbix.conf.php) et le frontend ne stockera pas les certificats dans la base de données.
Notez que si $SSO['CERT_STORAGE'] n’est pas défini ou est commenté, le stockage dans des fichiers est supposé.
Par défaut, Zabbix recherchera aux emplacements suivants :
- ui/conf/certs/sp.key - fichier de clé privée SP
- ui/conf/certs/sp.crt - fichier de certificat SP
- ui/conf/certs/idp.crt - fichier de certificat IDP
Le matériel de certificat peut être importé via le frontend en collant le texte ou en téléversant des fichiers.
Bien que les importations non chiffrées soient autorisées pour des raisons de commodité dans certains environnements, l’utilisation d’un transport chiffré est fortement recommandée (par exemple, activez HTTPS/TLS pour le frontend Zabbix).
Lorsque les certificats/clés SAML sont stockés dans la base de données, activez TLS/SSL pour les connexions à la base de données afin de protéger le trafic entre l’application et la base de données.
Chiffrez les sauvegardes de base de données susceptibles de contenir des certificats SAML ou des clés privées, et limitez l’accès aux fichiers de sauvegarde ainsi qu’aux tables de la base de données qui stockent le matériel SAML.
Limitez les privilèges de l’utilisateur de la base de données au strict minimum nécessaire.
2. Tous les paramètres les plus importants peuvent être configurés dans le frontend Zabbix. Cependant, il est possible de spécifier des paramètres supplémentaires dans le fichier de configuration.

Paramètres de configuration disponibles dans le frontend Zabbix :
| Parameter | Description |
|---|---|
| Enable SAML authentication | Cochez la case pour activer l’authentification SAML. |
| Enable JIT provisioning | Cochez la case pour activer le provisionnement utilisateur JIT. |
| IDP entity ID | L’identifiant d’entité unique au sein du fournisseur d’identité SAML. |
| SSO service URL | L’URL vers laquelle les utilisateurs seront redirigés lors de la connexion. |
| SLO service URL | L’URL vers laquelle les utilisateurs seront redirigés lors de la déconnexion. Si elle est laissée vide, le service SLO ne sera pas utilisé. |
| Username attribute | Attribut SAML à utiliser comme nom d’utilisateur lors de la connexion à Zabbix. La liste des valeurs prises en charge est déterminée par le fournisseur d’identité. Exemples : 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 | L’identifiant unique du fournisseur de services (s’il ne correspond pas, l’opération sera rejetée). Il est possible de spécifier une URL ou n’importe quelle chaîne de données. |
| SP name ID format | Demande un format name ID particulier dans la réponse. Exemples : 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 | Contenu du certificat du fournisseur de services (SP) pour la configuration du service d’authentification unique SAML (SSO). |
| SP private key | Contenu de la clé privée du fournisseur de services (SP) pour la configuration du service d’authentification unique SAML (SSO). Fournit une authentification sécurisée et un échange de données avec le fournisseur d’identité (IdP). |
| SP certificate | Contenu du certificat du fournisseur de services (SP) pour la configuration du service d’authentification unique SAML (SSO). |
| Sign | Cochez les cases pour sélectionner les entités pour lesquelles la signature SAML doit être activée : Messages Assertions AuthN requests Logout requests Logout responses |
| Encrypt | Cochez les cases pour sélectionner les entités pour lesquelles le chiffrement SAML doit être activé : Name ID Assertions |
| Case-sensitive login | Décochez la case pour désactiver la sensibilité à la casse pour les noms d’utilisateur lors de la connexion (activée par défaut). La désactivation de la sensibilité à la casse permet, par exemple, de se connecter en tant que « admin » même si l’utilisateur Zabbix est « Admin » ou « ADMIN ». Veuillez noter que si la sensibilité à la casse est désactivée et qu’il existe plusieurs utilisateurs Zabbix avec des noms d’utilisateur similaires (par exemple, Admin et admin), la connexion de ces utilisateurs sera toujours refusée avec le message d’erreur suivant : "Authentication failed: supplied credentials are not unique." |
| Configure JIT provisioning | Cochez cette case pour afficher les options liées au provisionnement utilisateur JIT. |
| Group name attribute | Spécifiez l’attribut de nom de groupe pour le provisionnement utilisateur JIT. |
| User name attribute | Spécifiez l’attribut de prénom de l’utilisateur pour le provisionnement utilisateur JIT. |
| User last name attribute | Spécifiez l’attribut de nom de famille de l’utilisateur pour le provisionnement utilisateur JIT. |
| User group mapping | Mappez un modèle de groupe d’utilisateurs SAML à un groupe d’utilisateurs Zabbix et à un rôle utilisateur. Cela est nécessaire pour déterminer quel groupe/rôle l’utilisateur provisionné obtiendra dans Zabbix. Cliquez sur Add pour ajouter un mappage. Le champ SAML group pattern prend en charge les caractères génériques. Le nom du groupe doit correspondre à un groupe existant. Si un utilisateur SAML correspond à plusieurs groupes d’utilisateurs Zabbix, l’utilisateur deviendra membre de tous ces groupes. Si un utilisateur correspond à plusieurs rôles utilisateur Zabbix, il obtiendra le niveau d’autorisation le plus élevé parmi eux. |
| Media type mapping | Mappez les attributs média SAML de l’utilisateur (par ex. e-mail) aux médias utilisateur Zabbix pour l’envoi de notifications. |
| Enable SCIM provisioning | Cochez cette case pour activer le provisionnement SCIM 2.0. |
Consultez des exemples de configuration de fournisseurs d’identité SAML pour la connexion et le provisionnement des utilisateurs dans Zabbix avec :
Remarques sur l’approvisionnement SCIM
Pour l’approvisionnement SCIM, indiquez le chemin vers le frontend Zabbix et ajoutez-y api_scim.php du côté du fournisseur d’identité, c’est-à-dire :
https://<path-to-zabbix-ui>/api_scim.php
Les attributs utilisateur utilisés dans Zabbix (nom d’utilisateur, prénom, nom de famille et attributs de média) doivent être ajoutés en tant qu’attributs personnalisés et, si nécessaire, l’espace de noms externe doit être identique à celui du schéma utilisateur : urn:ietf:params:scim:schemas:core:2.0:User.
Paramètres avancés
Des paramètres SAML supplémentaires peuvent être configurés dans le fichier de configuration du frontend Zabbix (zabbix.conf.php) :
- $SSO['SP_KEY'] = '<chemin vers le fichier de clé privée du SP>';
- $SSO['SP_CERT'] = '<chemin vers le fichier de certificat du SP>';
- $SSO['IDP_CERT'] = '<chemin vers le fichier de certificat de l'IDP>';
- $SSO['SETTINGS']
Zabbix utilise la bibliothèque OneLogin's SAML PHP Toolkit (version 3.4.1). La structure de la section $SSO['SETTINGS'] doit être similaire à la structure utilisée par la bibliothèque. Pour la description des options de configuration, consultez la documentation officielle de la bibliothèque.
Seules les options suivantes peuvent être définies dans $SSO['SETTINGS'] :
- strict
- baseurl
- compress
- contactPerson
- organization
- sp (uniquement les options spécifiées dans cette liste)
- attributeConsumingService
- x509certNew
- idp (uniquement les options spécifiées dans cette liste)
- singleLogoutService (une seule option)
- responseUrl
- certFingerprint
- certFingerprintAlgorithm
- x509certMulti
- singleLogoutService (une seule option)
- security (uniquement les options spécifiées dans cette liste)
- signMetadata
- wantNameId
- requestedAuthnContext
- requestedAuthnContextComparison
- wantXMLValidation
- relaxDestinationValidation
- destinationStrictlyMatches
- rejectUnsolicitedResponsesWithInResponseTo
- signatureAlgorithm
- digestAlgorithm
- lowercaseUrlencoding
Toutes les autres options seront prises depuis la base de données et ne peuvent pas être remplacées. L'option debug sera ignorée.
En outre, si l'interface utilisateur Zabbix se trouve derrière un proxy ou un équilibreur de charge, l'option personnalisée use_proxy_headers peut être utilisée :
- false (par défaut) - ignorer l'option ;
- true - utiliser les en-têtes HTTP X-Forwarded-* pour construire l'URL de base.
Si vous utilisez un équilibreur de charge pour vous connecter à une instance Zabbix, où l'équilibreur de charge utilise TLS/SSL et Zabbix non, vous devez indiquer les paramètres 'baseurl', 'strict' et 'use_proxy_headers' comme suit :
$SSO['SETTINGS'] = [
'strict' => false,
'baseurl' => 'https://zabbix.example.com/zabbix/',
'use_proxy_headers' => true
];
Exemple de configuration :
$SSO['SETTINGS'] = [
'security' => [
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
// ...
],
// ...
];
Configuration de l’interface avec Kerberos/ADFS
Le fichier de configuration de l’interface Zabbix (zabbix.conf.php) peut être utilisé pour configurer le SSO avec l’authentification Kerberos et ADFS :
$SSO['SETTINGS'] = [
'security' => [
'requestedAuthnContext' => [
'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
],
'requestedAuthnContextComparison' => 'exact'
]
];
Dans ce cas, dans la configuration SAML, définissez le champ SP name ID sur :
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified