3 SAML
Panoramica
L'autenticazione SAML 2.0 può essere utilizzata per accedere a Zabbix.
Se è configurato solo l'accesso tramite SAML, l'utente deve comunque esistere anche in Zabbix, tuttavia la sua password di Zabbix non verrà utilizzata. Se l'autenticazione ha esito positivo, Zabbix confronterà un nome utente locale con l'attributo nome utente restituito da SAML.
Provisioning degli utenti
È possibile configurare il provisioning JIT (just-in-time) degli utenti per gli utenti SAML. In questo caso, non è necessario che un utente esista già in Zabbix. L'account utente può essere creato quando l'utente accede a Zabbix per la prima volta.
Se il provisioning JIT è abilitato, nella scheda Authentication deve essere specificato un gruppo di utenti per gli utenti deprovisioned.
Oltre al provisioning JIT, è anche possibile abilitare e configurare il provisioning SCIM (System for Cross-domain Identity Management) - gestione continua degli account utente per gli utenti che sono stati creati tramite user provisioning. Il provisioning SCIM richiede un API token di Zabbix (con privilegi di Super admin) per l'autenticazione in Zabbix.
Ad esempio, se un utente viene spostato da un gruppo SAML a un altro, l'utente verrà anche spostato da un gruppo a un altro in Zabbix; se un utente viene rimosso da un gruppo SAML, l'utente verrà anche rimosso dal gruppo in Zabbix e, se non appartiene ad alcun altro gruppo, verrà aggiunto al gruppo di utenti per gli utenti deprovisioned.
Se SCIM è abilitato e configurato, un utente SAML verrà provisioned nel momento in cui l'utente accede a Zabbix e verrà aggiornato continuamente in base alle modifiche in SAML. Gli utenti SAML già esistenti non verranno provisioned e verranno aggiornati solo gli utenti provisioned. Si noti che solo i media validi verranno aggiunti a un utente quando l'utente viene provisioned o aggiornato.
Se SCIM non è abilitato, un utente SAML verrà provisioned (e successivamente aggiornato) nel momento in cui l'utente accede a Zabbix.
Se l'autenticazione SAML è abilitata, gli utenti potranno scegliere se accedere localmente oppure tramite single sign-on SAML. Se viene utilizzato il provisioning JIT, è possibile solo il single sign-on.
Configurazione del provider di identità
Per poter lavorare con Zabbix, un provider di identità SAML (onelogin.com, auth0.com, okta.com, ecc.) deve essere configurato nel seguente modo:
- Assertion Consumer URL deve essere impostato su
<path_to_zabbix_ui>/index_sso.php?acs - Single Logout URL deve essere impostato su
<path_to_zabbix_ui>/index_sso.php?sls
Esempi di <path_to_zabbix_ui>: https://example.com/zabbix/ui,
http://another.example.com/zabbix, http://<any_public_ip_address>/zabbix
Configurazione di Zabbix
È necessario installare php-openssl se si desidera utilizzare l'autenticazione SAML nel frontend.
Per utilizzare l'autenticazione SAML, Zabbix deve essere configurato nel seguente modo:
1. La chiave privata e il certificato devono essere archiviati in ui/conf/certs/, a meno che non vengano forniti percorsi personalizzati in zabbix.conf.php.
Per impostazione predefinita, Zabbix cercherà nelle seguenti posizioni:
- ui/conf/certs/sp.key - file della chiave privata SP
- ui/conf/certs/sp.crt - file del certificato SP
- ui/conf/certs/idp.crt - file del certificato IDP
2. Tutte le impostazioni più importanti possono essere configurate nel frontend di Zabbix. Tuttavia, è possibile specificare impostazioni aggiuntive nel file di configurazione.

