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 也需要在响应中接收到包含 'givenName' 和 'familyName' 的 'name' 属性。因此,需要在应用程序配置部分的 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 选项。

  • 添加一个 'group' 参数,使其与 OneLogin 中的用户角色匹配。用户角色将以字符串形式传递,并用分号 ; 分隔。OneLogin 的用户角色将用于在 Zabbix 中创建用户组:

验证参数列表:

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

你可以使用正则表达式将特定角色作为组传递。角色名称不应包含 ;,因为 OneLogin 在发送包含多个角色的属性时会将其用作分隔符。

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 提供的证书,并将其放入 Zabbix 前端安装目录中的 conf/certs,文件名为 idp.crt。

通过运行以下命令将其权限设置为 644:

chmod 644 idp.crt

你可以在 OneLogin 中通过 Applications -> SSO -> 在当前证书下点击 View details 来下载证书。

也可以使用不同的证书名称和位置。在这种情况下,请确保在 conf/zabbix.conf.php 中添加以下行:

$SSO['IDP_CERT'] = 'path/to/certname.crt';

SCIM 用户预配

启用用户预配后,现在可以在 OneLogin 中添加/更新用户及其角色,并将其立即预配到 Zabbix。

例如,您可以创建一个新用户:

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

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

如果预配成功,该用户将显示在 Zabbix 用户列表中。