3 SAML

Przegląd

SAML 2.0 uwierzytelnianie można użyć do logowania się do Zabbix.

Jeśli logowanie SAML jest skonfigurowane bez aprowizacji użytkowników JIT, użytkownik musi już istnieć w Zabbix; hasło użytkownika Zabbix nie jest używane do uwierzytelniania. Po pomyślnym uwierzytelnieniu SAML Zabbix dopasowuje atrybut nazwy użytkownika otrzymany z SAML do istniejącej lokalnej nazwy użytkownika Zabbix.

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 w momencie, gdy użytkownik zaloguje się do Zabbix po raz pierwszy.

Jeśli JIT provisioning jest włączony, w zakładce Authentication należy określić grupę użytkowników dla zdeprowizjonowanych 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 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, 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 zdeprowizjonowanych użytkowników.

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

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

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

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 powinien być ustawiony na <path_to_zabbix_ui>/index_sso.php?acs
  • Single Logout URL powinien być ustawiony 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

Jeśli chcesz używać uwierzytelniania SAML w frontendzie, musisz zainstalować php-openssl.

Aby używać uwierzytelniania SAML, należy skonfigurować Zabbix w następujący sposób:

1. Klucz prywatny i certyfikat należy przechowywać w katalogu ui/conf/certs/, chyba że podano niestandardowe ścieżki w pliku zabbix.conf.php.

Domyślnie Zabbix będzie szukać plików 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 Zabbix. Możliwe jest jednak określenie dodatkowych ustawień w pliku konfiguracyjnym.

Parametry konfiguracji dostępne we frontendzie Zabbix:

Parametr Opis
Włącz uwierzytelnianie SAML Zaznacz pole wyboru, aby włączyć uwierzytelnianie SAML.
Włącz aprowizację JIT Zaznacz pole wyboru, aby włączyć aprowizację użytkowników JIT.
ID encji IDP Unikatowy identyfikator encji w dostawcy tożsamości SAML.
URL usługi SSO Adres URL, na który użytkownicy zostaną przekierowani podczas logowania.
URL usługi SLO Adres URL, na który użytkownicy zostaną przekierowani podczas wylogowywania. Jeśli pozostawisz to pole puste, usługa SLO nie będzie używana.
Atrybut nazwy użytkownika Atrybut SAML 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
ID encji SP Unikatowy identyfikator dostawcy usług (jeśli nie pasuje, operacja zostanie odrzucona).
Można określić adres URL lub dowolny ciąg danych.
Format ID nazwy SP Żądanie określonego formatu ID nazwy 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
Podpisz Zaznacz pola wyboru, aby wybrać encje, dla których podpis SAML powinien być włączony:
Komunikaty
Asercje
Żądania AuthN
Żądania wylogowania
Odpowiedzi wylogowania
Szyfruj Zaznacz pola wyboru, aby wybrać encje, dla których szyfrowanie SAML powinno być włączone:
ID nazwy
Asercje
Logowanie z uwzględnieniem wielkości liter Usuń zaznaczenie pola wyboru, aby wyłączyć rozróżnianie wielkości liter podczas logowania za pomocą nazw użytkowników (domyślnie włączone).
Wyłączenie rozróżniania wielkości liter podczas logowania umożliwia na przykład zalogowanie się jako "admin", nawet jeśli użytkownik Zabbix ma nazwę "Admin" lub "ADMIN".
Należy pamiętać, że jeśli rozróżnianie wielkości liter podczas logowania jest wyłączone i istnieje wielu użytkowników Zabbix 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."
Konfiguruj aprowizację JIT Zaznacz to pole wyboru, aby wyświetlić opcje związane z aprowizacją użytkowników JIT.
Atrybut nazwy grupy Określ atrybut nazwy grupy na potrzeby aprowizacji użytkowników JIT.
Atrybut nazwy użytkownika Określ atrybut nazwy użytkownika na potrzeby aprowizacji użytkowników JIT.
Atrybut nazwiska użytkownika Określ atrybut nazwiska użytkownika na potrzeby aprowizacji użytkowników JIT.
Mapowanie grup użytkowników Mapuj wzorzec grupy użytkownika SAML na grupę użytkowników Zabbix i rolę użytkownika.
Jest to wymagane do określenia, jaką grupę użytkowników i rolę otrzyma aprowizowany użytkownik w Zabbix.
Kliknij Dodaj, aby dodać mapowanie.
Pole Wzorzec grupy SAML obsługuje symbole wieloznaczne. Nazwa grupy musi odpowiadać istniejącej grupie.
Jeśli użytkownik SAML pasuje do kilku grup użytkowników Zabbix, staje 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.
Mapowanie typów mediów Mapuj atrybuty mediów użytkownika SAML (np. adres e-mail) na media użytkownika Zabbix w celu wysyłania powiadomień.
Włącz aprowizację SCIM Zaznacz to pole wyboru, aby włączyć aprowizację SCIM 2.0.

Przykłady konfigurowania dostawców tożsamości SAML na potrzeby logowania i aprowizacji użytkowników w Zabbix znajdziesz tutaj:

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 konfiguracji 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 konfiguracji SAML w polu SP name ID ustaw:

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