Подробный гайд: Настройка SSO (Keycloak / ADFS) для GLPI + Wazuh
Важно:
Wazuh поддерживает SSO только для веб-интерфейса (Dashboard). Агенты, Manager и Indexer аутентифицируются по-прежнему через внутренние учётные записи или сертификаты. GLPI поддерживает SSO через плагины OIDC/SAML. В гайде используется OIDC как современный и наиболее стабильный протокол для обеих систем.
Предварительные требования
| Компонент | Минимальная версия | Примечание |
|---|---|---|
| GLPI | 10.0.x | PHP 8.1+, Nginx/Apache |
| Wazuh | 4.7.x+ | Indexer + Dashboard на базе OpenSearch 2.x |
| Keycloak | 22.x+ (Quarkus) | Или ADFS 2016/2019/2022 |
| Инфраструктура | HTTPS на всех доменах, NTP синхронизация, DNS | Порты: 443, 5601, 8080 (Keycloak) |
Рекомендация: Всегда делайте бэкапы конфигов и БД перед изменениями. Тестируйте в staging-окружении.
Часть 1: Настройка Keycloak (OIDC IdP)
1.1 Создание Realm (если нет)
- Зайдите в Keycloak Admin Console →
Realm settings→Create Realm - Имя:
company-it(или аналогичное)
1.2 Создание Client для GLPI
Clients→Create client- Client ID:
glpi-sso - Client protocol:
OpenID Connect - Client authentication:
ON(confidential) - Valid redirect URIs:
glpi.example.com/plugins/oidc/callback.php - Web Origins:
glpi.example.com - Сохраните, перейдите во вкладку
Credentials→ скопируйтеClient Secret
1.3 Создание Client для Wazuh Dashboard
Clients→Create client- Client ID:
wazuh-sso - Client protocol:
OpenID Connect - Client authentication:
ON - Valid redirect URIs:
wazuh.example.com:5601/auth/openid/login - Web Origins:
wazuh.example.com:5601 - Сохраните, скопируйте
Client Secret
1.4 Настройка Claims (группы и профиль)
Для обоих клиентов перейдите в Client scopes → openid или создайте кастомный scope:
Добавьте mapper Group Membership:
- Name:
groups-mapper - Token Claim Name:
groups - Claim JSON Type:
String - Add to ID token:
ON, Add to access token:ON - Убедитесь, что в
Client scopes→openidвключенemail,profile,groups
1.5 Экспорт метаданных
Issuer URL (потребуется позже):
`keycloak.example.com/realms/company-it`
Well-known endpoint:
`keycloak.example.com/realms/company-it/.well-known/openid-configuration`
Часть 2: Интеграция GLPI с Keycloak (OIDC)
2.1 Установка плагина
cd /var/www/glpi/plugins
wget https://github.com/pluginsGLPI/oidc/releases/latest/download/oidc-<версия>.tar.gz
tar xzf oidc-*.tar.gz
chown -R www-www-data oidc/
- В GLPI:
Настройка→Плагины→ Установить и активироватьOIDC Authentication - Перейдите в
Настройка→Аутентификация→OIDC
2.2 Настройка провайдера
| Параметр | Значение |
|---|---|
| Provider name | Keycloak |
| Issuer URL | keycloak.example.com/realms/company-it |
| Client ID | glpi-sso |
| Client Secret | <из Keycloak> |
| Scopes | openid profile email groups |
| User identifier | preferred_username или email |
| Auto-create users | ON |
| Synchronize groups | ON |
| Group claim | groups |
2.3 Маппинг прав
- В GLPI:
Администрирование→Профили→ назначьте права на группы, приходящие из Keycloak - При первом входе GLPI автоматически создаст пользователя и привяжет к локальному профилю по группе
2.4 Включение SSO по умолчанию
Настройка→Общие→Аутентификация→ установитеOIDCкак основной метод- Убедитесь, что
files/_log/writable для www-data
Часть 3: Интеграция Wazuh Dashboard с Keycloak (OIDC)
Wazuh использует OpenSearch Security для аутентификации. Настройка требует прав
root.
3.1 Подготовка сертификатов
Убедитесь, что у Dashboard есть доверенный CA для Keycloak:
cp /path/to/keycloak-ca.pem /etc/wazuh-dashboard/certs/keycloak-ca.pem
chown wazuh-dashboard:wazuh-dashboard /etc/wazuh-dashboard/certs/keycloak-ca.pem
chmod 644 /etc/wazuh-dashboard/certs/keycloak-ca.pem
3.2 Настройка opensearch_dashboards.yml
Файл: /etc/wazuh-dashboard/opensearch_dashboards.yml
opensearch_security.auth.type: "openid"
opensearch_security.openid.connect_url: "https://keycloak.example.com/realms/company-it/.well-known/openid-configuration"
opensearch_security.openid.client_id: "wazuh-sso"
opensearch_security.openid.client_secret: "<CLIENT_SECRET>"
opensearch_security.openid.base_redirect_url: "https://wazuh.example.com:5601"
opensearch_security.openid.verify_hostnames: true
opensearch_security.openid.tls:
root_ca: "/etc/wazuh-dashboard/certs/keycloak-ca.pem"
3.3 Настройка OpenSearch Security (config.yml)
Файл: /usr/share/wazuh-indexer/plugins/opensearch-security/securityconfig/config.yml
Добавьте в секцию authc::
openid:
http_enabled: true
transport_enabled: false
order: 1
http_authenticator:
type: openid
challenge: false
config:
openid_connect_idp:
enable_ssl_verification: true
pemtrustedcas_filepath: "/etc/wazuh-indexer/certs/root-ca.pem"
openid_connect_url: "https://keycloak.example.com/realms/company-it/.well-known/openid-configuration"
roles_key: "groups"
subject_key: "preferred_username"
scope: "openid profile email groups"
authentication_backend:
type: noop
3.4 Маппинг ролей Wazuh
Файл: /usr/share/wazuh-indexer/plugins/opensearch-security/securityconfig/roles_mapping.yml
wazuh_admin:
reserved: false
backend_roles:
- "wazuh-sso-admins"
users: []
wazuh_user:
reserved: false
backend_roles:
- "wazuh-sso-users"
users: []
Группы
wazuh-sso-adminsиwazuh-sso-usersдолжны приходить в токене Keycloak в полеgroups.
3.5 Применение конфигурации и перезапуск
# Применение security config
/usr/share/wazuh-indexer/plugins/opensearch-security/tools/securityadmin.sh \
-cd /usr/share/wazuh-indexer/plugins/opensearch-security/securityconfig/ \
-icl -nhnv \
-cacert /etc/wazuh-indexer/certs/root-ca.pem \
-cert /etc/wazuh-indexer/certs/admin.pem \
-key /etc/wazuh-indexer/certs/admin-key.pem
systemctl restart wazuh-dashboard
journalctl -u wazuh-dashboard -f --no-pager
Часть 4: Настройка с ADFS (кратко)
ADFS поддерживает OIDC, но имеет особенности:
| Аспект | Keycloak | ADFS |
|---|---|---|
| Endpoint | /realms/<name>/.well-known/openid-configuration |
adfs.example.com/adfs/.well-known/openid-configuration |
| Issuer | keycloak.example.com/realms/name |
adfs.example.com/adfs |
| Claims | preferred_username, groups |
schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress, schemas.microsoft.com/ws/2008/06/identity/claims/groupsid |
| Настройка клиента | UI Keycloak | Server Manager → AD FS → Application Groups → Add Server Application + Web API |
Адаптация для ADFS:
- В GLPI:
Issuer URL=https://adfs.example.com/adfs - В Wazuh:
openid_connect_url=https://adfs.example.com/adfs/.well-known/openid-configuration - В Keycloak/ADFS настройте Claims Transformation: мапьте
AD Group→groupsclaim - Если OIDC в ADFS вызывает
invalid_grant, используйтеSAML 2.0(GLPI плагинsaml, Wazuh черезsamlв OpenSearch Security)
Часть 5: Тестирование и Troubleshooting
Проверка
- Откройте
glpi.example.com→ должен быть редирект на IdP - Откройте
wazuh.example.com:5601→ кнопкаSign in with Keycloak/ADFS
3. После входа проверьте:
- Имя пользователя совпадает с
preferred_username/email - Группы подтянулись в профиль
- Права в GLPI/Wazuh соответствуют группам
Частые ошибки
| Ошибка | Причина | Решение |
|---|---|---|
redirect_uri_mismatch |
URI не совпадает с настройками IdP | Проверьте точное совпадение, включая / и порт |
invalid_client |
Неверный client_secret или тип клиента |
Убедитесь, что в IdP выбран confidential |
missing groups claim |
Groups не переданы в токен | Включите mapper Group Membership в IdP |
Wazuh: 401 Unauthorized |
Не применён securityadmin.sh или неверный roles_mapping.yml |
Перезапустите securityadmin, проверьте логи Dashboard |
GLPI: Plugin OIDC not active |
Плагин не установлен/не активирован | Проверьте php -m, права на папку, логи files/_log/ |
Логи
- GLPI:
/var/www/glpi/files/_log/*.log - Wazuh Dashboard:
/var/log/wazuh-dashboard/wazuh-dashboard.log - Keycloak:
journalctl -u keycloak -fили/opt/keycloak/log/ - ADFS: Event Viewer →
Applications and Services Logs→AD FS
Безопасность и Best Practices
- Всегда используйте HTTPS с валидными сертификатами
- Ротация
client_secretраз в 90 дней - Ограничьте
Valid Redirect URIsдо конкретных доменов - Включите MFA на уровне IdP
- Не маппьте
administratorsнапрямую из внешних групп - Ведите аудит входов через IdP и внутренние логи приложений
- Отключите локальную аутентификацию только после подтверждения работы SSO
Примечания по совместимости (2026)
| Компонент | Версия | Статус SSO |
|---|---|---|
| GLPI | 10.0.x – 10.1.x | OIDC плагин pluginsGLPI/oidc |
| Wazuh | 4.7.x – 4.9.x | OpenSearch Security OIDC |
| Keycloak | 22.x – 25.x | Quarkus, OIDC стабилен |
| ADFS | 2016/2019/2022 | OIDC работает, SAML предпочтительнее для legacy |