Parametri di configurazione, disponibili nel frontend di Zabbix:
| Parameter | Description |
|---|---|
| Enable SAML authentication | Selezionare la casella di controllo per abilitare l'autenticazione SAML. |
| Enable JIT provisioning | Selezionare la casella di controllo per abilitare il provisioning JIT degli utenti. |
| IDP entity ID | L'identificatore univoco dell'entità all'interno del provider di identità SAML. |
| SSO service URL | L'URL a cui gli utenti verranno reindirizzati durante l'accesso. |
| SLO service URL | L'URL a cui gli utenti verranno reindirizzati durante la disconnessione. Se lasciato vuoto, il servizio SLO non verrà utilizzato. |
| Username attribute | Attributo SAML da utilizzare come nome utente durante l'accesso a Zabbix. L'elenco dei valori supportati è determinato dal provider di identità. Esempi: 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'identificatore univoco del service provider (se non corrisponde, l'operazione verrà rifiutata). È possibile specificare un URL o qualsiasi stringa di dati. |
| SP name ID format | Richiede un formato specifico del name ID nella risposta. Esempi: 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 | Selezionare le caselle di controllo per scegliere le entità per le quali la firma SAML deve essere abilitata: Messages Assertions AuthN requests Logout requests Logout responses |
| Encrypt | Selezionare le caselle di controllo per scegliere le entità per le quali la crittografia SAML deve essere abilitata: Name ID Assertions |
| Case-sensitive login | Deselezionare la casella di controllo per disabilitare l'accesso con distinzione tra maiuscole e minuscole per i nomi utente (abilitato per impostazione predefinita). Disabilitare l'accesso con distinzione tra maiuscole e minuscole consente, ad esempio, di accedere come "admin" anche se l'utente Zabbix è "Admin" o "ADMIN". Si noti che, se l'accesso con distinzione tra maiuscole e minuscole è disabilitato e sono presenti più utenti Zabbix con nomi utente simili (ad esempio, Admin e admin), l'accesso per tali utenti verrà sempre negato con il seguente messaggio di errore: "Authentication failed: supplied credentials are not unique." |
| Configure JIT provisioning | Selezionare questa casella di controllo per visualizzare le opzioni relative al provisioning JIT degli utenti. |
| Group name attribute | Specificare l'attributo del nome del gruppo per il provisioning JIT degli utenti. |
| User name attribute | Specificare l'attributo del nome utente per il provisioning JIT degli utenti. |
| User last name attribute | Specificare l'attributo del cognome dell'utente per il provisioning JIT degli utenti. |
| User group mapping | Associare un pattern di gruppo utente SAML a un gruppo utente e a un ruolo utente di Zabbix. Questo è necessario per determinare quale gruppo/ruolo utente riceverà l'utente provisionato in Zabbix. Fare clic su Add per aggiungere un'associazione. Il campo SAML group pattern supporta i caratteri jolly. Il nome del gruppo deve corrispondere a un gruppo esistente. Se un utente SAML corrisponde a più gruppi utente Zabbix, l'utente diventa membro di tutti. Se un utente corrisponde a più ruoli utente Zabbix, riceverà il livello di autorizzazione più elevato tra essi. |
| Media type mapping | Associare gli attributi SAML dei media dell'utente (ad esempio, email) ai media utente di Zabbix per l'invio delle notifiche. |
| Enable SCIM provisioning | Selezionare questa casella di controllo per abilitare il provisioning SCIM 2.0. |
Vedere esempi di configurazione dei provider di identità SAML per l'accesso e il provisioning degli utenti in Zabbix con:
Note sul provisioning SCIM
Per il provisioning SCIM, specificare il percorso del frontend di Zabbix e aggiungervi api_scim.php dal lato del provider di identità, ad esempio:
https://<path-to-zabbix-ui>/api_scim.php
Gli attributi utente utilizzati in Zabbix (username, nome utente, cognome utente e attributi dei media) devono essere aggiunti come attributi personalizzati e, se necessario, lo spazio dei nomi esterno deve essere uguale allo schema utente: urn:ietf:params:scim:schemas:core:2.0:User.
Impostazioni avanzate
Parametri SAML aggiuntivi possono essere configurati nel file di configurazione del frontend di Zabbix (zabbix.conf.php):
- $SSO['SP_KEY'] = '<percorso del file della chiave privata SP>';
- $SSO['SP_CERT'] = '<percorso del file del certificato SP>';
- $SSO['IDP_CERT'] = '<percorso del file del certificato IDP>';
- $SSO['SETTINGS']
L'array $SSO['SETTINGS'] deve seguire la stessa struttura prevista dalla libreria SAML PHP Toolkit (fornita con Zabbix).
Per una descrizione completa delle opzioni di configurazione disponibili, fare riferimento alla documentazione ufficiale della libreria.
Solo le seguenti opzioni possono essere impostate come parte di $SSO['SETTINGS']:
- strict
- baseurl
- compress
- contactPerson
- organization
- sp (solo le opzioni specificate in questo elenco)
- attributeConsumingService
- x509certNew
- idp (solo le opzioni specificate in questo elenco)
- singleLogoutService (solo un'opzione)
- responseUrl
- certFingerprint
- certFingerprintAlgorithm
- x509certMulti
- singleLogoutService (solo un'opzione)
- security (solo le opzioni specificate in questo elenco)
- signMetadata
- wantNameId
- requestedAuthnContext
- requestedAuthnContextComparison
- wantXMLValidation
- relaxDestinationValidation
- destinationStrictlyMatches
- rejectUnsolicitedResponsesWithInResponseTo
- signatureAlgorithm
- digestAlgorithm
- lowercaseUrlencoding
Tutte le altre opzioni verranno prese dal database e non potranno essere sovrascritte. L'opzione debug verrà ignorata.
Inoltre, se la UI di Zabbix si trova dietro un proxy o un load balancer, può essere utilizzata l'opzione personalizzata use_proxy_headers:
- false (predefinito) - ignora l'opzione;
- true - utilizza gli header HTTP X-Forwarded-* per costruire l'URL di base.
Se si utilizza un load balancer per connettersi all'istanza Zabbix, dove il load balancer usa TLS/SSL e Zabbix no, è necessario indicare i parametri 'baseurl', 'strict' e 'use_proxy_headers' come segue:
$SSO['SETTINGS'] = [
'strict' => false,
'baseurl' => 'https://zabbix.example.com/zabbix/',
'use_proxy_headers' => true
];
Esempio di configurazione:
$SSO['SETTINGS'] = [
'security' => [
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
// ...
],
// ...
];
Configurazione del frontend con Kerberos/ADFS
Il file di configurazione del frontend di Zabbix (zabbix.conf.php) può essere utilizzato per configurare l'SSO con autenticazione Kerberos e ADFS:
$SSO['SETTINGS'] = [
'security' => [
'requestedAuthnContext' => [
'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
],
'requestedAuthnContextComparison' => 'exact'
]
];
In questo caso, nel campo SP name ID della configurazione SAML impostare:
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified