3 SAML
Przegląd
Uwierzytelnianie SAML 2.0 authentication może być używane do logowania do Zabbix.
Jeśli skonfigurowano tylko logowanie SAML, użytkownik musi również istnieć w Zabbix, jednak jego hasło Zabbix nie będzie używane. Jeśli uwierzytelnienie zakończy się powodzeniem, Zabbix dopasuje lokalną nazwę użytkownika do atrybutu nazwy użytkownika zwróconego przez SAML.
Provisioning użytkowników
Można skonfigurować provisioning użytkowników JIT (just-in-time) dla użytkowników SAML. W takim przypadku nie jest wymagane, aby użytkownik istniał już w Zabbix. Konto użytkownika może zostać utworzone, gdy użytkownik zaloguje się do Zabbix po raz pierwszy.
Jeśli provisioning JIT jest włączony, na karcie Authentication należy określić grupę użytkowników dla użytkowników, którym odebrano provisioning.
Oprócz provisioningu JIT można również włączyć i skonfigurować provisioning SCIM (System for Cross-domain Identity Management) — ciągłe zarządzanie kontami użytkowników dla tych użytkowników, którzy zostali utworzeni przez provisioning użytkowników. Provisioning SCIM wymaga tokena API Zabbix (z uprawnieniami Super admin) do uwierzytelniania w Zabbix.
Na przykład, jeśli użytkownik zostanie przeniesiony z jednej grupy SAML do innej, użytkownik zostanie również przeniesiony z jednej grupy do innej w Zabbix; jeśli użytkownik zostanie usunięty z grupy SAML, użytkownik zostanie również usunięty z grupy w Zabbix i, jeśli nie należy do żadnej innej grupy, zostanie dodany do grupy użytkowników dla użytkowników, którym odebrano provisioning.
Jeśli SCIM jest włączony i skonfigurowany, użytkownik SAML zostanie provisionowany w momencie zalogowania się do Zabbix i będzie stale aktualizowany na podstawie zmian w SAML. Istniejący już użytkownicy SAML nie będą provisionowani, a aktualizowani będą tylko użytkownicy provisionowani. Należy pamiętać, że do użytkownika zostaną dodane tylko prawidłowe media, gdy użytkownik zostanie provisionowany lub zaktualizowany.
Jeśli SCIM nie jest włączony, użytkownik SAML zostanie provisionowany (a później zaktualizowany) w momencie zalogowania się do Zabbix.
Jeśli uwierzytelnianie SAML jest włączone, użytkownicy będą mogli wybrać logowanie lokalne lub przez logowanie jednokrotne SAML. Jeśli używany jest provisioning JIT, możliwe jest tylko logowanie jednokrotne.
Konfigurowanie dostawcy tożsamości
Aby pracować z Zabbix, dostawca tożsamości SAML (onelogin.com, auth0.com, okta.com itp.) musi zostać skonfigurowany w następujący sposób:
- Assertion Consumer URL należy ustawić na
<path_to_zabbix_ui>/index_sso.php?acs - Single Logout URL należy ustawić na
<path_to_zabbix_ui>/index_sso.php?sls
Przykłady <path_to_zabbix_ui>: https://example.com/zabbix/ui,
http://another.example.com/zabbix, http://<any_public_ip_address>/zabbix
Konfigurowanie Zabbix
Wymagana jest instalacja php-openssl, jeśli chcesz używać uwierzytelniania SAML we frontend.
Aby używać uwierzytelniania SAML, Zabbix powinien zostać skonfigurowany w następujący sposób:
1. Dostarcz klucz prywatny SP oraz certyfikaty. Aby aktywować SAML przez frontend, należy dostarczyć certyfikat IdP (wkleić lub wybrać plik). Jeśli wybrane są opcje Sign lub Encrypt, należy dostarczyć certyfikat SP oraz klucz prywatny SP.
Jeśli w zabbix.conf.php ustawiono $SSO['CERT_STORAGE'] = 'database', podczas konfiguracji SAML można wkleić treść certyfikatu lub przesłać plik certyfikatu we frontend — żadne pliki w systemie plików nie są wymagane.
Jeśli w zabbix.conf.php ustawiono $SSO['CERT_STORAGE'] = 'file', certyfikat musi być dostępny w systemie plików (domyślnie w ui/conf/certs lub w ścieżce skonfigurowanej w zabbix.conf.php), a frontend nie będzie przechowywać certyfikatów w bazie danych.
Zwróć uwagę, że jeśli $SSO['CERT_STORAGE'] nie jest ustawione lub jest zakomentowane, zakładane jest przechowywanie w plikach.
Domyślnie Zabbix będzie szukać w następujących lokalizacjach:
- ui/conf/certs/sp.key - plik klucza prywatnego SP
- ui/conf/certs/sp.crt - plik certyfikatu SP
- ui/conf/certs/idp.crt - plik certyfikatu IDP
Materiał certyfikatów może zostać zaimportowany przez frontend przez wklejenie tekstu lub przesłanie plików.
Chociaż niezaszyfrowany import jest dozwolony dla wygody w niektórych środowiskach, zdecydowanie zaleca się używanie szyfrowanego transportu (na przykład włączenie HTTPS/TLS dla frontend Zabbix).
Gdy certyfikaty/klucze SAML są przechowywane w bazie danych, włącz TLS/SSL dla połączeń z bazą danych, aby chronić ruch między aplikacją a bazą danych.
Szyfruj kopie zapasowe bazy danych, które mogą zawierać certyfikaty SAML lub klucze prywatne, oraz ogranicz dostęp do plików kopii zapasowych i do tabel bazy danych przechowujących materiał SAML.
Ogranicz uprawnienia użytkownika bazy danych do niezbędnego minimum.
2. Wszystkie najważniejsze ustawienia można skonfigurować we frontend Zabbix. Możliwe jest jednak określenie dodatkowych ustawień w pliku konfiguracyjnym.

