Exchange Online 中应用程序的基于角色的访问控制

本文将指导你使用精细且可缩放的资源范围的访问控制: 适用于 Exchange Online 应用程序的基于角色访问控制 (RBAC) 。

概述

Exchange Online 中应用程序的 RBAC 允许管理员向独立访问 Exchange Online 中数据的应用程序授予权限。 此授权可以与访问范围 (资源范围) 配对,以指定应用可以访问哪些邮箱。 此功能扩展了 Exchange Online 中的当前 RBAC 模型,并取代了应用程序访问策略。 这些权限授予独立于 Microsoft Entra ID 中的未作用域权限授予。

此系统的核心是管理角色分配配置,它表达了管理员允许主体访问数据的意图。 在这种情况下,允许应用对一组目标资源执行某些角色。 例如,管理员可以使用 管理范围配置会议室预订系统,以便仅访问特定区域中的日历数据。 下图说明了角色分配模型:

带示例的角色分配模型图。

配置说明

以下步骤将指导您创建这些应用程序 RBAC 分配:

  1. 创建新的资源范围 (可选)
  2. 创建指向 Microsoft Entra 服务主体的指针
  3. 选择适当的应用程序角色
  4. 创建新角色分配
  5. 测试新的服务主体

要求

组织管理角色组具有新应用程序 RBAC 角色的委派角色分配。 你需要是组织管理角色组的成员才能分配这些权限。 或者,可以使用 Exchange Online RBAC 根据需要向这些应用程序角色授予委派分配。 在 Microsoft Entra ID 中,需要 Exchange 管理员角色才能分配这些权限。

定义资源范围

管理范围

通过管理范围,管理员可以基于这些对象的属性确定一组邮箱的范围。 有关 添加删除设置的信息,请参阅管理范围文档。 下面是管理范围内可 筛选属性 的列表。

注意

虽然有一个名为“管理单元”的属性,但我们建议你在角色分配上使用本机管理员单位参数,以避免将作用域创建为中间指针对象。

服务主体

服务主体表示组织中应用程序的一个实例。 应将 Exchange 中的服务主体视为指向 Microsoft Entra ID 中现有服务主体的指针。 无法使用 Exchange Online 工具直接创建服务主体。 Microsoft Entra 工具用于管理组织内的服务主体注册。 Exchange 阻止创建无效指针,并自动反映 Microsoft Entra ID 中服务主体的任何删除。

新建服务主体

New-ServicePrincipal -AppId <Client Application ID in AAD> -ObjectId <Service principal object ID in AAD> -DisplayName <name>

以下屏幕截图可帮助你在 Microsoft Entra ID 中找到这些 ID:

Microsoft Entra Enterprise 应用程序页的屏幕截图。

注意

请勿使用“应用注册”页面中的 ID,因为它显示不同的值。 红色轮廓的“应用程序 ID”是 AppID,“对象 ID”是 ServiceID。

可以使用另一种方法 Get-MgServicePrincipal 查找这些 ID。

删除服务主体

Remove-ServicePrincipal -Identity <ObjectID, AppID, or DisplayName>

设置服务主体

Set-ServicePrincipal -Identity <ObjectID, AppID, or DisplayName > -DisplayName <Updated name>

应用程序角色

应用程序角色是 Exchange Online 中的一种特殊类型的管理角色,只能分配给应用程序。 可以使用 Get-ManagementRole 枚举这些角色。

角色分配

管理角色分配将主体、角色和自定义资源访问范围绑定在一起。 此分配充当跨作用域执行角色的服务主体的权限分配。

新角色分配

New-ManagementRoleAssignment [[-Name] <String>] -Role <RoleIdParameter> -App <ObjectID, AppID, or DisplayName> -CustomResourceScope <Management Scope> (or -RecipientAdministrativeUnitScope)

设置角色分配

Set-ManagementRoleAssignment [-Identity] <RoleAssignmentIdParameter> -CustomResourceScope <Management Scope> (or -RecipientAdministrativeUnitScope)

删除角色分配

若要删除角色分配,请参阅 删除管理分配

测试授权

测试 cmdlet 可用于模拟由特定服务主体的 RBAC 分配启用的行为。

注意

此方法不包括可能在 Microsoft Entra ID 中单独授予的权限。

测试授权时,可以包含可选的资源参数,以评估哪些范围的权限适用于该目标邮箱。 InScope will = true or false 表示该权限适用于该服务主体的邮箱为 TRUE,或 FALSE 表示服务主体具有该权限但不适用于该特定邮箱。 省略此标志将导致“未运行”。

测试结果始终包括特定分配的权限允许的资源范围。

测试服务主体访问权限

Test-ServicePrincipalAuthorization -Identity <ObjectID, AppID, or DisplayName> [-Resource] <target mailbox>

示例

