使用 Keycloak-proxy 进行 Zabbix HTTP 身份验证

Posted

技术标签:

【中文标题】使用 Keycloak-proxy 进行 Zabbix HTTP 身份验证【英文标题】:Zabbix HTTP authentication with Keycloak-proxy 【发布时间】:2019-03-02 00:40:26 【问题描述】:

我正在尝试使用 keycloak-proxy 将 Zabbix UI 与 Keycloak SSO 集成。 我的设置如下:

    nginx 是入口点:它处理“虚拟主机”,将请求转发到 keycloak-proxy。 Keyclock-proxy 配置了 client_id、client_secret 等,用于对 Keycloak 的用户进行身份验证; Apache 上的 Zabbix 仪表板,默认设置:我启用 HTTP 身份验证。

我在 Keycloak 和 Zabbix 中都创建了一个测试用户。 身份验证流程正常:我被重定向到 KeyCloak,我进行身份验证,但我总是收到“登录名或密码不正确”。来自 Zabbix UI。

我做错了什么? 有没有人尝试在 Zabbix 中使用 OIDC 身份验证?

我正在使用 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_USERAUTH_USER)标头带有用户名,但keycloak-proxy 不提供它。让我们使用电子邮件作为用户名(理论上您可以使用访问令牌中的任何声明)。将电子邮件添加到 keycloak-proxy 配置中的请求标头:

add-claims:
- email

并从 Zabbix Apache 配置中的电子邮件标头创建 PHP_AUTH_USER 变量:

SetEnvIfNoCase X-Auth-Email "(.*)" PHP_AUTH_USER=$1

注意:Conf 语法可能不正确,因为它不在我的脑海中 - 它可能需要一些调整。

顺便说一句:有一个(hackish)用户补丁可用 - https://support.zabbix.com/browse/ZBXNEXT-4640,但 keycloak-gatekeeper 是一个更好的解决方案

备案:keycloak-proxy = keycloak-gatekeeper(项目最近改名迁移到keycloak org)

【讨论】:

我试过你提到的 Zabbix 补丁,但它在 Zabbix 4.0 上不起作用。谢谢。 我有类似的设置问题。你可以上传你的 Nginx 配置吗?谢谢。 对不起,我没有任何 Nginx/Apache 配置。

以上是关于使用 Keycloak-proxy 进行 Zabbix HTTP 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

zabbix监控之迁移zabbix监控

如何安装Zabbix

ZABBIX Agent2监控docker

zabbix

查询zabbix数据库alerts怎么看告警的恢复时间

Zabbix通过SNMPv2监控DELL服务器的硬件信息