跳转到内容
搜索文档

Microsoft Entra ID

最后更新 查看 MarkdownAgent 设置

您可以将 Microsoft Entra ID(前称 Azure Active Directory)与 Cloudflare One 集成,并根据用户身份和组成员身份构建策略。用户将使用其 Entra ID 凭据向 Cloudflare One 进行身份验证。

将 Entra ID 设置为身份提供商

1. 获取 Entra ID 设置

设置集成需要以下 Entra ID 值:

  • 应用程序(客户端)ID
  • 目录(租户)ID
  • 客户端密钥

获取这些值的步骤:

  1. 登录 Microsoft Entra 管理中心

  2. 前往 Applications(应用程序) > Enterprise applications(企业应用程序)

  3. 选择 New application(新建应用程序),然后选择 Create your own application(创建您自己的应用程序)

  4. 为您的应用程序命名。

  5. 选择 Register an application to integrate with Microsoft Entra ID (App you're developing)(注册应用程序以与 Microsoft Entra ID 集成(您正在开发的应用程序))。如果有推荐,请勿选择任何库中的应用程序。选择 Create(创建)

  6. Redirect URI(重定向 URI) 下,选择 Web 平台并输入以下 URL。

    https://<your-team-name>.cloudflareaccess.com/cdn-cgi/access/callback

    您可以在 Cloudflare 仪表板Settings(设置)> Team name and domain(团队名称和域名)> **Team name(团队名称)**下找到您的团队名称。

    在 Azure 中注册应用程序
  7. 选择 Register(注册)

  8. 接下来,返回 Microsoft Entra ID,前往 Applications(应用程序) > App registrations(应用注册)

  9. 选择 All applications(所有应用程序),然后选择您刚创建的应用程序。复制 Application (client) ID(应用程序(客户端)ID)Directory (tenant) ID(目录(租户)ID)。在步骤 3 将 Entra ID 添加为身份提供商时,您将需要这些值。

    在 Azure 中查看应用程序 ID 和目录 ID
  10. 在同一页面上,在 Client credentials(客户端凭据) 下,前往 Add a certificate or secret(添加证书或密钥)。选择 New client secret(新建客户端密钥)

  11. 为客户端密钥命名并选择过期时间。

  12. 创建客户端密钥后,复制其 Value(值) 字段。请将客户端密钥存储在安全的地方,因为它只能在创建后立即查看。在步骤 3 将 Entra ID 添加为身份提供商时,您将需要此客户端密钥值。

    Azure 中客户端密钥的位置

2. 在 Entra ID 中配置 API 权限

  1. 前往 App registrations(应用注册) > All applications(所有应用程序) > 选择您的应用程序 > API permissions(API 权限)

  2. 选择 Add a permission(添加权限)

  3. 选择 Microsoft Graph

  4. 选择 Delegated permissions(委托权限) 并启用以下权限

    • email
    • offline_access
    • openid
    • profile
    • User.Read
    • Directory.Read.All
    • GroupMember.Read.All
  1. 启用所有七个权限后,选择 Add permissions(添加权限)

  2. 选择 Grant admin consent(授予管理员同意)

    Azure 中已配置的权限列表

3. 将 Entra ID 添加为身份提供商

  1. Cloudflare 仪表板中,前往 Zero Trust > Integrations(集成) > Identity providers(身份提供商)

  2. Your identity providers(您的身份提供商) 下,选择 Add new identity provider(添加新的身份提供商)

  3. 选择 Azure AD

  4. 输入从 Microsoft Entra ID 获取的 Application (client) ID(应用程序(客户端)ID)Client secret(客户端密钥)Directory (tenant) ID(目录(租户)ID)

  5. 选择 Save(保存)

  6. 测试连接是否正常,请选择 Test(测试)

  7. (可选)配置以下设置:

    • 密钥交换验证:对所有登录尝试执行 PKCE
    • 支持组:允许 Cloudflare 读取用户的 Entra ID 组成员身份。
    • Entra ID 策略同步:请参阅我们的 Entra ID 条件访问教程
    • 启用 SCIM:请参阅同步用户和组
    • 电子邮件声明:输入您希望用于用户识别的 Entra ID 声明(例如 preferred_username)。
    • OIDC 声明:输入您希望添加到用户身份的自定义 OIDC 声明

身份提供商端点发送 POST 请求:

Required API token permissions

At least one of the following token permissions is required:
  • Access: Organizations, Identity Providers, and Groups Write
Add an Access identity providerbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/identity_providers" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"name": "Entra ID example",
		"type": "azureAD",
		"config": {
				"client_id": "<your client id>",
				"client_secret": "<your client secret>",
				"directory_id": "<your azure directory uuid>",
				"support_groups": true
		}
	}'
  1. 将以下权限添加到您的 cloudflare_api_token

    • Access: Organizations, Identity Providers, and Groups Write
  2. 配置 cloudflare_zero_trust_access_identity_provider 资源:

    resource "cloudflare_zero_trust_access_identity_provider" "microsoft_entra_id" {
    	account_id = var.cloudflare_account_id
    	name       = "Entra ID example"
    	type       = "azureAD"
    	config 		 = {
    		client_id                  = var.entra_id_client_id
    		client_secret              = var.entra_id_client_secret
    		directory_id               = var.entra_id_directory_id
    		support_groups             = true
    		}
    }

UPN 与电子邮件

如果您组织的 UPN 与用户的电子邮件地址不匹配,则必须为电子邮件添加自定义声明。例如,如果您组织的电子邮件格式为 user@domain.com,但 UPN 为 u908080@domain.com,若您要配置基于电子邮件的策略,则必须创建电子邮件声明。

默认情况下,Cloudflare 会首先在 id_token JSON 响应中查找您在 Cloudflare One 中创建和配置的用于表示电子邮件的唯一声明名称(例如 email_identifier)。如果您没有配置唯一声明名称,Cloudflare 将查找 email 声明。最后,如果两者都不存在,Cloudflare 将查找 UPN 声明。

要从 Microsoft Entra 的 id_token 中接收电子邮件声明,您必须:

  1. Microsoft Entra 管理中心,前往 Applications(应用程序) > App registrations(应用注册) > All applications(所有应用程序),选择相关应用程序。

  2. Manage(管理) 下,选择 Token configuration(令牌配置)

  3. 为电子邮件添加声明。

    Entra 的电子邮件声明

    上面的示例同时包含 UPN 声明和电子邮件声明。由于在 Microsoft Entra 配置中创建了电子邮件声明,Cloudflare 将在 JSON 响应中查找 email 键值对。

  4. 如果您为电子邮件声明使用了 email 以外的名称,则必须在 Cloudflare One 中更新您的配置:

    a. 在 Cloudflare 仪表板中,前往 Zero Trust > Integrations(集成) > Identity providers(身份提供商) > Azure AD > Edit(编辑)

    b. 在 Optional configurations(可选配置) > Email claim(电子邮件声明) 下,输入代表您组织电子邮件地址的声明名称。

对象 ID

如果您担心用户的电子邮件或 UPN 可能会更改,可以将用户的对象 ID(oid)从 Microsoft Entra 传递给 Cloudflare Access。要配置 Access 接收对象 ID,请参阅自定义 OIDC 声明。无需在 Microsoft Entra 中进行额外配置。

同步用户和组

Microsoft Entra ID 集成允许您使用 SCIM 同步 IdP 组并自动取消用户配置。

前提条件

  • Microsoft Entra ID P1 或 P2 许可证

