SAML-авторизация в Zabbix через Keycloak
Keycloak – продукт с открытым кодом для реализации single sign-on с возможностью управления доступом, нацелен на современные применения и сервисы. По состоянию на 2018 год, этот проект сообщества JBoss находится под управлением Red Hat которые используют его как upstream проект для своего продукта RH-SSO
Интеграция Zabbix и Keycloak по протоколу SAML 2.0 производилась со следующими версиями ПО:
- Zabbix 6.2
- Keycloak 19.0.1
Исходные данные: у нас уже создана новая область (Realm), и в ней настроена федерация со службой каталогов (MS Active Directory или FreeIPA)
Настройка Keycloak
Создаем клиента для Zabbix: переходим в раздел Clients и создаем нового клиента (Create client)
1
2
3
4
Create client:
Client type: SAML
Client ID: zabbix
Name: Zabbix
Сохраняемся, редактируем остальные настройки
Tab Settings > Access settings
1
2
3
4
5
6
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
1
2
3
4
SAML capabilities:
Name ID format: username
Force POST binding: On
Include AuthnStatement: On
Tab Settings > Signature and Encryption, Login settings, Logout settings
1
2
3
4
5
6
7
8
9
10
11
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
1
2
3
4
5
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
1
2
3
4
5
6
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
1
2
3
4
5
6
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
1
2
3
4
5
6
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
1
2
3
4
5
6
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
1
2
3
4
5
6
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
1
2
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
1
2
Role list
Single Role Attribute: On
Копируем открытый ключ:
Realm settings > Tab keys > RS256 > Certificate
так же этот ключ можно получить по ссылке:
1
2
https://<keycloak>/auth/realms/<myrealm>/protocol/saml/descriptor
<ds:X509Certificate> ... </ds:X509Certificate>
Настройка Zabbix в консоли
Создаем сертификат idp.crt
1
2
3
4
5
6
$ cd /usr/share/zabbix/conf/certs
$ sudo nano idp.crt
-----BEGIN CERTIFICATE-----
сюда втавляем скопированный сертификат
-----END CERTIFICATE-----
Создаем самоподписанные сертификат sp.crt
и ключ sp.key
1
$ sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout sp.key -out sp.crt -days 3650 -nodes -subj '/CN=My Zabbix Server'
Меняем права и владельца на сертификаты и ключ
1
2
3
4
5
6
7
# Для Debian
$ sudo chown www-data. *
$ sudo chmod 600 *
# Для Centos
$ sudo chown nginx. *
$ sudo chmod 755 *
Редактируем конфиг zabbix.conf.php
, правим в самом конце файла
1
2
3
4
5
6
$ 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
1
2
3
4
5
6
7
8
9
10
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 надо добавить пользователей.