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_nameuser_lastnameuser_emailuser_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 也需要在响应中接收一个包含 givenNamefamilyNamename 属性。 因此,需要在应用程序配置部分的 schema 中指定这一点。

  • SCIM Bearer Token: 输入具有 Super admin 权限的 Zabbix API token。

点击 Enable 以激活连接。

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

4. Parameters 页面包含默认参数列表:

  • 确保 'scimusername' 与 OneLogin 中的用户登录值匹配(例如邮箱);
  • 将 'Groups' 参数的 Include in User Provisioning 选项标记为启用;
  • 点击 "+" 创建 SAML 断言和用户预配所需的自定义参数,例如 user_nameuser_lastnameuser_emailuser_mobile

添加参数时,请确保同时勾选 Include in SAML assertionInclude 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 entity ID Issuer URL
(请参见 OneLogin 中应用程序的 SSO 选项卡)
SSO service URL SAML 2.0 Endpoint (HTTP)
(请参见 OneLogin 中应用程序的 SSO 选项卡)
SLO service URL SLO Endpoint (HTTP)
(请参见 OneLogin 中应用程序的 SSO 选项卡)
Username attribute Custom parameter user_email
Group name attribute Custom parameter group
User name attribute Custom parameter user_name
User last name attribute Custom parameter 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 用户列表中看到该用户。