3 SAML
概述
SAML 2.0 身份验证 可用于登录 Zabbix。
如果配置 SAML 登录时未启用 JIT 用户预配,则用户必须已存在于 Zabbix 中;用户的 Zabbix 密码不会用于身份验证。 在 SAML 身份验证成功后,Zabbix 会将从 SAML 接收到的用户名属性与现有的本地 Zabbix 用户名进行匹配。
用户配置
可以为 SAML 用户配置 JIT(实时)用户供应(user provisioning)。
在这种情况下,用户无需预先存在于 Zabbix 中。
用户首次登录 Zabbix 时即可创建用户账户。
如果启用了 JIT 供应,则必须在 认证(Authentication) 选项卡中指定一个用于注销用户的用户组。
在启用 Top 的同时,还可以启用和配置 SCIM(跨域身份管理)供应——用于通过用户供应创建的用户的 持续 用户账户管理。
启用 SCIM 供应需要一个 Zabbix API token(具有超级管理员权限)用于认证进入 Zabbix。
例如,如果一个用户从一个 SAML 组移动到另一个 SAML 组,该用户在 Zabbix 中也会相应地从一个用户组移动到另一个用户组;
如果一个用户从 SAML 组中被移除,该用户也会从 Zabbix 的对应组中被移除,如果不再属于任何其他组,则会被添加到用于注销用户的用户组中。
如果启用了并配置了 SCIM,则 SAML 用户将在登录 Zabbix 时被供应,并根据 SAML 中的变化持续更新。
已经存在的 SAML 用户不会被供应,只有已供应的用户才会被更新。
请注意,只有有效的媒介信息会在用户供应或更新时被添加到用户账户中。
如果未启用 SCIM,则 SAML 用户将在登录 Zabbix 时被供应(并在之后根据需要更新)。
如果启用了 SAML 认证,用户将可以选择本地登录或通过 SAML 单点登录。
如果使用了 JIT 供应,则只能通过单点登录。
配置身份验证提供程序
为了能够使用 Zabbix,需要以如下方式配置 SAML 身份提供者(onelogin.com、auth0.com、 okta.com 等):
- 断言消费者 URL 应设置为
<path_to_zabbix_ui>/index_sso.php?acs - 单点注销 URL 应设置为
<path_to_zabbix_ui>/index_sso.php?sls
<path_to_zabbix_ui> 示例:https://example.com/zabbix/ui、
http://another.example.com/zabbix、http://<any_public_ip_address>/zabbix
设置 Zabbix
如果要在前端使用 SAML 身份验证,则必须安装 php-openssl。
要使用 SAML 身份验证,应按以下方式配置 Zabbix:
1. 私钥和证书应存储在 ui/conf/certs/ 中,除非在 zabbix.conf.php 中提供了自定义路径。
默认情况下,Zabbix 将在以下位置查找:
- ui/conf/certs/sp.key - SP 私钥文件
- ui/conf/certs/sp.crt - SP 证书文件
- ui/conf/certs/idp.crt - IDP 证书文件
2. 所有最重要的设置都可以在 Zabbix 前端中配置。 但是,也可以在 配置文件 中指定其他设置。