1. 在 Cloudflare One 中启用 SCIM

  1. Cloudflare 仪表板中,前往 Zero Trust > Integrations(集成) > Identity providers

  2. 找到 Entra ID 集成,然后选择 Edit(编辑)

  3. 开启 Enable SCIM Support groups

  4. (可选)配置以下设置:

  • Enable user deprovisioning(启用用户取消预配):当用户从 Entra ID 中的 SCIM 应用程序中移除时,撤销用户的活动会话。这将使所有活动 Access 会话失效,并提示对任何 Cloudflare One Client 会话策略重新进行身份验证。
  • Remove user seat on deprovision(取消预配时移除用户席位):当用户从 Entra ID 中的 SCIM 应用程序中移除时,从您的 Cloudflare One 账户中移除用户席位
  • SCIM identity update behavior(SCIM 身份更新行为):选择当用户身份在 Entra ID 中更新时,Cloudflare One 中发生的情况。
    • Automatic identity updates:当 Entra ID 通过 SCIM 发送更新的身份或组成员资格时,自动更新用户注册表身份。此身份用于 Gateway 策略和 Cloudflare One Client 设备配置文件;Access 将在用户重新进行身份验证时读取其更新的身份。
    • Group membership change reauthentication:当用户的组成员资格在 Entra ID 中更改时,撤销用户的活动会话。这将使所有活动 Access 会话失效,并提示对任何 Cloudflare One Client 会话策略重新进行身份验证。Access 将在用户重新进行身份验证时读取其更新的组成员资格。
    • No action:在用户下次对 Access 或 Cloudflare One Client 重新进行身份验证时更新用户身份。
  1. 选择 Regenerate Secret(重新生成密钥)。复制 SCIM Endpoint(SCIM 终结点)SCIM Secret(SCIM 密钥)。您需要将这些值输入到 Entra ID 中。

  2. 选择 Save(保存)

SCIM 密钥永不过期,但您可以随时手动重新生成密钥。

2. 在 Entra ID 中配置 SCIM

  1. 在 Microsoft Entra ID 菜单中,前往 Enterprise applications(企业应用程序)

  2. 选择 New application(新建应用程序) > Create your own application(创建您自己的应用程序)

  3. 为您的应用程序命名(例如 Cloudflare Access SCIM)。

  4. 选择 Integrate any other application you don't find in the gallery (Non-gallery)(集成库中没有的其他任何应用程序(非库))。如果有推荐,请勿选择任何库中的应用程序。选择 Create(创建)

  5. 创建应用程序后,前往 Provisioning(预配) > 选择 New configuration(新建配置)

  6. Tenant URL(租户 URL) 字段中,输入从上一步骤中 Cloudflare One 的 Entra ID 集成获取的 SCIM 端点

  7. Secret token(密钥令牌) 字段中,输入从上一步骤中 Cloudflare One 的 Entra ID 集成获取的 SCIM 密钥

  8. 选择 Test connection(测试连接),确保凭据输入正确。如果测试失败,请在 Cloudflare One 的 Entra ID 集成中选择 Regenerate secret(重新生成密钥),选择 Save(保存),然后在 Secret token(密钥令牌) 字段中输入新的 SCIM 密钥

  9. 选择 Create(创建)

  10. 创建 SCIM 应用程序后,将用户和组分配给该应用程序

  1. 前往 Provisioning(预配),然后选择 Start provisioning(开始预配)

  2. 对于 Provisioning Mode(预配模式),Microsoft 默认应将其设置为 Automatic(自动)

  3. 在 Entra ID 的 Overview(概览) 页面,您将看到同步状态。

要查看哪些用户和组已同步,请选择 Provisioning logs(预配日志)

要检查用户身份是否已在 Cloudflare One 中更新,请查看您的 SCIM 配置日志

要监控 Cloudflare Access 与 Microsoft Entra ID 之间的身份详情交换,请前往 Cloudflare 仪表板 > Zero Trust > Insights(洞察) > Logs(日志) > SCIM provisioning logs(SCIM 预配日志),并查看 SCIM 活动日志

预配属性

预配属性定义 Entra ID 将与 Cloudflare Access 同步的用户属性。要修改您的预配属性,请前往 Attribute mapping(属性映射) 并选择 Provision Microsoft Entra ID Users(预配 Microsoft Entra ID 用户)

如果尚未配置,Cloudflare 建议启用以下用户属性映射:

customappsso 属性 Entra ID 属性 建议
userName userPrincipalNamemail 必填。必须与 Cloudflare One 中的用户电子邮件地址匹配。
emails[type eq "work"].value mail 必填。必须与 Cloudflare One 中的用户电子邮件地址匹配。
name.givenName givenName 推荐
name.familyName surname 推荐

Zero Trust 策略中的 Entra 组

自动录入

启用 SCIM 同步后,您的 Entra 组名称将自动显示在 Access 和 Gateway 策略构建器中。

如果构建 Access 策略,请选择 Azure Groups 选择器。 Azure 组名称显示在 Access 策略构建器中

如果构建 Gateway 策略,请选择用户组名称选择器。

手动录入

您可以为未与 SCIM 同步的组创建 Access 和 Gateway 策略。Entra ID 以由随机字符串组成的格式公开目录组,即 Object Id,它与 Name 不同。

  1. 确保在 Cloudflare One 中设置 Microsoft Entra ID 时启用了支持组

  2. 在您的 Microsoft Entra 仪表板中,记录 Entra 组的 Object Id。在下面的示例中,名为 Admins 的组 ID 为 61503835-b6fe-4630-af88-de551dd59a2

    在 Azure 仪表板上查看 Azure 组 ID
  3. 如果构建 Access 策略,请选择 Azure Groups 选择器。如果构建 Gateway 策略,请选择 User Group IDs 选择器。

  4. 字段中,输入 Entra 组的 Object Id

    在 Cloudflare One 中输入 Azure 组 ID

嵌套组

身份验证

针对 Entra 组的 Access 和 Gateway 策略也将适用于所有嵌套组。例如,如果用户属于组 US devs,而 US devs 是更大范围组 Devs 的一部分,则该用户将受到为 Devs 创建的所有策略的约束(允许或阻止)。

SCIM 预配

对于 SCIM 预配,不支持嵌套组。Microsoft Entra ID 的 SCIM 实现不会向 Cloudflare 发送有关嵌套组成员身份的信息。只有直接隶属于明确分配组的用户才会被预配。为确保正确同步组成员身份,您必须在 Entra ID 中通过将用户直接分配到您想要预配的组来扁平化您的组结构。

由于来自 Microsoft 的 SCIM 请求不包含嵌套组信息,因此 Cloudflare 和 Microsoft 都无法通知您嵌套组未被同步。

在设备客户端重新认证时强制用户交互

每当用户重新认证其 Cloudflare One 客户端会话时,您可以要求用户在 Entra ID 中重新输入其凭据。配置步骤:

  1. 身份提供商端点发送 GET 请求,并复制 Entra ID 身份提供商的响应。

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Write
    • Access: Organizations, Identity Providers, and Groups Read
    Get an Access identity providerbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/identity_providers/$IDENTITY_PROVIDER_ID" \
    	--request GET \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
  2. 使用 PUT 请求更新 Entra ID 身份提供商。在请求正文中,包含所有现有配置,并将 prompt 参数设置为 loginselect_account。例如:

    Required API token permissions

    At least one of the following token permissions is required:
    • Access: Organizations, Identity Providers, and Groups Write
    Update an Access identity providerbash
    curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/identity_providers/$IDENTITY_PROVIDER_ID" \
    	--request PUT \
    	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
    	--json '{
    		"id": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
    		"type": "azureAD",
    		"uid": "f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
    		"name": "Entra ID",
    		"version": "31e74e9b4f033e16b604552091a72295",
    		"config": {
    				"azure_cloud": "default",
    				"client_id": "<CLIENT_ID>",
    				"conditional_access_enabled": false,
    				"directory_id": "<AZURE_DIRECTORY_ID>",
    				"redirect_url": "https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/callback",
    				"prompt": "login",
    				"support_groups": true
    		},
    		"scim_config": {
    				"enabled": true,
    				"user_deprovision": true,
    				"seat_deprovision": false,
    				"group_member_deprovision": false,
    				"identity_update_behavior": "automatic"
    		},
    		"scim_base_url": "https://<TEAM_NAME>.cloudflareaccess.com/populations/f174e90a-fafe-4643-bbbc-4a0ed4fc8415/scim/v2"
    	}'

这篇文档对您有帮助吗?