3 SAML
概览
可以使用SAML 2.0 身份验证 登录Zabbix。
如果仅配置了SAML登录,则用户也必须存在于Zabbix中,但不会使用其Zabbix密码。如果身份验证成功,则Zabbix将会将本地用户名与SAML返回的用户名属性进行匹配。
用户供应
可以为SAML用户配置 JIT(即时)用户供应。在这种情况下,不需要用户已经存在于Zabbix中。用户账户可以在用户首次登录Zabbix时创建。
如果启用了JIT供应,必须在认证选项卡中指定一个用于未激活用户的用户组。
除了JIT供应外,还可以启用和配置SCIM(跨域身份管理系统)配备 - 用于对用户供应创建的用户进行持续的用户账户管理。SCIM供应需要一个Zabbix API令牌(具有超级管理员权限)用于Zabbix的身份验证。
例如,如果用户从一个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。
配置Zabbix以使用SAML身份验证应按以下方式进行:
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格式 | 定义应使用哪种名称标识符格式。 示例: urn:oasis:names:tc:SAML:2.0:nameid-format:persistent urn:oasis:names:tc:SAML:2.0:nameid-format:transient urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos urn:oasis:names:tc:SAML:2.0:nameid-format:entity |
签名 | 选择要启用SAML签名的实体: 消息 声明 认证请求 注销请求 注销响应 |
加密 | 选择要启用SAML加密的实体: 名称ID 声明 |
区分大小写的登录 | 选择此复选框以启用用户名的区分大小写登录(默认情况下禁用)。 例如,禁用区分大小写的登录,即使Zabbix用户是’Admin’,也可以使用’ADMIN’用户登录。 注意,如果Zabbix数据库中存在类似用户名(例如Admin、admin),禁用区分大小写的登录将拒绝登录。 |
配置JIT供应 | 选择此复选框以显示与JIT用户供应相关的选项。 |
组名属性 | JIT用户供应的组名属性。 |
用户名属性 | JIT用户供应的用户名属性。 |
用户姓氏属性 | JIT用户供应的用户姓氏属性。 |
用户组映射 | 将SAML用户组模式映射到Zabbix用户组和用户角色。 这是确定在Zabbix中分配给配备用户的用户组/角色的必要步骤。 单击 添加 添加映射。 SAML组模式 字段支持通配符。组名必须与现有组匹配。 如果SAML用户匹配多个Zabbix用户组,则用户将成为所有这些组的成员。 如果用户匹配多个Zabbix用户角色,则用户将获得其中权限级别最高的角色。 |
媒体类型映射 | 将用户的SAML媒体属性(例如电子邮件)映射到用于发送通知的Zabbix用户媒体。 |
启用SCIM供应 | 选择此复选框以启用SCIM 2.0供应。 |
查看以下示例,了解如何配置用于登录和用户供应到Zabbix的SAML身份提供者:
SCIM供应注意事项
对于SCIM供应,请在身份提供者端指定到 Zabbix 前端的路径,并将 api_scim.php
添加到路径末尾,例如:
https://<your-zabbix-url>/zabbix/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’]
Zabbix 使用 OneLogin 的 SAML PHP Toolkit 库(版本 3.4.1)。$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 处于代理或负载均衡器之后,可以使用自定义的 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',
// ...
],
// ...
];