Zabbix 前端中可用的配置参数:
| 参数 | 描述 |
|---|---|
| 启用 SAML 身份验证 | 选中复选框以启用 SAML 身份验证。 |
| 启用 JIT 配置 | 选中复选框以启用 JIT 用户配置。 |
| IDP 实体 ID | SAML 身份提供商中的唯一实体标识符。 |
| SSO 服务 URL | 用户登录时将被重定向到的 URL。 |
| SLO 服务 URL | 用户注销时将被重定向到的 URL。如果留空,则不会使用 SLO 服务。 |
| 用户名属性 | 登录 Zabbix 时用作用户名的 SAML 属性。 支持的值列表由身份提供商决定。 示例: uid userprincipalname samaccountname username userusername urn:oid:0.9.2342.19200300.100.1.1 urn:oid:1.3.6.1.4.1.5923.1.1.1.13 urn:oid:0.9.2342.19200300.100.1.44 |
| SP 实体 ID | 唯一的服务提供商标识符(如果不匹配,则操作将被拒绝)。 可以指定 URL 或任意字符串数据。 |
| SP 名称 ID 格式 | 在响应中请求特定的名称 ID 格式。 示例: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified urn:oasis:names:tc:SAML:2.0:nameid-format:transient |
| 签名 | 取消选中复选框,以禁用相应实体的 SAML 签名: 消息 断言 AuthN 请求 注销请求 注销响应 |
| 加密 | 选中复选框,以选择应启用 SAML 加密的实体: 名称 ID 断言 |
| 区分大小写的登录 | 取消选中复选框,以禁用用户名登录的大小写敏感性(默认启用)。 禁用区分大小写的登录后,即使 Zabbix 用户名为 "Admin" 或 "ADMIN",也可以使用 "admin" 登录。 请注意,如果禁用了区分大小写的登录,并且存在多个用户名相似的 Zabbix 用户(例如 Admin 和 admin),则这些用户的登录将始终被拒绝,并显示以下错误消息:"Authentication failed: supplied credentials are not unique." |
| 配置 JIT 配置 | 选中此复选框以显示与 JIT 用户配置相关的选项。 |
| 组名称属性 | 指定 JIT 用户配置的组名称属性。 |
| 用户名属性 | 指定 JIT 用户配置的用户名属性。 |
| 用户姓氏属性 | 指定 JIT 用户配置的用户姓氏属性。 |
| 用户组映射 | 将 SAML 用户组模式映射到 Zabbix 用户组和用户角色。 这是确定配置的用户将在 Zabbix 中获得哪个用户组/角色所必需的。 点击添加以添加映射。 SAML 组模式字段支持通配符。组名称必须与现有组匹配。 如果 SAML 用户匹配多个 Zabbix 用户组,则该用户将成为所有这些组的成员。 如果用户匹配多个 Zabbix 用户角色,则该用户将获得其中最高的权限级别。 |
| 媒体类型映射 | 将用户的 SAML 媒体属性(例如电子邮件)映射到 Zabbix 用户媒体,以发送通知。 |
| 启用 SCIM 配置 | 选中此复选框以启用 SCIM 2.0 配置。 |
请参阅以下示例,了解如何配置 SAML 身份提供商,以便登录 Zabbix 并在 Zabbix 中配置用户:
SCIM配置注意事项
对于 SCIM 配置,需在身份提供商端指定 Zabbix 前端的路径,并在其后附加 api_scim.php,例如:
https://<path-to-zabbix-ui>/api_scim.php
Zabbix 中使用的用户属性(用户名、用户名称、用户姓氏和媒介属性)需要作为自定义属性添加,并且如有必要,外部命名空间应与用户模式相同:urn:ietf:params:scim:schemas:core:2.0:User。
高级设置
可以在 Zabbix 前端配置文件(zabbix.conf.php)中配置额外的 SAML 参数:
- $SSO['SP_KEY'] = '<SP 私钥文件路径>';
- $SSO['SP_CERT'] = '<SP 证书文件路径>';
- $SSO['IDP_CERT'] = '<IDP 证书文件路径>';
- $SSO['SETTINGS']
只有以下选项可以作为 $SSO['SETTINGS'] 的一部分进行设置:
- strict
- baseurl
- compress
- contactPerson
- organization
- sp(仅限此列表中指定的选项)
- attributeConsumingService
- x509certNew
- idp(仅限此列表中指定的选项)
- singleLogoutService(仅限一个选项)
- responseUrl
- certFingerprint
- certFingerprintAlgorithm
- x509certMulti
- singleLogoutService(仅限一个选项)
- security(仅限此列表中指定的选项)
- signMetadata
- wantNameId
- requestedAuthnContext
- requestedAuthnContextComparison
- wantXMLValidation
- relaxDestinationValidation
- destinationStrictlyMatches
- rejectUnsolicitedResponsesWithInResponseTo
- signatureAlgorithm
- digestAlgorithm
- lowercaseUrlencoding
所有其他选项都将从数据库中读取,且不能被覆盖。 debug 选项将被忽略。
此外,如果 Zabbix UI 位于 proxy 或负载均衡器之后,可以使用自定义的 use_proxy_headers 选项:
- false(默认)- 忽略该选项;
- true - 使用 X-Forwarded-* HTTP 头来构建基础 URL。
如果使用负载均衡器连接到 Zabbix 实例,而负载均衡器使用 TLS/SSL 而 Zabbix 不使用,则必须按如下方式指定 'baseurl'、'strict' 和 'use_proxy_headers' 参数:
$SSO['SETTINGS'] = [
'strict' => false,
'baseurl' => 'https://zabbix.example.com/zabbix/',
'use_proxy_headers' => true
];
配置示例:
$SSO['SETTINGS'] = [
'security' => [
'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha384'
'digestAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#sha384',
// ...
],
// ...
];
使用Kerberos/ADFS的前端配置
Zabbix前端配置 file(zabbix.conf.php)可用于配置带有Kerberos认证和ADFS的SSO:
$SSO['SETTINGS'] = [
'security' => [
'requestedAuthnContext' => [
'urn:oasis:names:tc:SAML:2.0:ac:classes:Kerberos',
],
'requestedAuthnContextComparison' => 'exact'
]
];
在这种情况下,在SAML配置中将SP name ID字段设置为:
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified