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żliwe jest skonfigurowanie JIT (just-in-time) provisioning użytkowników dla użytkowników SAML. W takim przypadku nie jest wymagane, aby użytkownik już istniał w Zabbix. Konto użytkownika może zostać utworzone podczas pierwszego logowania użytkownika do Zabbix.

Jeśli JIT provisioning jest włączony, w zakładce Authentication należy określić grupę użytkowników dla zdeprovisionowanych użytkowników.

Oprócz JIT provisioning można również włączyć i skonfigurować SCIM (System for Cross-domain Identity Management) provisioning - ciągłe zarządzanie kontami użytkowników dla tych użytkowników, którzy zostali utworzeni przez provisioning użytkowników. SCIM provisioning wymaga tokenu Zabbix API token (z uprawnieniami Super admin) do uwierzytelniania w Zabbix.

Na przykład, jeśli użytkownik zostanie przeniesiony z jednej grupy SAML do innej, zostanie również przeniesiony z jednej grupy do innej w Zabbix; jeśli użytkownik zostanie usunięty z grupy SAML, 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 zdeprovisionowanych użytkowników.

Jeśli SCIM jest włączony i skonfigurowany, użytkownik SAML zostanie provisionowany w momencie logowania użytkownika do Zabbix i będzie na bieżąco aktualizowany na podstawie zmian w SAML. Istniejący już użytkownicy SAML nie zostaną provisionowani, a aktualizowani będą tylko provisionowani użytkownicy. Należy pamiętać, że podczas provisionowania lub aktualizacji użytkownika zostaną dodane tylko prawidłowe media.

Jeśli SCIM nie jest włączony, użytkownik SAML zostanie provisionowany (a później aktualizowany) w momencie logowania użytkownika do Zabbix.

Jeśli uwierzytelnianie SAML jest włączone, użytkownicy będą mogli wybrać między logowaniem lokalnym a logowaniem jednokrotnym SAML. Jeśli używany jest JIT provisioning, możliwe jest tylko logowanie jednokrotne.

Konfiguracja dostawcy tożsamości

Aby współ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

Konfiguracja Zabbixa

Wymagane jest zainstalowanie php-openssl, jeśli chcesz korzystać z uwierzytelniania SAML we frontendzie.

Aby korzystać z uwierzytelniania SAML, Zabbix powinien być skonfigurowany w następujący sposób:

1. Klucz prywatny i certyfikat powinny być przechowywane w ui/conf/certs/, chyba że podano niestandardowe ścieżki w zabbix.conf.php.

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

2. Wszystkie najważniejsze ustawienia można skonfigurować we frontendzie Zabbixa. Możliwe jest jednak określenie dodatkowych ustawień w pliku konfiguracyjnym.

Parametry konfiguracyjne dostępne we frontendzie Zabbixa:

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 puste, usługa SLO nie będzie używana.
Username attribute Atrybut SAML używany jako nazwa użytkownika podczas logowania do Zabbixa.
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 Zażądaj 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
Sign Zaznacz pola wyboru, aby wybrać encje, dla których ma być włączony podpis SAML:
Messages
Assertions
AuthN requests
Logout requests
Logout responses
Encrypt Zaznacz pola wyboru, aby wybrać encje, dla których ma być włączone szyfrowanie SAML:
Name ID
Assertions
Case-sensitive login Odznacz pole wyboru, aby wyłączyć rozróżnianie wielkości liter podczas logowania dla nazw użytkowników (domyślnie włączone).
Wyłączenie rozróżniania wielkości liter umożliwia na przykład logowanie jako "admin", nawet jeśli użytkownik Zabbixa to "Admin" lub "ADMIN".
Pamiętaj, że jeśli rozróżnianie wielkości liter jest wyłączone i istnieje wielu użytkowników Zabbixa o podobnych nazwach użytkowników (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żytkowników SAML na grupę użytkowników Zabbixa i rolę użytkownika.
Jest to wymagane do określenia, jaką grupę/rolę otrzyma aprowizowany użytkownik w Zabbiksie.
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 Zabbixa, stanie się członkiem wszystkich z nich.
Jeśli użytkownik pasuje do kilku ról użytkowników Zabbixa, otrzyma najwyższy poziom uprawnień spośród nich.
Media type mapping Mapuj atrybuty mediów SAML użytkownika (np. e-mail) na media użytkownika Zabbixa do wysyłania powiadomień.
Enable SCIM provisioning Zaznacz to pole wyboru, aby włączyć aprowizację SCIM 2.0.

Przykłady konfiguracji dostawców tożsamości SAML do logowania i aprowizacji użytkowników w Zabbiksie:

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
  • 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 Zabbixa (zabbix.conf.php) można wykorzystać do skonfigurowania 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 polu konfiguracji SAML SP name ID ustaw:

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