12 SAML iestatīšana ar Microsoft Entra ID

Pārskats

Šajā sadaļā ir sniegtas vadlīnijas vienotās pierakstīšanās un lietotāju nodrošināšanas konfigurēšanai Zabbix no Microsoft Entra ID (iepriekš Microsoft Azure Active Directory), izmantojot SAML 2.0 autentifikāciju.

Microsoft Entra ID konfigurācija

Lietotnes izveide

1. Piesakieties Microsoft Entra administrēšanas centrā vietnē Microsoft Entra ID. Testēšanas nolūkos varat izveidot bezmaksas izmēģinājuma kontu Microsoft Entra ID.

2. Microsoft Entra administrēšanas centrā atlasiet Applications -> Enterprise applications -> New application -> Create your own application.

3. Pievienojiet savas lietotnes nosaukumu un atlasiet opciju Integrate any other application.... Pēc tam noklikšķiniet uz Create.

Vienreizējās pierakstīšanās iestatīšana

1. Savā lietotnes lapā atveriet Set up single sign on un noklikšķiniet uz Get started. Pēc tam atlasiet SAML.

2. Rediģējiet Basic SAML Configuration:

  • Laukā Identifier (Entity ID) norādiet unikālu nosaukumu, lai identificētu jūsu lietotni Microsoft Entra ID, piemēram, zabbix;
  • Laukā Reply URL (Assertion Consumer Service URL) norādiet Zabbix vienreizējās pierakstīšanās galapunktu: https://<path-to-zabbix-ui>/index_sso.php?acs:

Ņemiet vērā, ka ir nepieciešams "https". Lai tas darbotos ar Zabbix, conf/zabbix.conf.php failā ir jāpievieno šāda rinda:

$SSO['SETTINGS'] = ['use_proxy_headers' => true];

3. Rediģējiet Attributes & Claims. Jums jāpievieno visi atribūti, kurus vēlaties nodot Zabbix (user_name, user_lastname, user_email, user_mobile, groups).

Atribūtu nosaukumi ir brīvi izvēlami. Var izmantot dažādus atribūtu nosaukumus, tomēr tiem ir jāsakrīt ar attiecīgā lauka vērtību Zabbix SAML iestatījumos.

  • Noklikšķiniet uz Add new claim, lai pievienotu atribūtu:

  • Noklikšķiniet uz Add a group claim, lai pievienotu atribūtu grupu nodošanai Zabbix:

Šajā claim ir svarīgi, lai Zabbix tiktu nodoti grupu nosaukumi (nevis grupu ID), izmantojot izvēlēto Source attribute. Pretējā gadījumā JIT lietotāju nodrošināšana nedarbosies pareizi.

4. Sadaļā SAML Certificates lejupielādējiet Entra ID nodrošināto Base64 sertifikātu un ievietojiet to Zabbix lietotāja saskarnes instalācijas conf/certs mapē.

Piešķiriet tam 644 atļaujas, izpildot:

chmod 644 entra.cer

Pārliecinieties, ka conf/zabbix.conf.php satur šādu rindu:

$SSO['IDP_CERT'] = 'conf/certs/entra.cer';

5. Izmantojiet vērtības no Set up <your app name> Entra ID, lai konfigurētu Zabbix SAML autentifikāciju (skatiet nākamo sadaļu):

Zabbix konfigurācija

1. Zabbix sadaļā atveriet SAML iestatījumus un aizpildiet konfigurācijas opcijas, pamatojoties uz Entra ID konfigurāciju:

Zabbix field Setup field in Entra ID Sample value
IdP entity ID Microsoft Entra identifier
SSO service URL Login URL
SLO service URL Logout URL
SP entity ID Identifier (Entity ID)
Username attribute Custom attribute (claim) user_email
Group name attribute Custom attribute (claim) groups
User name attribute Custom attribute (claim) user_name
User last name attribute Custom attribute (claim) user_lastname

Ir arī jākonfigurē lietotāju grupu kartēšana. Mediju kartēšana ir neobligāta.

