限制租户访问权限

重视安全的大型组织都希望迁移到 Microsoft 365 等云服务,但需要知道,其用户只能访问已批准的资源。 在传统上,公司在想要管理访问权限时,会限制域名或 IP 地址。 如果服务型软件 (SaaS) 应用在公有云中托管并在类似于 outlook.office.comlogin.partner.microsoftonline.cn 的共享域名中运行,则这种做法会失败。 阻止这些地址会导致用户完全无法访问 Web 上的 Outlook,而不只是将他们能够访问的内容局限于批准的标识和资源。

为了解决这个难题,Microsoft Entra 解决方案推出了一项称作“租户限制”的功能。 借助租户限制,组织可以根据应用程序用于单一登录的 Microsoft Entra 租户来控制对 SaaS 云应用程序的访问。 例如,你可能希望允许用户访问你所在组织的 Microsoft 365 应用程序,同时阻止他们访问其他组织中这些应用程序的实例。

借助租户限制,组织可以指定其网络上的用户有权访问的租户列表。 Microsoft Entra ID 只向这些允许的租户授予访问权限 - 所有其他租户都会遭阻止,即使用户是其中的来宾也是一样。

本文将重点介绍 Microsoft 365 的租户限制,但该功能可防止所有应用将用户发送到 Microsoft Entra ID 进行单一登录。 如果使用 SaaS 应用程序的 Microsoft Entra 租户与 Microsoft 365 使用的租户不同,请确保允许所有必需的租户 (例如,在 B2B 协作方案中)。 有关 SaaS 云应用的详细信息,请参阅 Active Directory 市场

工作原理

总体解决方案由以下组件构成:

  1. Microsoft Entra ID:如果存在 Restrict-Access-To-Tenants: <permitted tenant list> 标头,Microsoft Entra 只为允许的租户颁发安全令牌。

  2. 本地代理服务器基础结构:此基础结构是能够进行传输层安全性 (TLS) 检查的代理设备。 必须将代理配置为在发往 Microsoft Entra ID 的流量中插入包含允许租户列表的标头。

  3. 客户端软件:为了支持租户限制,客户端软件必须直接从 Microsoft Entra ID 请求令牌,使代理基础结构能够截获流量。 基于浏览器的 Microsoft 365 应用程序目前支持租户限制,使用 OAuth 2.0 等新式身份验证的 Office 客户端也支持租户限制。

  4. 新式身份验证:云服务必须使用新式身份验证来使用租户限制,阻止对所有不允许租户的访问。 必须将 Microsoft 365 云服务配置为默认使用新式身份验证协议。 有关 Microsoft 365 对新式身份验证支持的最新信息,请参阅更新的 Office 365 新式身份验证

下图演示了大致的流量流。 租户限制仅要求针对发往 Microsoft Entra ID 的流量执行 TLS 检查,对于发往 Microsoft 365 云服务的流量,不需要执行此检查。 这种区别很重要,因为 Microsoft Entra ID 的身份验证流量通常比 SaaS 应用程序(如 Exchange Online 和 SharePoint Online)的流量要小得多。

Diagram of tenant restrictions traffic flow.

设置租户限制

需要完成两个步骤才能开始使用租户限制。 首选,确保客户端能够连接到正确的地址。 其次,配置代理基础结构。

URL 和 IP 地址

要使用租户限制,客户端必须能够连接到以下 Microsoft Entra URL 进行身份验证:

  • login.partner.microsoftonline.cn
  • login.chinacloudapi.cn

此外,要访问 Office 365,客户端还必须能够连接到 Office 365 URL 和 IP 地址范围中定义的完全限定域名 (FQDN)、URL 和 IP 地址。

代理配置和要求

需要完成以下配置,以便通过代理基础结构启用租户限制。 本指南的内容是通用的,有关具体的实施步骤,请参阅代理供应商的文档。

先决条件

  • 代理必须能够使用 FQDN/URL 执行 TLS 截获、HTTP 标头插入和目标筛选。

  • 客户端必须信任代理提供的用于 TLS 通信的证书链。 例如,如果使用了来自内部公钥基础结构 (PKI) 的证书,则必须信任内部根证书颁发机构颁发的证书。

  • 使用租户限制需要 Microsoft Entra ID P1 或 P2 许可证。

配置

对于 login.partner.microsoftonline.cnlogin.chinacloudapi.cn 的每个传出请求,请插入两个 HTTP 标头:Restrict-Access-To-TenantsRestrict-Access-Context

注意

不要在代理配置的 *.login.partner.microsoftonline.cn 下包含子域。 这样做会加入 device.login.partner.microsoftonline.cn,并会干扰设备注册和基于设备的条件访问方案中使用的客户端证书身份验证。 将代理服务器配置为从 TLS break-and-inspect 和标头注入中排除 device.login.partner.microsoftonline.cnenterpriseregistration.partner.microsoftonline.cn

这些标头应包含以下元素:

  • 对于 Restrict-Access-To-Tenants,应使用 <允许租户列表> 的值,即希望允许用户访问的租户的逗号分隔列表。 可使用已注册到租户的任何域来识别此列表中的租户以及目录 ID 本身。 以描述租户的所有三种方式为例,允许 Contoso、Fabrikam 和 Microsoft 的名称/值对如下所示:Restrict-Access-To-Tenants: contoso.com,fabrikam.partner.onmschina.cn,72f988bf-86f1-41af-91ab-2d7cd011db47

  • 对于 Restrict-Access-Context,应使用单个目录 ID 的值,用于声明哪个租户将要设置租户限制。 例如,要将 Contoso 声明为设置租户限制策略的租户,名称/值对如下所示:Restrict-Access-Context: 456ff232-35l2-5h23-b3b3-3236w0826f3d。 在此处,必须使用自己的目录 ID 才能获取这些身份验证的日志。 如果使用任何不属于自己的目录 ID,这些登录日志将*显示在其他人的租户中,并且会删除所有个人信息。 有关详细信息,请参阅管理体验

若要查找目录 ID:

  1. 至少以全局读者身份登录到 Microsoft Entra 管理中心
  2. 浏览到“标识”>“概述”>“概述”。
  3. 复制“租户 ID”值

要验证目录 ID 或域名是否引用了同一个租户,请使用该 ID 或域代替此 URL 中的<租户>:https://login.partner.microsoftonline.cn/<tenant>/v2.0/.well-known/openid-configuration。 如果域和 ID 的结果相同,则指同一租户。

为了防止用户插入其自己的包含未批准租户的 HTTP 标头,代理需要替换 Restrict-Access-To-Tenants 标头(如果传入的请求中已提供此标头)。

必须强制客户端对所有请求使用代理来 login.partner.microsoftonline.cnlogin.chinacloudapi.cn。 例如,如果使用 PAC 文件来指示客户端使用代理,则不应该允许最终用户编辑或禁用这些 PAC 文件。

用户体验

本部分介绍最终用户和管理员的体验。

最终用户体验

例如,某个用户身处 Contoso 网络,但该用户正在尝试访问 Fabrikam 的某个共享 SaaS 应用程序的实例(如 Outlook Online)。 如果 Fabrikam 不是 Contoso 实例的受允许租户,该用户将看访问拒绝消息。 这条拒绝消息表明用户正在尝试访问组织内部 IT 部门未批准的资源。

Screenshot of tenant restrictions error message, from April 2021.

管理员体验

虽然在企业代理基础结构上配置租户限制,但管理员可以直接访问 Microsoft Entra 管理中心中的租户限制报告。 查看报告:

  1. 至少以全局读者身份登录到 Microsoft Entra 管理中心
  2. 浏览到“标识”>“概述”>“租户限制”

Restricted-Access-Context 租户的管理员可以使用此报告来查看由于租户限制策略而被阻止的登录,包括使用的标识和目标目录 ID。 如果设置限制的租户是登录的用户租户或资源租户,则会包含登录。

当 Restricted-Access-Context 租户之外的其他租户中的用户登录时,该报告可能包含有限的信息,例如目标目录 ID。 在这种情况下,用户身份信息(例如,名称和用户主体名称)将被过滤,以保护其他租户中的用户数据(例如根据需要使用 "{PII Removed}@domain.com" or 00000000-0000-0000-0000-000000000000 代替用户名和对象 ID)。

与 Microsoft Entra 管理中心中的其他报表一样,可以使用筛选器来指定报表的范围。 可以根据特定的时间间隔、用户、应用程序、客户端或状态进行筛选。 如果选择“列”按钮,则可以选择通过任意组合以下字段来显示数据:

  • 用户 - 此字段可以删除个人数据,其值设为 00000000-0000-0000-0000-000000000000
  • 应用程序
  • Status
  • Date
  • 日期 (UTC) - 其中 UTC 是协调世界时
  • IP 地址
  • 客户端
  • 用户名 - 此字段可以删除个人数据,其值设为 {PII Removed}@domain.com
  • 位置
  • 目标租户 ID

Microsoft 365 支持

Microsoft 365 应用程序必须满足两个条件才能完全支持租户限制:

  1. 使用的客户端支持新式身份验证。
  2. 已启用新式身份验证作为云服务的默认身份验证协议。

