14 使用 OneLogin 设置 SAML
概述
本节提供使用 SAML 2.0 身份验证从 OneLogin 配置单点登录和 Zabbix 用户配置的指南。
OneLogin 配置
创建应用程序
1. 登录您的 OneLogin 账户。
出于测试目的,您可以在 OneLogin 创建一个免费的开发者账户。
2. 在 OneLogin web 界面中,导航至 Applications → Applications。
3. 单击“Add App”并搜索相应的应用程序。
本页中的指南基于 SCIM Provisioner with SAML (SCIM v2 Enterprise, full SAML) 应用程序示例。
4. 首先,您可能需要自定义应用程序的显示名称。
您也可以添加图标和应用程序详细信息。
完成后,单击 Save。
设置 SSO/SCIM 配置
1. 在 Configuration -> Application details 中,将 Zabbix 单点登录端点 http://<zabbix-instance-url>/zabbix/index_sso.php?acs 设置为以下字段的值:
- ACS (Consumer) URL Validator
- ACS (Consumer) URL
请注意这里使用的是 "http" 而不是 "https",这样请求中的 acs 参数才不会被截掉。

也可以使用 "https"。
要使其在 Zabbix 中正常工作,需要在 conf/zabbix.conf.php 中添加以下一行:
$SSO['SETTINGS'] = ['use_proxy_headers' => true];
其他选项保持默认值即可。
2. 在 Configuration -> API connection 中,设置以下值:
- SCIM Base URL:
https://<zabbix-instance-url>/zabbix/api_scim.php - SCIM JSON Template: 应包含所有希望通过 SCIM 传递给 Zabbix 的自定义属性,例如
user_name、user_lastname、user_email和user_mobile:
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"userName": "{$parameters.scimusername}",
"name": {
"familyName": "{$user.lastname}",
"givenName": "{$user.firstname}"
},
"user_name": "{$user.firstname}",
"user_lastname": "{$user.lastname}",
"user_mobile": "{$user.phone}",
"user_email": "{$user.email}"
}
属性名称是任意的。 可以使用不同的属性名称,但必须与 Zabbix SAML 设置中相应字段的值匹配。
请注意,要使用户配置生效,OneLogin 需要在响应中接收到带有 givenName 和 familyName 的 name 属性,即使服务提供方并未要求该属性。
因此,必须在应用程序配置部分的 schema 中指定这一点。
- SCIM Bearer Token: 输入一个具有超级管理员权限的 Zabbix API token。
点击 Enable 以激活连接。

3. 在 Provisioning 页面中,启用 Provisioning 选项:

4. Parameters 页面包含默认参数列表:
- 确保 'scimusername' 与 OneLogin 中的用户登录值一致(例如电子邮件);
- 为 'Groups' 参数勾选 Include in User Provisioning 选项;
- 点击 "+" 创建 SAML 断言和用户配置所需的自定义参数,例如
user_name、user_lastname、user_email和user_mobile:

添加参数时,请确保同时勾选 Include in SAML assertion 和 Include in User Provisioning 选项。
- 添加一个与 OneLogin 中用户角色匹配的 'group' 参数。
用户角色将作为字符串传递,并以分号
;分隔。 OneLogin 用户角色将用于在 Zabbix 中创建用户组:

验证参数列表:

5. 在 Rules 页面中,为默认的 Groups 参数创建用户角色映射。

您可以使用正则表达式将特定角色作为组传递。
角色名称不应包含 ;,因为 OneLogin 在发送包含多个角色的属性时会将其用作分隔符。
6. 下载 IdP 证书。 运行以下命令将其权限设置为 644:
chmod 644 idp.crt
Zabbix 配置
1. 在 Zabbix 中,前往 SAML 设置,并根据 OneLogin 配置填写相应的配置选项:

| Zabbix 字段 | OneLogin 中的设置字段 | 示例值 |
|---|---|---|
| IdP 实体 ID | Issuer URL (请参见 OneLogin 中应用程序的 SSO 选项卡) |
|
| SSO 服务 URL | SAML 2.0 Endpoint (HTTP) (请参见 OneLogin 中应用程序的 SSO 选项卡) |
|
| SLO 服务 URL | SLO Endpoint (HTTP) (请参见 OneLogin 中应用程序的 SSO 选项卡) |
|
| 用户名属性 | 自定义参数 | user_email |
| 组名属性 | 自定义参数 | group |
| 用户名字属性 | 自定义参数 | user_name |
| 用户姓氏属性 | 自定义参数 | user_lastname |
还需要配置用户组映射。 介质映射为可选项。 单击 Update 以保存这些设置。
2. 添加 OneLogin 提供的 Base64 证书。
如果在 zabbix.conf.php 中设置了 $SSO['CERT_STORAGE'] = 'database',则可以在 SAML 配置期间通过前端粘贴证书文本或上传证书文件——无需在文件系统中提供任何文件。
如果在 zabbix.conf.php 中设置了 $SSO['CERT_STORAGE'] = 'file',则必须确保可在文件系统中访问该证书(默认位于 ui/conf/certs,或位于 zabbix.conf.php 中配置的路径),并且前端不会将证书存储在数据库中。
请注意,如果未设置 $SSO['CERT_STORAGE'] 或将其注释掉,则默认使用文件存储,并从 ui/conf/certs 读取证书。
您可以在 OneLogin 中通过 Applications -> SSO -> 单击当前证书下方的 View details 来访问证书下载。
3. 按 Update 按钮以保存这些设置。
SCIM 用户预配
启用用户预配后,现在可以在 OneLogin 中添加/更新用户及其角色,并将其立即预配到 Zabbix。
例如,您可以创建一个新用户:

将其添加到用户角色以及将为该用户执行预配的应用程序中:

保存用户时,该用户将被预配到 Zabbix。 在 Application -> Users 中,您可以检查当前应用程序用户的预配状态:

如果预配成功,则可以在 Zabbix 用户列表中看到该用户。
