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 utenti
È possibile configurare il provisioning utenti JIT (just-in-time) 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 utenti per gli utenti deprovisionati.
Oltre al provisioning JIT, è anche possibile abilitare e configurare il provisioning SCIM (System for Cross-domain Identity Management), ovvero la gestione continua degli account utente per quegli utenti che sono stati creati tramite il provisioning utenti. Il provisioning SCIM richiede un API token di Zabbix (con permessi di Super admin) per l'autenticazione in Zabbix.
Ad esempio, se un utente viene spostato da un gruppo SAML a un altro, anche l'utente verrà spostato da un gruppo a un altro in Zabbix; se un utente viene rimosso da un gruppo SAML, anche l'utente verrà rimosso dal gruppo in Zabbix e, se non appartiene ad alcun altro gruppo, verrà aggiunto al gruppo utenti per gli utenti deprovisionati.
Se SCIM è abilitato e configurato, un utente SAML verrà provisionato nel momento in cui accede a Zabbix e aggiornato continuamente in base alle modifiche in SAML. Gli utenti SAML già esistenti non verranno provisionati e solo gli utenti provisionati verranno aggiornati. Si noti che solo i supporti validi verranno aggiunti a un utente quando l'utente viene provisionato o aggiornato.
Se SCIM non è abilitato, un utente SAML verrà provisionato (e successivamente aggiornato) nel momento in cui accede a Zabbix.
Se l'autenticazione SAML è abilitata, gli utenti potranno scegliere se accedere localmente o tramite single sign-on SAML. Se viene utilizzato il provisioning JIT, sarà possibile solo il single sign-on.
Configurazione del provider di identità
Per funzionare 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. Fornire la chiave privata SP e i certificati. Per attivare SAML tramite il frontend, è necessario fornire un certificato IdP (incollando il testo o selezionando un file). Se sono selezionate le opzioni Sign o Encrypt, è necessario fornire un certificato SP e una chiave privata SP.
Se in zabbix.conf.php è impostato $SSO['CERT_STORAGE'] = 'database', durante la configurazione SAML è possibile incollare il testo del certificato o caricare il file del certificato nel frontend — non sono richiesti file nel filesystem.
Se in zabbix.conf.php è impostato $SSO['CERT_STORAGE'] = 'file', il certificato deve essere reso disponibile nel filesystem (per impostazione predefinita in ui/conf/certs o nel percorso configurato in zabbix.conf.php) e il frontend non memorizzerà i certificati nel database.
Si noti che se $SSO['CERT_STORAGE'] non è impostato o è commentato, si presume l'archiviazione su file.
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
Il materiale dei certificati può essere importato tramite il frontend incollando il testo o caricando file.
Sebbene in alcuni ambienti siano consentite importazioni non crittografate per comodità, è fortemente consigliato utilizzare un trasporto crittografato (ad esempio, abilitare HTTPS/TLS per il frontend di Zabbix).
Quando i certificati/chiavi SAML sono memorizzati nel database, abilitare TLS/SSL per le connessioni al database per proteggere il traffico tra l'applicazione e il database.
Crittografare i backup del database che possono contenere certificati SAML o chiavi private e limitare l'accesso ai file di backup e alle tabelle del database che memorizzano il materiale SAML.
Limitare i privilegi dell'utente del database al minimo necessario.
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 utenti JIT. |
| IDP entity ID | L'identificatore univoco dell'entità all'interno dell'identity provider 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 dall'identity provider. 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 particolare formato 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 |
| IdP certificate | Contenuto del certificato del service provider (SP) per la configurazione del servizio SAML single sign-on (SSO). |
| SP private key | Contenuto della chiave privata del service provider (SP) per la configurazione del servizio SAML single sign-on (SSO). Fornisce autenticazione sicura e scambio di dati con l'Identity Provider (IdP). |
| SP certificate | Contenuto del certificato del service provider (SP) per la configurazione del servizio SAML single sign-on (SSO). |
| Sign | Selezionare le caselle di controllo per scegliere le entità per cui abilitare la firma SAML: Messages Assertions AuthN requests Logout requests Logout responses |
| Encrypt | Selezionare le caselle di controllo per scegliere le entità per cui abilitare la crittografia SAML: 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). Disabilitando l'accesso con distinzione tra maiuscole e minuscole, è possibile, ad esempio, 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 mostrare le opzioni relative al provisioning utenti JIT. |
| Group name attribute | Specificare l'attributo del nome del gruppo per il provisioning utenti JIT. |
| User name attribute | Specificare l'attributo del nome dell'utente per il provisioning utenti JIT. |
| User last name attribute | Specificare l'attributo del cognome dell'utente per il provisioning utenti JIT. |
| User group mapping | Associare un pattern di gruppo utente SAML a un gruppo utenti Zabbix e a un ruolo utente. Questo è necessario per determinare quale gruppo utenti/ruolo verrà assegnato all'utente sottoposto a provisioning 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 utenti Zabbix, l'utente diventa membro di tutti essi. Se un utente corrisponde a più ruoli utente Zabbix, all'utente verrà assegnato il livello di autorizzazione più elevato tra essi. |
| Media type mapping | Associare gli attributi media SAML dell'utente (ad esempio email) ai media utente di Zabbix per l'invio di notifiche. |
| Enable SCIM provisioning | Selezionare questa casella di controllo per abilitare il provisioning SCIM 2.0. |
Vedere esempi di configurazione degli identity provider SAML per l'accesso e il provisioning 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