在 PowerShell 中使用 Connect-ExchangeOnline 后,请执行以下步骤:

示例 1:使用管理范围配置加拿大用户的日历读取访问权限

New-ServicePrincipal -AppId 71487acd-ec93-476d-bd0e-6c8b31831053 -ObjectId 6233fba6-0198-4277-892f-9275bf728bcc -DisplayName "example"

DisplayName   ObjectId                              AppId
-----------   ---------                              -----
example       6233fba6-0198-4277-892f-9275bf728bcc   71487acd-ec93-476d-bd0e-6c8b3183105
New-ManagementScope -Name "Canadian users" -RecipientRestrictionFilter "CustomAttribute1 -eq '012332'"

Name                 ScopeRestrictionType      Exclusive      RecipientRoot          RecipientFilter
----                 --------------------      ---------      -------------          ---------------
Canadian users    RecipientScope            False                                CustomAttribute1 -eq '012332'
New-ManagementRoleAssignment -App 6233fba6-0198-4277-892f-9275bf728bcc -Role "Application Calendars.Read" -CustomResourceScope "Canadian users"

Name                      Role                 RoleAssigneeName       RoleAssigneeType        AssignmentMethod
----                      ----                 ----------------       ----------------        ----------------
Application Calendar...   Application Ca...    6233fba6-0198-...      ServicePrincipal        Direct

示例 2:为所有欧洲管理员单位邮箱配置 Mail.Read

New-ServicePrincipal -AppId eb19847b-5563-42ea-b719-ea47cb0cf4b3 -ObjectId 59b7c6cb-58d3-4ee8-a409-8c1f9dbb5d36 -DisplayName "example"

DisplayName    ObjectId                                  AppId
-----------    ---------                                  -----
example        59b7c6cb-58d3-4ee8-a409-8c1f9dbb5d36       eb19847b-5563-42ea-b719-ea47cb0cf4b3
New-ManagementRoleAssignment -App 59b7c6cb-58d3-4ee8-a409-8c1f9dbb5d36 -Role "Application Mail.Read" -RecipientAdministrativeUnitScope 4d819ce9-9257-44d7-af20-68a49e6697f4

Name                         Role                RoleAssigneeName         RoleAssigneeType             AssignmentMethod
----                         ----                ----------------          ----------------            ----------------
Application Mail.Rea...      Application Ma...   59b7c6cb-58d3-...         ServicePrincipal            Direct

示例 3:测试分配给服务主体的权限

Test-ServicePrincipalAuthorization -Resource b -Identity "DemoB" |Format-Table

RoleName                      GrantedPermissions          AllowedResourceScope        ScopeType                 InScope
--------                      ------------------          --------------------        ---------                 ------
Application Mail.Read         Mail.Read                   Scope-MESGaDN                CustomRecipientScope     False
Application Calendars.Read    Calendars.Read              Scope-DL1                    CustomRecipientScope     False
Application Contacts.Read     Contacts.Read               Scope-MESGa                  CustomRecipientScope     False

限制

  • 应用程序不能成为角色组的成员。
  • 只能将应用程序角色分配给服务主体。
  • 无法复制或派生应用程序角色。
  • 独占管理范围不限制应用访问。
  • 对应用权限的更改可能会受到缓存维护的影响,缓存维护时间在 30 分钟到 2 小时之间变化,具体取决于应用最近的使用情况。 测试配置时,test 命令会绕过此缓存。 30 分钟后,将重置没有对 API 进行入站调用的应用的缓存。 活动应用的缓存最多保持 2 小时。

支持的协议

  • MS Graph
  • EWS

支持的应用程序角色

