3 SAML

Übersicht

Die SAML 2.0-Authentifizierung kann verwendet werden, um sich bei Zabbix anzumelden.

Wenn nur die SAML-Anmeldung konfiguriert ist, muss der Benutzer auch in Zabbix vorhanden sein, sein Zabbix-Passwort wird jedoch nicht verwendet. Wenn die Authentifizierung erfolgreich ist, gleicht Zabbix einen lokalen Benutzernamen mit dem von SAML zurückgegebenen Benutzernamenattribut ab.

Benutzerbereitstellung

Es ist möglich, JIT-Benutzerbereitstellung (just-in-time) für SAML-Benutzer zu konfigurieren. In diesem Fall ist es nicht erforderlich, dass ein Benutzer bereits in Zabbix existiert. Das Benutzerkonto kann erstellt werden, wenn sich der Benutzer zum ersten Mal bei Zabbix anmeldet.

Wenn die JIT-Bereitstellung aktiviert ist, muss im Reiter Authentifizierung eine Benutzergruppe für deprovisionierte Benutzer angegeben werden.

Zusätzlich zur JIT-Bereitstellung ist es auch möglich, die SCIM-Bereitstellung (System for Cross-domain Identity Management) zu aktivieren und zu konfigurieren – eine kontinuierliche Benutzerkontoverwaltung für Benutzer, die durch die Benutzerbereitstellung erstellt wurden. Die SCIM-Bereitstellung erfordert zur Authentifizierung bei Zabbix ein Zabbix-API-Token (mit Super-Admin-Berechtigungen).

Wenn ein Benutzer beispielsweise von einer SAML-Gruppe in eine andere verschoben wird, wird der Benutzer auch in Zabbix von einer Gruppe in eine andere verschoben; wenn ein Benutzer aus einer SAML-Gruppe entfernt wird, wird der Benutzer auch in Zabbix aus der Gruppe entfernt und, falls er keiner anderen Gruppe angehört, der Benutzergruppe für deprovisionierte Benutzer hinzugefügt.

Wenn SCIM aktiviert und konfiguriert ist, wird ein SAML-Benutzer in dem Moment bereitgestellt, in dem sich der Benutzer bei Zabbix anmeldet, und anschließend kontinuierlich auf Grundlage von Änderungen in SAML aktualisiert. Bereits vorhandene SAML-Benutzer werden nicht bereitgestellt, und nur bereitgestellte Benutzer werden aktualisiert. Beachten Sie, dass einem Benutzer bei der Bereitstellung oder Aktualisierung nur gültige Medien hinzugefügt werden.

Wenn SCIM nicht aktiviert ist, wird ein SAML-Benutzer in dem Moment bereitgestellt (und später aktualisiert), in dem sich der Benutzer bei Zabbix anmeldet.

Wenn die SAML-Authentifizierung aktiviert ist, können Benutzer zwischen lokaler Anmeldung und Anmeldung über SAML Single Sign-on wählen. Wenn JIT-Bereitstellung verwendet wird, ist nur Single Sign-on möglich.

Einrichten des Identitätsanbieters

Um mit Zabbix zu arbeiten, muss ein SAML-Identitätsanbieter (onelogin.com, auth0.com, okta.com usw.) wie folgt konfiguriert werden:

  • Assertion Consumer URL sollte auf <path_to_zabbix_ui>/index_sso.php?acs gesetzt werden
  • Single Logout URL sollte auf <path_to_zabbix_ui>/index_sso.php?sls gesetzt werden

Beispiele für <path_to_zabbix_ui>: https://example.com/zabbix/ui, http://another.example.com/zabbix, http://<any_public_ip_address>/zabbix

Einrichten von Zabbix

Es ist erforderlich, php-openssl zu installieren, wenn Sie die SAML-Authentifizierung im Frontend verwenden möchten.

Um die SAML-Authentifizierung zu verwenden, sollte Zabbix wie folgt konfiguriert werden:

1. Stellen Sie den privaten SP-Schlüssel und die Zertifikate bereit. Ein IdP-Zertifikat muss bereitgestellt werden (einfügen oder Datei auswählen), um SAML über das Frontend zu aktivieren. Ein SP-Zertifikat und ein privater SP-Schlüssel müssen bereitgestellt werden, wenn die Optionen Sign oder Encrypt ausgewählt sind.

Wenn $SSO['CERT_STORAGE'] = 'database' in zabbix.conf.php gesetzt ist, können Sie den Zertifikatstext einfügen oder die Zertifikatsdatei während der SAML-Konfiguration im Frontend hochladen — Dateien im Dateisystem sind nicht erforderlich.

Wenn $SSO['CERT_STORAGE'] = 'file' in zabbix.conf.php gesetzt ist, muss das Zertifikat im Dateisystem verfügbar gemacht werden (standardmäßig in ui/conf/certs oder im in zabbix.conf.php konfigurierten Pfad), und das Frontend speichert keine Zertifikate in der Datenbank. Beachten Sie, dass Dateispeicherung angenommen wird, wenn $SSO['CERT_STORAGE'] nicht gesetzt oder auskommentiert ist.

Standardmäßig sucht Zabbix an den folgenden Speicherorten:

  • ui/conf/certs/sp.key - Datei mit privatem SP-Schlüssel
  • ui/conf/certs/sp.crt - SP-Zertifikatsdatei
  • ui/conf/certs/idp.crt - IDP-Zertifikatsdatei

Zertifikatsmaterial kann über das Frontend importiert werden, indem Text eingefügt oder Dateien hochgeladen werden. Obwohl unverschlüsselte Importe der Einfachheit halber in einigen Umgebungen zulässig sind, wird die Verwendung von verschlüsselter Übertragung dringend empfohlen (aktivieren Sie beispielsweise HTTPS/TLS für das Zabbix-Frontend). Wenn SAML-Zertifikate/-Schlüssel in der Datenbank gespeichert werden, aktivieren Sie TLS/SSL für Datenbankverbindungen, um den Datenverkehr zwischen der Anwendung und der Datenbank zu schützen.
Verschlüsseln Sie Datenbanksicherungen, die SAML-Zertifikate oder private Schlüssel enthalten können, und beschränken Sie den Zugriff auf Sicherungsdateien sowie auf die Datenbanktabellen, in denen SAML-Material gespeichert wird. Beschränken Sie die Berechtigungen des Datenbankbenutzers auf das notwendige Minimum.

2. Alle wichtigsten Einstellungen können im Zabbix-Frontend konfiguriert werden. Es ist jedoch möglich, zusätzliche Einstellungen in der Konfigurationsdatei anzugeben.

Konfigurationsparameter, die im Zabbix-Frontend verfügbar sind:

Parameter Beschreibung
Enable SAML authentication Aktivieren Sie das Kontrollkästchen, um die SAML-Authentifizierung zu aktivieren.
Enable JIT provisioning Aktivieren Sie das Kontrollkästchen, um die JIT-Benutzerbereitstellung zu aktivieren.
IDP entity ID Die eindeutige Entitätskennung innerhalb des SAML-Identitätsanbieters.
SSO service URL Die URL, zu der Benutzer bei der Anmeldung weitergeleitet werden.
SLO service URL Die URL, zu der Benutzer bei der Abmeldung weitergeleitet werden. Wenn sie leer bleibt, wird der SLO-Dienst nicht verwendet.
Username attribute SAML-Attribut, das bei der Anmeldung an Zabbix als Benutzername verwendet wird.
Die Liste der unterstützten Werte wird vom Identitätsanbieter bestimmt.

Beispiele:
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 Die eindeutige Kennung des Service Providers (wenn sie nicht übereinstimmt, wird der Vorgang abgelehnt).
Es kann eine URL oder eine beliebige Zeichenfolge angegeben werden.
SP name ID format Fordern Sie ein bestimmtes Name-ID-Format in der Antwort an.