Noklikšķiniet uz Update, lai saglabātu šos iestatījumus.

SCIM lietotāju nodrošināšana

1. Savā Entra ID lietotnes lapā galvenajā izvēlnē atveriet lapu Provisioning. Noklikšķiniet uz Get started un pēc tam atlasiet automātiskās nodrošināšanas režīmu:

  • Laukā Tenant URL norādiet šādu vērtību: https://<path-to-zabbix-ui>/api_scim.php
  • Laukā Secret token ievadiet Zabbix API tokenu ar Super admin tiesībām.
  • Noklikšķiniet uz Test connection, lai pārbaudītu, vai savienojums ir izveidots.

2. Tagad varat pievienot visus atribūtus, kas tiks nodoti ar SCIM uz Zabbix. Lai to izdarītu, noklikšķiniet uz Mappings un pēc tam uz Provision Microsoft Entra ID Users.

Atribūtu kartēšanas saraksta apakšā iespējojiet Show advanced options un pēc tam noklikšķiniet uz Edit attribute list for customappsso.

Atribūtu saraksta apakšā pievienojiet savus atribūtus ar tipu 'String':

Saglabājiet sarakstu.

3. Tagad varat pievienot kartējumus pievienotajiem atribūtiem. Atribūtu kartēšanas saraksta apakšā noklikšķiniet uz Add New Mapping un izveidojiet kartējumus, kā parādīts tālāk:

Kad visi kartējumi ir pievienoti, saglabājiet kartējumu sarakstu.

4. Kā priekšnoteikums lietotāju nodrošināšanai Zabbix, jums ir jākonfigurē lietotāji un grupas Entra ID.

Lai to izdarītu, dodieties uz Microsoft Entra admin center un pēc tam pievienojiet lietotājus/grupas attiecīgajās lapās Users un Groups.

5. Kad lietotāji un grupas ir izveidoti Entra ID, varat doties uz savas lietotnes izvēlni Users and groups un pievienot tos lietotnei.

6. Dodieties uz savas lietotnes izvēlni Provisioning un noklikšķiniet uz Start provisioning, lai lietotāji tiktu nodrošināti Zabbix.

Ņemiet vērā, ka Entra ID lietotāju PATCH pieprasījums neatbalsta izmaiņas vidē.

Autentifikācijas pieprasījuma parakstīšana

Ir iespējams konfigurēt Entra ID, lai validētu parakstu parakstītiem autentifikācijas pieprasījumiem.

Lai tas darbotos, izveidojiet publisko/privāto atslēgu pāri:

openssl req -x509 -newkey rsa:4096 -keyout /usr/share/zabbix/conf/certs/request-sign.key -out /usr/share/zabbix/conf/certs/request-sign.pem -sha256 -days 1825 -nodes

Piešķiriet atļaujas:

chown apache /usr/share/zabbix/conf/certs/request-sign.key 
chmod 400 /usr/share/zabbix/conf/certs/request-sign.key

Atjauniniet Zabbix lietotāja saskarne konfigurāciju, pievienojot:

$SSO['SP_KEY'] = 'conf/certs/request-sign.key';
$SSO['SP_CERT'] = 'conf/certs/request-sign.crt';

Problēmu novēršana

Autentifikācijas problēmas var rasties ar MicroSoft Edge pārlūkprogrammām, ja lietotājs, mēģinot pieteikties Zabbix, izmantojot SAML, jau ir pieteicies ar MicroSoft Edge profilu. Kā šādas problēmas pazīme lietotājs var spēt pieteikties Zabbix, izmantojot MicroSoft Edge privātajā režīmā.

Lai šādā gadījumā izvairītos no autentifikācijas problēmām, var būt nepieciešams Zabbix lietotāja saskarnes konfigurācijas failā (zabbix.conf.php) iestatīt requestedAuthnContext uz "false".

$SSO['SETTINGS'] = [
    'security' => [
        'requestedAuthnContext' => false
    ]
];