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 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 in zabbix.conf.php $SSO['CERT_STORAGE'] = 'database' gesetzt ist, können Sie den Zertifikatstext einfügen oder die Zertifikatsdatei im Frontend während der SAML-Konfiguration hochladen — auf dem Dateisystem sind keine Dateien erforderlich.

Wenn in zabbix.conf.php $SSO['CERT_STORAGE'] = 'file' gesetzt ist, muss das Zertifikat auf dem Dateisystem verfügbar gemacht werden (standardmäßig in ui/conf/certs oder unter dem 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 - private SP-Schlüsseldatei
  • 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 aus Gründen der Benutzerfreundlichkeit in einigen Umgebungen zulässig sind, wird die Verwendung von verschlüsseltem Transport dringend empfohlen (z. B. HTTPS/TLS für das Zabbix-Frontend aktivieren). 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 und auf die Datenbanktabellen, die SAML-Material speichern. 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.

Im Zabbix-Frontend verfügbare Konfigurationsparameter:

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-Bereitstellung von Benutzern zu aktivieren.
IDP entity ID Die eindeutige Entitätskennung innerhalb des SAML-Identitätsanbieters.
SSO service URL Die URL, zu der Benutzer beim Anmelden weitergeleitet werden.
SLO service URL Die URL, zu der Benutzer beim Abmelden weitergeleitet werden. Wenn sie leer gelassen wird, wird der SLO-Dienst nicht verwendet.
Username attribute SAML-Attribut, das beim Anmelden bei Zabbix als Benutzername verwendet wird.
Die Liste der unterstützten Werte wird durch den 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 Dienstanbieters (wenn sie nicht übereinstimmt, wird die Operation abgelehnt).
Es ist möglich, eine URL oder beliebige Zeichenfolge anzugeben.
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 Zertifikats des Dienstanbieters (SP) für die Einrichtung des SAML-Single-Sign-On-(SSO)-Dienstes.
SP private key Inhalt des privaten Schlüssels des Dienstanbieters (SP) für die Einrichtung des SAML-Single-Sign-On-(SSO)-Dienstes. Ermöglicht sichere Authentifizierung und Datenaustausch mit dem Identitätsanbieter (IdP).
SP certificate Inhalt des Zertifikats des Dienstanbieters (SP) für die Einrichtung des SAML-Single-Sign-On-(SSO)-Dienstes.
Sign Aktivieren Sie die Kontrollkästchen, um die 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 die 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 Benutzernamen zu ignorieren (standardmäßig aktiviert).
Wenn die Groß-/Kleinschreibung deaktiviert ist, können Sie sich beispielsweise als "admin" anmelden, auch wenn der Zabbix-Benutzer "Admin" oder "ADMIN" heißt.
Bitte beachten Sie: Wenn die Groß-/Kleinschreibung deaktiviert ist und mehrere Zabbix-Benutzer mit ähnlichen Benutzernamen vorhanden sind (z. B. Admin und admin), wird die Anmeldung für diese Benutzer immer mit der folgenden Fehlermeldung verweigert: "Authentication failed: supplied credentials are not unique."
Configure JIT provisioning Aktivieren Sie dieses Kontrollkästchen, um Optionen für die JIT-Bereitstellung von Benutzern anzuzeigen.
Group name attribute Geben Sie das Attribut für den Gruppennamen für die JIT-Bereitstellung von Benutzern an.
User name attribute Geben Sie das Attribut für den Benutzernamen für die JIT-Bereitstellung von Benutzern an.
User last name attribute Geben Sie das Attribut für den Nachnamen des Benutzers für die JIT-Bereitstellung von Benutzern 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 aller dieser 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.

Beispiele für die Konfiguration von SAML-Identitätsanbietern für die Anmeldung und Benutzerbereitstellung in Zabbix finden Sie hier:

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 Konfigurationsdatei des Zabbix-Frontends (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 dieselbe Struktur aufweisen, die von der Bibliothek SAML PHP Toolkit (mitgeliefert mit Zabbix) erwartet wird. 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'] festgelegt 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.

Zusätzlich kann, wenn sich die Zabbix UI hinter einem Proxy oder Load Balancer befindet, die benutzerdefinierte Option use_proxy_headers verwendet werden:

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

Wenn Sie einen Load Balancer verwenden, um eine Verbindung zur Zabbix-Instanz herzustellen, wobei der Load Balancer TLS/SSL verwendet und Zabbix nicht, müssen Sie die Parameter baseurl, strict und use_proxy_headers wie folgt angeben:

$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'
    ]
]; 

In diesem Fall setzen Sie im SAML-Konfigurationsfeld SP name ID:

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