有关哪些 Office 客户端目前支持新式身份验证的最新信息,请参阅更新的 Office 365 新式身份验证。 该页面还包含有关如何在特定的 Exchange Online 和 Skype for Business Online 租户中启用新式身份验证的说明文档链接。 SharePoint Online 已默认启用新式身份验证。 Teams 仅支持新式身份验证,不支持旧式身份验证,因此免验证不适用于 Teams。

Microsoft 365 基于浏览器的应用程序(如 Office 门户、Yammer、SharePoint 网站、Outlook 网页版)目前支持租户限制。 胖客户端(Outlook、Skype for Business、Word、Excel、PowerPoint 等)仅在使用新式身份验证时才可强制实施租户限制。

支持新式身份验证的 Outlook 和 Skype for Business 客户端仍可针对未启用新式身份验证的租户使用旧版协议,从而有效绕过租户限制。 租户限制可能会阻止使用旧版协议的应用程序(如果他们在身份验证期间与 login.partner.microsoftonline.cnlogin.chinacloudapi.cn 联系)。

对于 Windows 上的 Outlook,客户可能选择实施限制来阻止最终用户将未经批准的邮件帐户添加到其配置文件。

Azure RMS 和 Office 邮件加密不兼容

Azure Rights Management Service (RMS) 和 Office 邮件加密功能与租户限制不兼容。 这些功能依赖于将用户登录到其他租户,才能获取加密文档的解密密钥。 由于租户限制会阻止访问其他租户,因此无法访问从不受信任的租户发送给用户的加密邮件和文档。

测试

在整个组织中实施租户限制之前如果想要试用,可采取两种做法:使用 Fiddler 等工具基于主机实施租户限制,或者分阶段推出代理设置。

基于主机的实施方法所用的 Fiddler

Fiddler 是一个免费 Web 调试代理,可用于捕获和修改 HTTP/HTTPS 流量,包括插入 HTTP 标头。 要配置 Fiddler 来测试租户限制,请执行以下步骤:

  1. 下载并安装 Fiddler

  2. 根据 Fiddler 的帮助文档,配置 Fiddler 来解密 HTTPS 流量。

  3. 配置 Fiddler,使用自定义规则插入 Restrict-Access-To-TenantsRestrict-Access-Context 标头:

    1. 在 Fiddler Web 调试器工具中选择“规则”菜单,并选择“自定义规则...”以打开 CustomRules 文件。

    2. OnBeforeRequest 函数中添加以下行。 将 <租户标识符列表> 替换为已注册到租户的域(例如 contoso.partner.onmschina.cn)。 将<目录 ID> 替换为租户的 Microsoft Entra GUID 标识符。 必须包含正确的 GUID 标识符,租户中才能显示日志。

     // Allows access to the listed tenants.
       if (
           oSession.HostnameIs("login.partner.microsoftonline.cn") ||
           oSession.HostnameIs("login.chinacloudapi.cn")
       )
       {
           oSession.oRequest["Restrict-Access-To-Tenants"] = "<List of tenant identifiers>";
           oSession.oRequest["Restrict-Access-Context"] = "<Your directory ID>";
       }
    
    

    如果需要允许多个租户,请使用逗号分隔租户名称。 例如:

    oSession.oRequest["Restrict-Access-To-Tenants"] = "contoso.partner.onmschina.cn,fabrikam.partner.onmschina.cn";

  4. 保存并关闭 CustomRules 文件。

配置 Fiddler 后,可转到“文件”菜单并选择“捕获流量”来捕获流量。

分阶段部署代理设置

根据代理基础结构的功能,有时可以分阶段向用户部署设置。 有关注意事项,请参阅以下高级选项:

  1. 使用 PAC 文件将测试用户指向测试代理基础结构,普通用户可继续使用生产代理基础结构。
  2. 某些代理服务器可以使用组来支持不同的配置。

有关具体细节,请参阅代理服务器文档。

不支持 TLS 中断和检查的平台

租户限制取决于 HTTPS 标头中允许的租户列表的注入。 此信赖项要求传输层安全性检查 (TLSI) 中断并检查流量。 对于客户端无法中断和检查流量以添加标头的环境,租户限制不起作用。

以 Android 7.0 及更高版本为例。 Android 更改了处理受信任的证书颁发机构 (CA) 的方式,以便为安全应用流量提供更安全的默认值。 有关详细信息,请参阅对 Android Nougat 中受信任的证书颁发机构的更改

根据 Google 提供的建议,Microsoft 客户端应用默认忽略用户证书。 此策略使此类应用无法处理租户限制,因为网络代理使用的证书安装在客户端应用不信任的用户证书存储中。

对于无法中断和检查流量以将租户限制参数添加到标头的此类环境,Microsoft Entra ID 的其他功能可以提供保护。 以下列表提供了有关此 Microsoft Entra 功能的详细信息。

但是,某些特定方案只能使用租户限制进行涵盖。

后续步骤