Site icon IT Draft

SAML-авторизация в Zabbix через Keycloak

SAML-авторизация в Zabbix через Keycloak 1

Zabbix + Keycloak + SAML 2.0

Keycloak – продукт с открытым кодом для реализации single sign-on с возможностью управления доступом, нацелен на современные применения и сервисы. По состоянию на 2018 год, этот проект сообщества JBoss находится под управлением Red Hat которые используют его как upstream проект для своего продукта RH-SSO

Интеграция Zabbix и Keycloak по протоколу SAML 2.0 производилась со следующими версиями ПО:

Исходные данные: у нас уже создана новая область (Realm), и в ней настроена федерация со службой каталогов (MS Active Directory или FreeIPA)

Настройка Keycloak

Создаем клиента для Zabbix: переходим в раздел Clients и создаем нового клиента (Create client)

Create client:
Client type: SAML
Client ID: zabbix
Name: Zabbix

Сохраняемся, редактируем остальные настройки

Selectel — ведущий провайдер облачной инфраструктуры и услуг дата-центров

Компания занимает лидирующие позиции на рынке на рынке выделенных серверов и приватных облаков, и входит в топ-3 крупнейших операторов дата-центров в России.


Tab Settings > Access settings

Access settings:
Root URL: https://zabbix.itdraft.ru/
Home URL: https://zabbix.itdraft.ru/
Valid redirect URIs: https://zabbix.itdraft.ru/*
IDP-Initiated SSO URL name: zabbix.itdraft.ru   # Ниже появится URL, который нам понадобится для настройки Zabbix
Master SAML Processing URL: https://zabbix.itdraft.ru/index_sso.php?acs

Tab Settings > SAML capabilities

SAML capabilities:
Name ID format: username
Force POST binding: On
Include AuthnStatement: On

Tab Settings > Signature and Encryption, Login settings, Logout settings

Signature and Encryption:
Sign documents: On
Signature algorithm: RSA_SHA256
SAML signature key name: KEY_ID
Canonicalization method: EXCLUSIVE

Login settings:
Login theme: keycloak

Logout settings:
Front channel logout: On

Tab Key > Signing keys config

Signing keys config:
Client signature required: Off

Encryption keys config:
Encrypt assertions Off

Tab Client Scope > zabbix-dedicate > Tab Mappers

Add mapper > By configuration > User Property: Name

Mapper type: User Property
Name: name
Property: Username
Friendly Name: Username
SAML Attribute Name: username
SAML Attribute NameFormat: Basic

Add mapper > By configuration > User Property: Email

Mapper type: User Property
Name: email
Property: Email
Friendly Name: Email
SAML Attribute email
SAML Attribute NameFormat: Basic

Add mapper > By configuration > User Property: First Name

Mapper type: User Property
Name: first_name
Property: FirstName
Friendly Name: FirstName
SAML Attribute first_name
SAML Attribute NameFormat: Basic

Add mapper > By configuration > User Property: Last Name

Mapper type: User Property
Name: last_name
Property: LastName
Friendly Name: LastName
SAML Attribute last_name
SAML Attribute NameFormat: Basic

Add mapper > By configuration > Role list: Role list

Mapper type: Role list
Name: role list
Role attribute name: Role
Friendly Name: 
SAML Attribute NameFormat: Basic
Single Role Attribute: On

Итого. Добавленные атрибуты:

Tab Advanced > Fine Grain SAML Endpoint Configuration

Fine Grain SAML Endpoint Configuration:
Assertion Consumer Service Redirect Binding URL: https://zabbix.itdraft.ru/index_sso.php?acs

Продолжаем настройки Keycloak

Client scopes > role_list

role_list > Mappers > role list

Role list
Single Role Attribute: On

Копируем открытый ключ:

Realm settings > Tab keys > RS256 > Certificate

так же этот ключ можно получить по ссылке:

https://<keycloak>/auth/realms/<myrealm>/protocol/saml/descriptor
<ds:X509Certificate> ... </ds:X509Certificate>

Настройка Zabbix в консоли

Создаем сертификат idp.crt

$ cd /usr/share/zabbix/conf/certs
$ sudo nano idp.crt
-----BEGIN CERTIFICATE-----
тут вставляем скопированный сертификат
-----END CERTIFICATE-----

Создаем самоподписанные сертификат sp.crt и ключ sp.key

$ sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout sp.key -out sp.crt -days 3650 -nodes -subj '/CN=My Zabbix Server'

Меняем права и владельца на сертификаты и ключ

# Для Debian
$ sudo chown www-data. *
$ sudo chmod 600 *

# Для Centos
$ sudo chown nginx. *
$ sudo chmod 755 *

Редактируем конфиг zabbix.conf.php, правим в самом конце файла

$ sudo nano /etc/zabbix/web/zabbix.conf.php
...
$SSO['SP_KEY']                  = 'conf/certs/sp.key';
$SSO['SP_CERT']                 = 'conf/certs/sp.crt';
$SSO['IDP_CERT']                = 'conf/certs/idp.crt';
$SSO['SETTINGS']                = [ 'security' => [ 'requestedAuthnContext' => false ] ];

Настройка Zabbix в web-итерфейсе

Переходим в настройки авторизации: Administration> Authentication > SAML settings

Enable SAML authentication: Check
IdP entity ID: https://keycloak.itdraft.ru:8443/realms/myrealm
SSO service URL: https://keycloak.itdraft.ru:8443/realms/myrealm/protocol/saml/clients/zabbix.itdraft.ru # этот параметр сгенерировал keycloak (см. начало статьи)
Username attribute: username # этот атрибут мы задавали в Keycloak (Mappers)
SP entity ID: zabbix # название нашего клиента в Keycloak
SP name ID format: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
+ AuthN requests
+ Logout requests
+ Logout responses
Case-sensitive login: check

Что бы авторизация заработала, в Zabbix надо добавить пользователей.

Exit mobile version