3 SAML
概述
SAML 2.0 身份验证 可用于登录 Zabbix。
如果仅配置了 SAML 登录,则用户也必须存在于 Zabbix 中,但其 Zabbix 密码不会被使用。 如果身份验证成功,Zabbix 将把本地用户名与 SAML 返回的用户名属性进行匹配。
用户预配
可以为 SAML 用户配置 JIT(just-in-time,实时)用户预配。
在这种情况下,不要求用户必须已存在于 Zabbix 中。
当用户首次登录 Zabbix 时,可以创建其用户账户。
如果启用了 JIT 预配,则必须在 Authentication 选项卡中为已取消预配的用户指定一个用户组。
除了 JIT 预配之外,还可以启用并配置 SCIM(System for Cross-domain Identity Management,跨域身份管理系统)预配——对那些通过用户预配创建的用户进行持续的用户账户管理。
SCIM 预配需要一个 Zabbix API token(具有 Super admin 权限)用于登录 Zabbix 时的身份验证。
例如,如果某个用户从一个 SAML 组移动到另一个组,那么该用户在 Zabbix 中也会从一个组移动到另一个组;如果某个用户从某个 SAML 组中被移除,那么该用户在 Zabbix 中也会从该组中被移除,并且如果不属于任何其他组,则会被添加到已取消预配用户的用户组中。
如果启用了并配置了 SCIM,则 SAML 用户会在登录 Zabbix 时被预配,并根据 SAML 中的变更持续更新。
已存在的 SAML 用户不会被预配,且只有已预配的用户才会被更新。
请注意,只有有效的媒介会在用户被预配或更新时添加到该用户。
如果未启用 SCIM,则 SAML 用户会在登录 Zabbix 时被预配(并在之后更新)。
如果启用了 SAML 身份验证,用户将可以选择本地登录或通过 SAML 单点登录。
如果使用 JIT 预配,则只能使用单点登录。
设置身份提供商
为了与 Zabbix 配合使用,需要按以下方式配置 SAML 身份提供商(onelogin.com、auth0.com、okta.com 等):
- Assertion Consumer URL 应设置为
<path_to_zabbix_ui>/index_sso.php?acs - Single Logout 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. 提供 SP 私钥和证书。 必须提供 IdP 证书(粘贴或选择文件)才能通过前端启用 SAML。 如果选择了 Sign 或 Encrypt 选项,则必须提供 SP 证书和 SP 私钥。
如果在 zabbix.conf.php 中设置了 $SSO['CERT_STORAGE'] = 'database',则可以在 SAML 配置期间通过前端粘贴证书文本或上传证书文件——文件系统中不需要任何文件。
如果在 zabbix.conf.php 中设置了 $SSO['CERT_STORAGE'] = 'file',则证书必须在文件系统中可用(默认位于 ui/conf/certs 或 zabbix.conf.php 中配置的路径),并且前端不会将证书存储到数据库中。
请注意,如果未设置 $SSO['CERT_STORAGE'] 或其被注释掉,则默认使用文件存储。
默认情况下,Zabbix 会在以下位置查找:
- ui/conf/certs/sp.key - SP 私钥文件
- ui/conf/certs/sp.crt - SP 证书文件
- ui/conf/certs/idp.crt - IDP 证书文件
证书材料可以通过前端粘贴文本或上传文件导入。
尽管在某些环境中允许未加密导入以便于使用,但强烈建议使用加密传输(例如,为 Zabbix 前端启用 HTTPS/TLS)。
当 SAML 证书/密钥存储在数据库中时,请为数据库连接启用 TLS/SSL,以保护应用程序与数据库之间的流量。
对可能包含 SAML 证书或私钥的数据库备份进行加密,并限制对备份文件以及存储 SAML 材料的数据库表的访问。
将数据库用户权限限制为最低必要权限。
2. 所有最重要的设置都可以在 Zabbix 前端中配置。 不过,也可以在配置文件中指定其他设置。

可在 Zabbix 前端中配置的参数:
| Parameter | Description |
|---|---|
| Enable SAML authentication | 勾选复选框以启用 SAML 身份验证。 |
| Enable JIT provisioning | 勾选复选框以启用 JIT 用户自动 provisioning。 |
| IDP entity ID | SAML 身份提供者中的唯一实体标识符。 |
| SSO service URL | 用户登录时将被重定向到的 URL。 |
| SLO service URL | 用户注销时将被重定向到的 URL。如果留空,则不会使用 SLO 服务。 |
| Username attribute | 登录 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 entity ID | 服务提供者的唯一标识符(如果不匹配,操作将被拒绝)。 可以指定 URL 或任意字符串数据。 |
| SP name ID format | 在响应中请求特定的 name 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 |
| IdP certificate | 用于设置 SAML 单点登录(SSO)服务的服务提供者(SP)证书内容。 |
| SP private key | 用于设置 SAML 单点登录(SSO)服务的服务提供者(SP)私钥内容。用于与身份提供者(IdP)进行安全身份验证和数据交换。 |
| SP certificate | 用于设置 SAML 单点登录(SSO)服务的服务提供者(SP)证书内容。 |
| Sign | 勾选复选框以选择应启用 SAML 签名的实体: Messages Assertions AuthN requests Logout requests Logout responses |
| Encrypt | 勾选复选框以选择应启用 SAML 加密的实体: Name ID Assertions |
| Case-sensitive login | 取消勾选复选框可禁用用户名的大小写敏感登录(默认启用)。 禁用大小写敏感登录后,例如,即使 Zabbix 用户名为 "Admin" 或 "ADMIN",也可以使用 "admin" 登录。 请注意,如果禁用了大小写敏感登录,并且存在多个用户名相似的 Zabbix 用户(例如,Admin 和 admin),这些用户的登录将始终被拒绝,并显示以下错误信息:"Authentication failed: supplied credentials are not unique." |
| Configure JIT provisioning | 勾选此复选框以显示与 JIT 用户自动 provisioning 相关的选项。 |
| Group name attribute | 为 JIT 用户自动 provisioning 指定组名属性。 |
| User name attribute | 为 JIT 用户自动 provisioning 指定用户名属性。 |
| User last name attribute | 为 JIT 用户自动 provisioning 指定用户姓氏属性。 |
| User group mapping | 将 SAML 用户组模式映射到 Zabbix 用户组和用户角色。 这对于确定已自动 provisioning 的用户在 Zabbix 中将获得哪个用户组/角色是必需的。 单击 Add 以添加映射。 SAML group pattern 字段支持通配符。组名必须与现有组匹配。 如果某个 SAML 用户匹配多个 Zabbix 用户组,则该用户将成为所有这些组的成员。 如果某个用户匹配多个 Zabbix 用户角色,则该用户将获得其中最高的权限级别。 |
| Media type mapping | 将用户的 SAML 媒体属性(例如电子邮件)映射到 Zabbix 用户媒介,用于发送通知。 |
| Enable SCIM provisioning | 勾选此复选框以启用 SCIM 2.0 provisioning。 |
有关为 Zabbix 配置用于登录和用户 provisioning 的 SAML 身份提供者示例,请参见:
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 前端配置文件(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