HTTP-аутентификация Zabbix с использованием Keycloak-прокси
Я пытаюсь интегрировать Zabbix UI с Keycloak SSO, используя keycloak-proxy. Моя установка следующая:
- Nginx - это точка входа: он обрабатывает "виртуальный хост", направляя запросы к keycloak-proxy.
- Keyclock-proxy настроен с client_id, client_secret и т. Д. Для аутентификации пользователей в Keycloak;
- Панель управления Zabbix на Apache, настройка по умолчанию: я включаю HTTP-аутентификацию.
Я создал тестового пользователя как в Keycloak, так и в Zabbix. Процесс аутентификации в порядке: я перенаправлен на KeyCloak, я выполняю аутентификацию, но всегда получаю сообщение "Логин или пароль неверны". из Zabbix UI.
Что я делаю неправильно? Кто-нибудь пробовал использовать OIDC-аутентификацию с Zabbix?
Я использую Zabbix 4.0, KeyCloak 4.4, Keycloak-proxy 2.3.0.
конфигурация keycloak-proxy:
client-id: zabbix-client
client-secret: <secret>
discovery-url: http://keycloak.my.domain:8080/auth/realms/myrealm
enable-default-deny: true
enable-logout-redirect: true
enable-logging: true
encryption_key: <secret>
listen: 127.0.0.1:10080
redirection-url: http://testbed-zabbix.my.domain
upstream-url: http://a.b.c.d:80/zabbix
secure-cookie: false
enable-authorization-header: true
resources:
- uri: /*
roles:
- zabbix
1 ответ
Zabbix ожидает PHP_AUTH_USER
(или же REMOTE_USER
или же AUTH_USER
) заголовок с именем пользователя, но keycloak-proxy не предоставляет его. Давайте использовать электронную почту в качестве имени пользователя (теоретически вы можете использовать любое утверждение из токена доступа). Добавьте адрес электронной почты в заголовок запроса в конфигурации keycloak-proxy:
add-claims:
- email
И создать PHP_AUTH_USER
переменная из заголовка письма в конфигурации Zabbix Apache:
SetEnvIfNoCase X-Auth-Email "(.*)" PHP_AUTH_USER=$1
Примечание. Синтаксис Conf может быть неправильным, потому что он не в моей голове - возможно, понадобятся некоторые настройки.
Кстати: есть (хакерский) пользовательский патч - https://support.zabbix.com/browse/ZBXNEXT-4640, но keycloak-gatekeeper - лучшее решение
Для записи: keycloak-proxy = keycloak-gatekeeper (проект был недавно переименован и недавно перенесен в keycloak org)