Пост

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 надо добавить пользователей.

Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.