Parametry konfiguracyjne dostępne we frontend Zabbix:
| Parameter | Description |
|---|---|
| Enable SAML authentication | Zaznacz pole wyboru, aby włączyć uwierzytelnianie SAML. |
| Enable JIT provisioning | Zaznacz pole wyboru, aby włączyć aprowizację użytkowników JIT. |
| IDP entity ID | Unikalny identyfikator encji w dostawcy tożsamości SAML. |
| SSO service URL | Adres URL, na który użytkownicy zostaną przekierowani podczas logowania. |
| SLO service URL | Adres URL, na który użytkownicy zostaną przekierowani podczas wylogowywania. Jeśli pozostanie pusty, usługa SLO nie będzie używana. |
| Username attribute | Atrybut SAML, który będzie używany jako nazwa użytkownika podczas logowania do Zabbix. Lista obsługiwanych wartości jest określana przez dostawcę tożsamości. Przykłady: 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 | Unikalny identyfikator dostawcy usług (jeśli nie będzie zgodny, operacja zostanie odrzucona). Można podać adres URL lub dowolny ciąg danych. |
| SP name ID format | Żądanie określonego formatu name ID w odpowiedzi. Przykłady: 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 | Zawartość certyfikatu dostawcy usług (SP) do konfiguracji usługi logowania jednokrotnego SAML (SSO). |
| SP private key | Zawartość klucza prywatnego dostawcy usług (SP) do konfiguracji usługi logowania jednokrotnego SAML (SSO). Zapewnia bezpieczne uwierzytelnianie i wymianę danych z dostawcą tożsamości (IdP). |
| SP certificate | Zawartość certyfikatu dostawcy usług (SP) do konfiguracji usługi logowania jednokrotnego SAML (SSO). |
| Sign | Zaznacz pola wyboru, aby wybrać encje, dla których podpis SAML ma być włączony: Messages Assertions AuthN requests Logout requests Logout responses |
| Encrypt | Zaznacz pola wyboru, aby wybrać encje, dla których szyfrowanie SAML ma być włączone: Name ID Assertions |
| Case-sensitive login | Odznacz pole wyboru, aby wyłączyć rozróżnianie wielkości liter w nazwach użytkowników podczas logowania (domyślnie włączone). Wyłączenie rozróżniania wielkości liter pozwala na przykład zalogować się jako "admin", nawet jeśli użytkownik Zabbix to "Admin" lub "ADMIN". Pamiętaj, że jeśli rozróżnianie wielkości liter jest wyłączone i istnieje wielu użytkowników Zabbix o podobnych nazwach użytkownika (np. Admin i admin), logowanie tych użytkowników będzie zawsze odrzucane z następującym komunikatem o błędzie: "Authentication failed: supplied credentials are not unique." |
| Configure JIT provisioning | Zaznacz to pole wyboru, aby wyświetlić opcje związane z aprowizacją użytkowników JIT. |
| Group name attribute | Określ atrybut nazwy grupy dla aprowizacji użytkowników JIT. |
| User name attribute | Określ atrybut imienia użytkownika dla aprowizacji użytkowników JIT. |
| User last name attribute | Określ atrybut nazwiska użytkownika dla aprowizacji użytkowników JIT. |
| User group mapping | Mapuj wzorzec grupy użytkownika SAML na grupę użytkowników Zabbix i rolę użytkownika. Jest to wymagane do określenia, jaką grupę/rolę użytkownika otrzyma aprowizowany użytkownik w Zabbix. Kliknij Add, aby dodać mapowanie. Pole SAML group pattern obsługuje symbole wieloznaczne. Nazwa grupy musi odpowiadać istniejącej grupie. Jeśli użytkownik SAML pasuje do kilku grup użytkowników Zabbix, użytkownik stanie się członkiem wszystkich tych grup. Jeśli użytkownik pasuje do kilku ról użytkowników Zabbix, otrzyma najwyższy poziom uprawnień spośród nich. |
| Media type mapping | Mapuj atrybuty mediów SAML użytkownika (np. email) na media użytkownika Zabbix do wysyłania powiadomień. |
| Enable SCIM provisioning | Zaznacz to pole wyboru, aby włączyć aprowizację SCIM 2.0. |
Zobacz przykłady konfiguracji dostawców tożsamości SAML do logowania i aprowizacji użytkowników w Zabbix z użyciem:
Uwagi dotyczące provisioningu SCIM
W przypadku provisioningu SCIM należy określić ścieżkę do frontend Zabbix i dodać do niej api_scim.php po stronie dostawcy tożsamości, tj.:
https://<path-to-zabbix-ui>/api_scim.php
Atrybuty użytkownika używane w Zabbix (nazwa użytkownika, imię użytkownika, nazwisko użytkownika oraz atrybuty mediów) należy dodać jako atrybuty niestandardowe, a w razie potrzeby zewnętrzna przestrzeń nazw powinna być taka sama jak w schemacie użytkownika: urn:ietf:params:scim:schemas:core:2.0:User.
Ustawienia zaawansowane
Dodatkowe parametry SAML można skonfigurować w pliku konfiguracyjnym frontend Zabbix (zabbix.conf.php):
- $SSO['SP_KEY'] = '<ścieżka do pliku klucza prywatnego SP>';
- $SSO['SP_CERT'] = '<ścieżka do pliku certyfikatu SP>';
- $SSO['IDP_CERT'] = '<ścieżka do pliku certyfikatu IDP>';
- $SSO['SETTINGS']
Tablica $SSO['SETTINGS'] musi mieć taką samą strukturę, jakiej oczekuje biblioteka SAML PHP Toolkit (dostarczana z Zabbix).
Pełny opis dostępnych opcji konfiguracji znajduje się w oficjalnej dokumentacji biblioteki.
Tylko następujące opcje mogą być ustawiane w ramach $SSO['SETTINGS']:
- strict
- baseurl
- compress
- contactPerson
- organization
- sp (tylko opcje określone na tej liście)
- attributeConsumingService
- x509certNew
- idp (tylko opcje określone na tej liście)
- singleLogoutService (tylko jedna opcja)
- responseUrl
- certFingerprint
- certFingerprintAlgorithm
- x509certMulti
- singleLogoutService (tylko jedna opcja)
- security (tylko opcje określone na tej liście)
- signMetadata
- wantNameId
- requestedAuthnContext
- requestedAuthnContextComparison
- wantXMLValidation
- relaxDestinationValidation
- destinationStrictlyMatches
- rejectUnsolicitedResponsesWithInResponseTo
- signatureAlgorithm
- digestAlgorithm
- lowercaseUrlencoding
Wszystkie pozostałe opcje będą pobierane z bazy danych i nie mogą zostać nadpisane. Opcja debug zostanie zignorowana.
Dodatkowo, jeśli interfejs użytkownika Zabbix znajduje się za proxy lub load balancerem, można użyć niestandardowej opcji use_proxy_headers:
- false (domyślnie) - ignoruj opcję;
- true - używaj nagłówków HTTP X-Forwarded-* do budowania bazowego URL.
Jeśli do połączenia z instancją Zabbix używany jest load balancer, który korzysta z TLS/SSL, a Zabbix nie, należy określić parametry 'baseurl', 'strict' i 'use_proxy_headers' w następujący sposób:
$SSO['SETTINGS'] = [
'strict' => false,
'baseurl' => 'https://zabbix.example.com/zabbix/',
'use_proxy_headers' => true
];
Przykład konfiguracji:
$SSO['SETTINGS'] = [
'security' => [
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
// ...
],
// ...
];
Konfiguracja frontend z Kerberos/ADFS
Plik konfiguracyjny frontend Zabbix (zabbix.conf.php) może być używany do konfiguracji SSO z uwierzytelnianiem Kerberos i ADFS:
$SSO['SETTINGS'] = [
'security' => [
'requestedAuthnContext' => [
'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
],
'requestedAuthnContextComparison' => 'exact'
]
];
W takim przypadku w konfiguracji SAML w polu SP name ID ustaw:
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified