使用 Microsoft Entra ID 配置 SAML
概述
本节提供了相关指南,说明如何使用 SAML 2.0 身份验证,通过 Microsoft Entra ID(原 Microsoft Azure Active Directory)为 Zabbix 配置单点登录和用户预配。
Microsoft Entra ID 配置
创建应用程序
1. 登录 Microsoft Entra ID 中的 Microsoft Entra 管理中心。 出于测试目的,您可以在 Microsoft Entra ID 中创建一个免费试用帐户。
2. 在 Microsoft Entra 管理中心中,选择 Applications > Enterprise applications > New application > Create your own application。
3. 添加应用名称,并选择 Integrate any other application... 选项。 然后,单击 Create。

设置单点登录
1. 在应用页面中,转到 Set up single sign on,然后单击 Get started。 接着选择 SAML。
2. 编辑 Basic SAML Configuration:
- 在 Identifier (Entity ID) 中设置一个用于在 Microsoft Entra ID 中标识应用的唯一名称,例如
zabbix; - 在 Reply URL (Assertion Consumer Service URL) 中设置 Zabbix 单点登录端点:
https://<path-to-zabbix-ui>/index_sso.php?acs:

请注意,必须使用 https。
要将其与 Zabbix 配合使用,请将以下行添加到前端配置文件中:
$SSO['SETTINGS'] = ['use_proxy_headers' => true];
3. 编辑 Attributes & Claims。 您必须添加要传递给 Zabbix 的所有属性(user_name、user_lastname、user_email、user_mobile、groups)。
属性名称可以任意设置。 可以使用不同的属性名称,但必须与 Zabbix SAML 设置中的相应字段值匹配。
- 单击 Add new claim 以添加属性:

- 单击 Add a group claim 以添加用于向 Zabbix 传递组信息的属性:

在此声明中,选定的 Source attribute 传递给 Zabbix 的必须是组名称(而不是组 ID)。 否则,JIT 用户配置将无法正常工作。
4. 在 SAML Certificates 中下载 Entra ID 提供的 Base64 证书,并将其放置到 Zabbix 前端安装目录中的 conf/certs 目录(具体位置可能因操作系统或 Zabbix 安装来源而异)。
运行以下命令为其设置 644 权限:
chmod 644 entra.cer
5. 使用 Entra ID 中 Set up <your app name> 下的值配置 Zabbix SAML 身份验证(请参阅下一节):

Zabbix 配置
1. 在 Zabbix 中,转到 SAML 设置,并根据 Entra ID 配置填写配置选项:

| Zabbix 字段 | Entra ID 中的设置字段 | 示例值 |
|---|---|---|
| IdP 实体 ID | Microsoft Entra 标识符 | |
| SSO 服务 URL | 登录 URL | |
| SLO 服务 URL | 注销 URL | |
| SP 实体 ID | 标识符(实体 ID) | |
| 用户名属性 | 自定义属性(声明) | user_email |
| 组名称属性 | 自定义属性(声明) | groups |
| 用户姓名属性 | 自定义属性(声明) | user_name |
| 用户姓氏属性 | 自定义属性(声明) | user_lastname |
2. 添加 Entra ID 提供的 Base64 证书。
如果在前端配置文件(zabbix.conf.php)中设置了 $SSO['CERT_STORAGE'] = 'database',则可以在 SAML 配置期间将证书文本粘贴到前端,或上传证书文件,无需在文件系统中存储文件。
如果在配置文件中设置了 $SSO['CERT_STORAGE'] = 'file',则必须在文件系统中提供证书(默认位于 ui/conf/certs,或位于配置文件中配置的路径),并且前端不会将证书存储在数据库中。
请注意,如果未设置 $SSO['CERT_STORAGE'] 或该设置已被注释,则默认使用文件存储,并从 ui/conf/certs 读取证书。
此外,还必须配置用户组映射。
媒体映射为可选配置。
3. 单击更新按钮保存这些设置。
SCIM 用户预配
1. 在你的 Entra ID 应用页面中,从主菜单打开 Provisioning 页面。
点击 Get started,然后选择 Automatic provisioning mode:
- 在 Tenant URL 中,设置以下值:
https://<path-to-zabbix-ui>/api_scim.php - 在 Secret token 中,输入具有 Super admin 权限的 Zabbix API token。
- 点击 Test connection,查看连接是否已建立。

2. 现在你可以添加所有将通过 SCIM 传递给 Zabbix 的属性。
为此,点击 Mappings,然后点击 Provision Microsoft Entra ID Users。

在 Attribute Mapping 列表底部,启用 Show advanced options,然后点击 Edit attribute list for customappsso。
在属性列表底部,添加你自己的属性,类型为 'String':

保存该列表。
3. 现在你可以为已添加的属性添加映射。
在 Attribute Mapping 列表底部,点击 Add New Mapping,并按如下所示创建映射:

当所有映射都添加完成后,保存映射列表。

4. 作为将用户预配到 Zabbix 的前提条件,你必须先在 Entra ID 中配置用户和组。
为此,转到 Microsoft Entra admin center,然后在相应的 Users 和 Groups 页面中添加用户/组。
5. 当用户和组已在 Entra ID 中创建后,你可以转到应用的 Users and groups 菜单,并将它们添加到该应用中。
6. 转到应用的 Provisioning 菜单,然后点击 Start provisioning,即可将用户预配到 Zabbix。
请注意,Entra ID 中的 Users PATCH 请求不支持媒体中的更改。
身份验证请求签名
可以将 Entra ID 配置为验证已签名身份验证请求的签名。
要实现此功能,请创建公钥/私钥:
openssl req -x509 -newkey rsa:4096 -keyout /usr/share/zabbix/conf/certs/request-sign.key -out /usr/share/zabbix/conf/certs/request-sign.pem -sha256 -days 1825 -nodes
分配权限:
chown apache /usr/share/zabbix/conf/certs/request-sign.key
chmod 400 /usr/share/zabbix/conf/certs/request-sign.key
通过添加以下内容,更新 Zabbix 前端配置:
$SSO['SP_KEY'] = 'conf/certs/request-sign.key';
$SSO['SP_CERT'] = 'conf/certs/request-sign.crt';
故障排除
当用户尝试通过 SAML 登录 Zabbix,且已经登录 MicroSoft Edge 配置文件时,使用 MicroSoft Edge 浏览器可能会出现身份验证问题。 出现此类问题时,用户可能可以在 MicroSoft Edge 的隐私模式下登录 Zabbix。
为避免此情况下的身份验证问题,可能需要在 Zabbix 前端配置文件中将 requestedAuthnContext 设置为 false。
$SSO['SETTINGS'] = [
'security' => [
'requestedAuthnContext' => false
]
];