名称 协议 权限列表 说明
Application Mail.Read MS Graph Mail.Read 允许应用在没有登录用户的情况下读取所有邮箱中的电子邮件。
Application Mail.ReadBasic MS Graph Mail.ReadBasic 允许应用读取除正文、previewBody、附件以及所有邮箱中的任何扩展属性之外的电子邮件,而无需登录用户
Application Mail.ReadWrite MS Graph Mail.ReadWrite 允许应用在所有邮箱中创建、读取、更新和删除电子邮件,而无需登录用户。 不包括发送邮件的权限。
Application Mail.Send MS Graph Mail.Send 允许应用在没有登录用户的情况下以任意用户身份发送邮件。
Application MailboxSettings.Read MS Graph MailboxSettings.Read 允许应用在没有登录用户的情况下读取所有邮箱中的用户邮箱设置。
Application MailboxSettings.ReadWrite MS Graph MailboxSettings.ReadWrite 允许应用在没有登录用户的情况下在所有邮箱中创建、读取、更新和删除用户的邮箱设置。
Application Calendars.Read MS Graph Calendars.Read 允许应用在没有登录用户的情况下读取所有日历的事件。
Application Calendars.ReadWrite MS Graph Calendars.ReadWrite 允许应用在没有登录用户的情况下创建、读取、更新和删除所有日历的事件。
Application Contacts.Read MS Graph Contacts.Read 允许应用在没有已登录用户的情况下读取所有邮箱中的所有联系人。
Application Contacts.ReadWrite MS Graph Contacts.ReadWrite 允许应用在没有登录用户的情况下创建、读取、更新和删除所有邮箱中的全部联系人。
Application MailboxFolder.Read MS Graph MailboxFolder.Read.All 允许应用在没有登录用户的情况下读取所有用户的邮箱文件夹。
Application MailboxFolder.ReadWrite MS Graph MailboxFolder.ReadWrite.All 允许应用在没有登录用户的情况下读取和写入所有用户的邮箱文件夹。
Application MailboxItem.Read MS Graph MailboxItem.Read.All 允许应用在没有登录用户的情况下读取所有用户的邮箱项目。
Application MailboxItem.ReadWrite MS Graph MailboxItem.ReadWrite.All 允许应用读取、写入和删除所有用户的邮箱项目,而无需登录用户。
Application MailboxItem.Export MS Graph MailboxItem.Export.All 允许应用在没有登录用户的情况下导出所有用户的邮箱项目。
Application MailboxItem.ImportExport MS Graph MailboxItem.ImportExport.All 允许应用在没有登录用户的情况下导出和导入所有用户的邮箱项目。
Application Mail Full Access MS Graph Mail.ReadWrite, Mail.Send 允许应用在所有邮箱中创建、读取、更新和删除电子邮件,并在没有登录用户的情况下以任何用户身份发送邮件。
Application Exchange Full Access MS Graph Mail.ReadWrite, Mail.Send, MailboxSettings.ReadWrite, Calendars.ReadWrite, Contacts.ReadWrite 没有登录用户:允许应用在所有邮箱中创建、读取、更新和删除电子邮件,并以任何用户身份发送邮件。 允许应用在所有邮箱中创建、读取、更新和删除用户的邮箱设置。 允许应用创建、读取、更新和删除所有日历的事件。 允许应用创建、读取、更新和删除所有邮箱中的所有联系人。
Application EWS.AccessAsApp EWS EWS.AccessAsApp 允许应用使用 Exchange Web 服务并拥有对所有邮箱的完全访问权限。
Application SMTP.SendAsApp MS Graph SMTP.SendAsApp 允许应用使用 SMTP 客户端提交将邮件提交到用户发件箱文件夹。
Application MailboxConfigItem.Read MS Graph MailboxConfigItem.Read 允许应用在没有登录用户的情况下读取 UserConfiguration 对象。
Application MailboxConfigItem.ReadWrite MS Graph MailboxConfigItem.ReadWrite 允许应用读取、写入、更新和删除 UserConfiguration 对象,而无需登录用户。
Application MailTips.ReadBasic.All MS Graph MailTips.ReadBasic.All 允许应用仅访问邮件提示元数据而不公开电子邮件内容,无需登录用户
Application Mail-Advanced.ReadWrite.All MS Graph Mail-Advanced.ReadWrite.All 允许应用创建、读取、更新和删除所有电子邮件,包括用户邮箱中的非草稿电子邮件内容,而无需登录用户。 不包括邮件发送权限。

你可能会注意到,这些角色表示你可以在 Azure 标识平台的其他位置同意的 Microsoft Graph 权限。 除了这些角色分配允许精细的资源范围访问之外,这些权限与 Graph 权限具有相同的效果。

常见问题

为什么我的应用程序仍然有权访问我在 Exchange Online 应用程序 RBAC 中使用的范围未授予的邮箱?

需要确保删除了在 Microsoft Entra ID 中分配的组织范围的无范围权限。 使用应用程序 RBAC 分配的权限除了在 Microsoft Entra ID 中授予的权限外,还可发挥作用。 只能使用应用程序访问策略约束 Microsoft Entra 权限。 换句话说,分配的权限是对来自 Microsoft Entra ID 的权限和在 Exchange Online RBAC 中分配的权限的联合操作。 每个机构都可以独立行动。

例如,如果服务主体Mail.Read已在 Microsoft Entra ID 中授予权限,并且你在应用程序 RBAC 中配置资源范围的Mail.Read权限,则请务必从 Microsoft Entra ID 中删除 的Mail.Read分配。 否则,来自 Microsoft Entra 的无范围授权Mail.Read与应用程序 RBAC 中的资源范围授权Mail.Read的联合将导致没有有效的资源范围界定。

如何在一个界面中查看和修改所有应用程序权限?

为了确保管理员具有应用权限的统一视图,我们在 Microsoft Entra 管理员体验中显示了在 Exchange Online 中授予的这些权限。 此功能即将推出,敬请关注。

如何从应用程序访问策略迁移到应用程序的 RBAC?