Beispiele:
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 Inhalt des Service-Provider-(SP-)Zertifikats für die Einrichtung des SAML-Single-Sign-On-(SSO-)Dienstes.
SP private key Inhalt des privaten Schlüssels des Service Providers (SP) für die Einrichtung des SAML-Single-Sign-On-(SSO-)Dienstes. Ermöglicht sichere Authentifizierung und sicheren Datenaustausch mit dem Identitätsanbieter (IdP).
SP certificate Inhalt des Service-Provider-(SP-)Zertifikats für die Einrichtung des SAML-Single-Sign-On-(SSO-)Dienstes.
Sign Aktivieren Sie die Kontrollkästchen, um Entitäten auszuwählen, für die die SAML-Signatur aktiviert werden soll:
Messages
Assertions
AuthN requests
Logout requests
Logout responses
Encrypt Aktivieren Sie die Kontrollkästchen, um Entitäten auszuwählen, für die die SAML-Verschlüsselung aktiviert werden soll:
Name ID
Assertions
Case-sensitive login Deaktivieren Sie das Kontrollkästchen, um die Groß-/Kleinschreibung bei der Anmeldung für Benutzernamen zu deaktivieren (standardmäßig aktiviert).
Durch das Deaktivieren der Groß-/Kleinschreibung bei der Anmeldung ist es beispielsweise möglich, sich als "admin" anzumelden, auch wenn der Zabbix-Benutzer "Admin" oder "ADMIN" ist.
Bitte beachten Sie, dass bei deaktivierter Groß-/Kleinschreibung und mehreren Zabbix-Benutzern mit ähnlichen Benutzernamen (z. B. Admin und admin) die Anmeldung für diese Benutzer immer mit der folgenden Fehlermeldung verweigert wird: "Authentication failed: supplied credentials are not unique."
Configure JIT provisioning Aktivieren Sie dieses Kontrollkästchen, um Optionen für die JIT-Benutzerbereitstellung anzuzeigen.
Group name attribute Geben Sie das Gruppenname-Attribut für die JIT-Benutzerbereitstellung an.
User name attribute Geben Sie das Benutzernamen-Attribut für die JIT-Benutzerbereitstellung an.
User last name attribute Geben Sie das Nachnamen-Attribut des Benutzers für die JIT-Benutzerbereitstellung an.
User group mapping Ordnen Sie ein SAML-Benutzergruppenmuster einer Zabbix-Benutzergruppe und einer Benutzerrolle zu.
Dies ist erforderlich, um festzulegen, welche Benutzergruppe/Rolle der bereitgestellte Benutzer in Zabbix erhält.
Klicken Sie auf Add, um eine Zuordnung hinzuzufügen.
Das Feld SAML group pattern unterstützt Platzhalter. Der Gruppenname muss mit einer vorhandenen Gruppe übereinstimmen.
Wenn ein SAML-Benutzer mehreren Zabbix-Benutzergruppen entspricht, wird der Benutzer Mitglied in allen diesen Gruppen.
Wenn ein Benutzer mehreren Zabbix-Benutzerrollen entspricht, erhält der Benutzer die höchste Berechtigungsstufe unter ihnen.
Media type mapping Ordnen Sie die SAML-Medienattribute des Benutzers (z. B. E-Mail) den Zabbix-Benutzermedien für den Versand von Benachrichtigungen zu.
Enable SCIM provisioning Aktivieren Sie dieses Kontrollkästchen, um die SCIM-2.0-Bereitstellung zu aktivieren.

Siehe Beispiele für die Konfiguration von SAML-Identitätsanbietern für die Anmeldung und Benutzerbereitstellung in Zabbix mit:

Hinweise zur SCIM-Bereitstellung

Geben Sie für die SCIM-Bereitstellung auf der Seite des Identitätsanbieters den Pfad zum Zabbix Frontend an und hängen Sie api_scim.php daran an, d. h.:

https://<path-to-zabbix-ui>/api_scim.php

Benutzerattribute, die in Zabbix verwendet werden (Benutzername, Vorname des Benutzers, Nachname des Benutzers und Medienattribute), müssen als benutzerdefinierte Attribute hinzugefügt werden. Falls erforderlich, sollte der externe Namespace mit dem Benutzerschema übereinstimmen: urn:ietf:params:scim:schemas:core:2.0:User.

Erweiterte Einstellungen

Zusätzliche SAML-Parameter können in der Zabbix-Frontend-Konfigurationsdatei (zabbix.conf.php) konfiguriert werden:

  • $SSO['SP_KEY'] = '<Pfad zur privaten SP-Schlüsseldatei>';
  • $SSO['SP_CERT'] = '<Pfad zur SP-Zertifikatsdatei>';
  • $SSO['IDP_CERT'] = '<Pfad zur IDP-Zertifikatsdatei>';
  • $SSO['SETTINGS']

Das Array $SSO['SETTINGS'] muss derselben Struktur folgen, die von der Bibliothek SAML PHP Toolkit erwartet wird (mitgeliefert mit Zabbix). Eine vollständige Beschreibung der verfügbaren Konfigurationsoptionen finden Sie in der offiziellen Bibliotheksdokumentation.

Nur die folgenden Optionen können als Teil von $SSO['SETTINGS'] gesetzt werden:

  • strict
  • baseurl
  • compress
  • contactPerson
  • organization
  • sp (nur die in dieser Liste angegebenen Optionen)
    • attributeConsumingService
    • x509certNew
  • idp (nur die in dieser Liste angegebenen Optionen)
    • singleLogoutService (nur eine Option)
      • responseUrl
    • certFingerprint
    • certFingerprintAlgorithm
    • x509certMulti
  • security (nur die in dieser Liste angegebenen Optionen)
    • signMetadata
    • wantNameId
    • requestedAuthnContext
    • requestedAuthnContextComparison
    • wantXMLValidation
    • relaxDestinationValidation
    • destinationStrictlyMatches
    • rejectUnsolicitedResponsesWithInResponseTo
    • signatureAlgorithm
    • digestAlgorithm
    • lowercaseUrlencoding

Alle anderen Optionen werden aus der Datenbank übernommen und können nicht überschrieben werden. Die Option debug wird ignoriert.

Wenn sich die Zabbix UI außerdem hinter einem Proxy oder Load Balancer befindet, kann die benutzerdefinierte Option use_proxy_headers verwendet werden:

  • false (Standard) - Option ignorieren;
  • true - X-Forwarded-*-HTTP-Header zum Erstellen der Basis-URL verwenden.

Wenn ein Load Balancer für die Verbindung zur Zabbix-Instanz verwendet wird, wobei der Load Balancer TLS/SSL verwendet und Zabbix nicht, müssen die Parameter 'baseurl', 'strict' und 'use_proxy_headers' wie folgt angegeben werden:

$SSO['SETTINGS'] = [
    'strict' => false,
    'baseurl' => 'https://zabbix.example.com/zabbix/',
    'use_proxy_headers' => true
];

Konfigurationsbeispiel:

$SSO['SETTINGS'] = [
    'security' => [
        'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
        'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
        // ...
    ],
    // ...
];
Frontend-Konfiguration mit Kerberos/ADFS

Die Zabbix-Frontend-Konfigurationsdatei (zabbix.conf.php) kann verwendet werden, um SSO mit Kerberos-Authentifizierung und ADFS zu konfigurieren:

$SSO['SETTINGS'] = [
    'security' => [
        'requestedAuthnContext' => [
            'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
        ],
        'requestedAuthnContextComparison' => 'exact'
    ]
]; 

Setzen Sie in diesem Fall im SAML-Konfigurationsfeld SP name ID:

urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified