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。

要使用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
断言
区分大小写的登录 取消勾选此复选框以禁用用户名的区分大小写的登录(默认启用)。
禁用区分大小写的登录允许,例如,以"admin"登录,即使Zabbix用户是"Admin"或"ADMIN"。
请注意,如果禁用了区分大小写的登录,并且有多个Zabbix用户具有相似的用户名(例如,Admin和admin),则这些用户的登录将始终被拒绝,错误信息为:"认证失败:提供的凭据不唯一。"
配置JIT配置 勾选此复选框以显示与JIT用户配置相关的选项。
组名属性 为JIT用户配置指定组名属性。
用户名属性 为JIT用户配置指定用户名属性。
用户姓氏属性 为JIT用户配置指定用户姓氏属性。
用户组映射 将SAML用户组模式映射到Zabbix用户组和用户角色。
这是确定配置的用户将获得的Zabbix用户组/角色所必需的。
点击添加以添加映射。
SAML组模式字段支持通配符。组名必须与现有组匹配。
如果SAML用户匹配多个Zabbix用户组,用户将成为所有这些组的成员。
如果用户匹配多个Zabbix用户角色,用户将获得其中最高的权限级别。
媒体类型映射 将用户的SAML媒体属性(例如,电子邮件)映射到Zabbix用户媒体以发送通知。
启用SCIM配置 勾选此复选框以启用SCIM 2.0配置。

参见使用以下SAML身份提供商进行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']

Zabbix使用OneLogin's SAML PHP Toolkit库 (版本3.4.1)。$SSO['SETTINGS']部分的结构应与库中使用的结构相似。有关配置选项的描述,请参阅官方库 documentation

仅以下选项可以作为$SSO['SETTINGS']的一部分设置:

  • strict
  • baseurl
  • compress
  • contactPerson
  • organization
  • sp(仅限此列表中指定的选项)
    • attributeConsumingService
    • x509certNew
  • idp(仅限此列表中指定的选项)
    • singleLogoutService(仅一个选项)
      • responseUrl
    • certFingerprint
    • certFingerprintAlgorithm
    • x509certMulti
  • 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
       ];
       ```**配置示例:**
       
       ```php
       $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