Подробный гайд: Настройка SSO (Keycloak / ADFS) для GLPI + Wazuh

Пошаговая настройка SSO через Keycloak/ADFS для GLPI и Wazuh. Интеграция OIDC, маппинг ролей, безопасность и устранение ошибок.

2026.04.19                  


Подробный гайд: Настройка SSO (Keycloak / ADFS) для GLPI + WazuhПодробный гайд: Настройка 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 (если нет)

  1. Зайдите в Keycloak Admin Console → Realm settingsCreate Realm
  2. Имя: company-it (или аналогичное)

1.2 Создание Client для GLPI

  1. ClientsCreate client
  2. Client ID: glpi-sso
  3. Client protocol: OpenID Connect
  4. Client authentication: ON (confidential)
  5. Valid redirect URIs: glpi.example.com/plugins/oidc/callback.php
  6. Web Origins: glpi.example.com
  7. Сохраните, перейдите во вкладку Credentials → скопируйте Client Secret

1.3 Создание Client для Wazuh Dashboard

  1. ClientsCreate client
  2. Client ID: wazuh-sso
  3. Client protocol: OpenID Connect
  4. Client authentication: ON
  5. Valid redirect URIs: wazuh.example.com:5601/auth/openid/login
  6. Web Origins: wazuh.example.com:5601
  7. Сохраните, скопируйте Client Secret

1.4 Настройка Claims (группы и профиль)

Для обоих клиентов перейдите в Client scopesopenid или создайте кастомный 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 scopesopenid включен 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/
  1. В GLPI: НастройкаПлагины → Установить и активировать OIDC Authentication
  2. Перейдите в НастройкаАутентификация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:

  1. В GLPI: Issuer URL = https://adfs.example.com/adfs
  2. В Wazuh: openid_connect_url = https://adfs.example.com/adfs/.well-known/openid-configuration
  3. В Keycloak/ADFS настройте Claims Transformation: мапьте AD Groupgroups claim
  4. Если OIDC в ADFS вызывает invalid_grant, используйте SAML 2.0 (GLPI плагин saml, Wazuh через saml в OpenSearch Security)

Часть 5: Тестирование и Troubleshooting

Проверка

  1. Откройте glpi.example.com → должен быть редирект на IdP
  2. Откройте 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 LogsAD FS

Безопасность и Best Practices

  1. Всегда используйте HTTPS с валидными сертификатами
  2. Ротация client_secret раз в 90 дней
  3. Ограничьте Valid Redirect URIs до конкретных доменов
  4. Включите MFA на уровне IdP
  5. Не маппьте administrators напрямую из внешних групп
  6. Ведите аудит входов через IdP и внутренние логи приложений
  7. Отключите локальную аутентификацию только после подтверждения работы 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