使用应用程序访问策略时,你在 Azure 中拥有服务主体、权限同意,并在 Exchange Online 中拥有与服务主体关联的策略。 虽然可以使用 Exchange 管理范围或管理单元重构范围机制,但下面是一些有关在应用访问策略中重用组作为应用程序 RBAC 授权范围的指南。 此过程不会导致应用使用中断。

迁移步骤:

  1. 创建一个新的管理作用域,它指向应用程序访问策略中的作用域组。

  2. 创建服务主体指针对象。

  3. 使用管理范围限制向 Exchange Online 中的服务主体分配所需的权限。

  4. 删除对 Azure 中的权限的同意。

  5. 删除应用程序访问策略。

    在步骤 1 中创建管理范围时,将收件人筛选器与 filter 参数 MemberOfGroup一起使用。 下面是一个示例:

    "MemberOfGroup -eq 'CN=mesga20220818210551,OU=Fabrikam346.onmicrosoft.com,OU=Microsoft Exchange Hosted Organizations,DC=NAMPR00A001,DC=prod,DC=outlook,DC=com'"

注意

此筛选器参数使用组的 可分辨名称 ,您可以使用 Get-Group cmdlet 找到该组。

限制:

  • 嵌套组成员被视为超出范围。 只有直接组成员资格才会导致将成员视为授权范围内。
  • 支持 Microsoft 365 组、Mail-Enabled 安全组和通讯组列表。

应用程序的 RBAC 如何与应用程序访问策略协同工作?

与应用访问策略的兼容性

应用程序的 RBAC 取代了应用程序访问策略。

授权互操作性可描述如下:

  • 应用程序访问策略仅限制在 Microsoft Entra ID 中分配的权限。

  • RBAC for Applications 提供具有关联资源范围的备用授权表达式。

  • 应用可以具有 Microsoft Entra 同意的权限和 RBAC 分配。 例如,当应用具有 ((例如) 组织范围 Mail.Read 和范围限定 Mail.Send)时,我们预计会出现这种情况。

  • 许可同意是累加的。

示例一:来自 2 个系统的同意

  • 应用在 Microsoft Entra ID 中。Mail.Read
  • 此应用的范围限定为使用应用程序访问策略启用邮件的安全组 1。
  • 同一应用已 Calendar.Read 同意应用程序 RBAC 中的管理范围 1。
  • 邮箱 A 位于启用邮件的安全组 1 中。
  • 邮箱 B 位于管理范围 1 的范围内。

MS Graph 访问终结点,需要同时Mail.ReadCalendar.Read执行和 应用 1:

  • 面向邮箱 A:失败。
  • 面向邮箱 B:失败。

此终结点需要同时 Mail.Read 需要 和 Calendar.Read。 虽然应用对两个单独的邮箱单独具有这些权限,但它对一个邮箱没有这两种权限。

示例二:分配两次相同的权限:

  • 应用在 Microsoft Entra ID 中。Mail.Read
  • 此应用的范围限定为使用应用程序访问策略的启用邮件的安全组 1。
  • 同一应用已 Mail.Read 同意对应用程序使用 RBAC 进行管理范围 1。
  • 邮箱 A 位于启用邮件的安全组 1 中。
  • 管理范围 1 允许根据某些筛选器(如) ) Alias -ne mbxa 访问除邮箱 A (以外的每个邮箱。

MS Graph 访问需要 Mail.Read 用于应用 1 的终结点:

  • 面向邮箱 A:允许。
  • 面向邮箱 B:允许。

虽然“来自 Microsoft Entra)仅Mail.Read允许访问邮箱 A,但 RBAC 分配允许访问除 A 之外的所有内容。实际上,此分配允许访问所有内容,因为“A 和 Not A”意味着所有内容。

虽然我们概述了这些边缘情况以使其完整,但我们预计应用程序访问策略通常不会与应用程序的 RBAC 一起使用。 应在 Microsoft Entra ID 中分配组织范围的权限,同时应使用适用于应用程序的 RBAC 授予资源范围的权限。

RBAC for Applications 支持多少个应用程序?

每个组织最多可以有 10,000 个应用程序使用 RBAC for Applications。 如果此限制对你构成问题,请告诉我们。 我们以高度可扩展的方式构建了适用于应用程序的 RBAC,以满足最大客户的需求。

为什么自动发现无法正常工作?

目前,使用 RBAC 应用程序角色时无法访问 自动发现服务

如果删除 Microsoft Entra 中的服务主体,Exchange 中会发生什么情况?

在 Microsoft Entra 中删除的服务主体也会在 Exchange 中自动删除。 此删除将删除对这些服务主体所做的任何分配,但不会影响管理范围。

有关此功能的反馈

有关此功能的反馈可以与 exoapprbacpreview@microsoft.com.