有关 Azure 资源的托管标识的常见问题解答

管理

如何查找具有托管标识的资源?

可通过使用以下 Azure CLI 命令来查找具有系统分配的托管标识的资源列表:

az resource list --query "[?identity.type=='SystemAssigned'].{Name:name, principalId:identity.principalId}" --output table

使用托管标识访问某个资源时需要哪些 Azure 基于角色的访问控制 (RBAC) 权限?

  • 系统分配的托管标识:你需要具有对该资源的写入权限。 例如,对于虚拟机,你需要 Microsoft.Compute/virtualMachines/write。 此操作包含在特定于资源的内置角色(如虚拟机参与者)中。
  • 将用户分配的托管标识分配给资源:你需要具有该资源的写入权限。 例如,对于虚拟机,你需要 Microsoft.Compute/virtualMachines/write。 需要对用户分配的标识执行 Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action 操作。 此操作包含在托管标识操作员内置角色中。
  • 管理用户分配的标识:若要创建或删除用户分配的托管标识,你需要托管标识参与者角色分配。
  • 管理托管标识的角色分配:对于你将向其授予访问权限的资源,你需要所有者用户访问管理员角色分配。 对于使用系统分配的标识的资源,或者对于会被授予角色分配的用户分配的标识,你将需要读取者角色分配。 如果您没有读取权限,则可以通过“用户、组或服务主体”进行搜索,以查找该标识对应的服务主体,而不是在添加角色分配时按托管标识搜索。 详细了解如何分配 Azure 角色

如何阻止创建用户分配的托管标识?

可以使用 Azure Policy 来阻止用户创建用户分配的托管标识

  1. 登录 Azure 门户并转到“策略”。

  2. 选择 定义

  3. 选择“+ 策略定义”并输入必要的信息。

  4. 在策略规则部分,粘贴以下内容:

    {
      "mode": "All",
      "policyRule": {
        "if": {
          "field": "type",
          "equals": "Microsoft.ManagedIdentity/userAssignedIdentities"
        },
        "then": {
          "effect": "deny"
        }
      },
      "parameters": {}
    }
    
    

创建策略后,将其分配给要使用的资源组。

  1. 导航到资源组。
  2. 查找用于测试的资源组。
  3. 从左侧菜单中选择“策略”。
  4. 选择 分配策略
  5. 在“基本信息”部分中,提供:
    1. 范围 我们用于测试的资源组
    2. 策略定义:之前创建的策略。
  6. 将所有其他设置保留为默认设置,然后选择“查看 + 创建”

此时,任何在资源组中创建用户分配托管标识的尝试都将失败。

显示策略冲突的屏幕截图。

概念

托管标识是否具有后备应用对象?

否,目录中的托管标识和 Microsoft Entra 应用注册并不相同。

应用注册有两个组件:应用程序对象和服务主体对象。 托管标识只有一个服务主体对象。

托管标识在目录中没有通常用于授予 Microsoft Graph 应用权限的应用程序对象。 需要直接将托管标识的 Microsoft Graph 权限授予服务主体。

与托管标识关联的凭据是什么? 它的有效时间有多长?其轮换频率有多高?

注意

托管标识的身份验证方式属于在内部具体实施的措施,可能会在不通知的情况下更改。

托管标识使用基于证书的身份验证。 每个托管标识的凭据有效期为 90 天,并在 45 天后进行轮换。

如果没有在请求中指定标识,IMDS 将默认采用什么标识?

  • 如果已启用系统分配的托管标识且没有在请求中指定标识,则 Azure 实例元数据服务 (IMDS) 将默认采用系统分配的托管标识。
  • 如果未启用系统分配的托管标识且仅存在一个用户分配的托管标识,则 IMDS 将默认采用用户分配的此单一托管标识。

    如果出于任何原因将其他用户分配的托管标识分配给了资源,则对 IMDS 的请求将开始失败并出现错误 Multiple user assigned identities exist, please specify the clientId / resourceId of the identity in the token request。 我们强烈建议您在请求中显式指定标识,即使该资源当前仅存在一个用户分配的托管标识。

  • 如果未启用系统分配的托管标识,并且存在多个用户分配的托管标识,则需要在请求中指定托管标识。

限制

是否可以跨多个区域使用同一托管标识?

简而言之,是的,可以在多个 Azure 区域中使用用户分配的托管标识。 较详细的回答是,虽然用户分配的托管身份是作为区域资源创建的,但在 Microsoft Entra ID 中创建的关联服务主体(SP)可在全球范围内使用。 可以从任何 Azure 区域使用服务主体,其可用性取决于 Microsoft Entra ID 的可用性。 例如,如果在中南部区域创建了一个用户分配的托管标识,而该区域变为不可用,则此问题仅影响托管标识本身的控制平面活动。 任何已配置为使用托管标识的资源所执行的操作都不会受到影响。

Azure 资源托管标识可以用于 Azure 云服务(经典)吗?

目前,Azure 资源的托管标识不支持用于 Azure 云服务(经典)

什么是 Azure 资源托管标识的安全边界?

标识的安全边界是标识所附加到的资源。 例如,对于启用了 Azure 资源的托管标识的虚拟机,其安全边界就是该虚拟机。 在该 VM 上运行的任何代码都可以调用托管标识终结点和请求令牌。 在使用支持托管标识的其他资源时,体验是相似的。

如果我将订阅移动到另一个目录中,是否会自动重新创建托管标识?

否,如果将订阅移动到另一个目录中,则必须手动重新创建它们并再次授予 Azure 角色分配。

  • 对于系统分配的托管标识:禁用后重新启用。
  • 对于用户分配的托管标识:删除、重新创建并重新将其附加到所需的资源(例如虚拟机)

是否可以使用托管标识来访问不同目录/租户中的资源?

不,目前托管标识不支持跨目录场景。

是否有适用于托管标识的速率限制?

托管标识限制依赖于 Azure 服务限制、Azure 实例元数据服务 (IMDS) 限制和 Microsoft Entra 服务限制。

  • Azure 服务限制定义可在租户和订阅级别执行的创建操作的数量。 用户分配的托管标识在命名方式上也有限制
  • IMDS 一般情况下,对 IMDS 的请求限制为每秒 5 个。 超过此阈值的请求会因 429 响应而被拒绝。 对托管标识类别的请求限制为每秒 20 个请求,并发请求数限制为 5 个。 有关详细信息,请参阅 Azure 实例元数据服务 (Windows) 一文。
  • Microsoft Entra 服务 根据 Microsoft Entra 服务限制,每个托管标识都计入 Microsoft Entra 租户中的对象配额限值。

是否可将用户分配的托管标识移到其他资源组/订阅?

不支持将用户分配的托管标识移动到其他资源组。 如果需要在不同的资源组或订阅中使用托管标识,则需要创建新的用户分配的托管标识并向其分配必要的权限。

托管标识令牌是否被缓存?

托管标识令牌由底层 Azure 基础结构缓存,以保证性能和复原能力:托管标识的后端服务会将每个资源 URI 的缓存维持大约 24 小时。 例如,对托管标识权限的更改可能需要几个小时才能生效。 目前,无法强制在托管标识过期之前刷新其令牌。 有关详细信息,请参阅使用托管标识进行授权的限制

托管标识是否被软删除?

是,托管标识会被软删除 30 天。 可以查看已软删除的托管标识服务主体,但无法恢复或永久删除它。

删除托管标识后令牌会发生什么情况?

删除托管标识时,以前与该标识关联的 Azure 资源将再也无法请求该标识的新令牌。 在身份被删除之前签发的令牌,在其原定到期时间之前仍然有效。 一些目标端点的授权系统可能还会在目录中对该标识执行其他检查,在这种情况下,请求会因找不到该对象而失败。 但是,某些系统(如 Azure RBAC)会继续接受来自该令牌的请求,直到令牌过期。

托管标识的目录对象配额

每个托管标识在 Microsoft Entra ID 中都有一个服务主体。 此服务主体计入租户的目录对象配额,以及其他目录对象,例如用户、组、应用程序、设备和服务主体。

若要保留其他基本对象的目录容量,当新服务主体导致目录使用量达到或超过租户总目录对象配额的 98% 时,将阻止创建托管标识。

98% 阈值适用于目录对象使用总量。 它不是一个仅将托管标识计入其中的单独配额。

Important

此验证会影响创建新的托管标识服务主体。 现有托管标识将继续工作,并且其获取令牌的能力不会受到影响。

受配额影响的操作

目录配额验证可能会影响以下操作:

  • 创建用户分配的托管标识。
  • 在Azure资源上启用系统分配的托管标识。
  • 如果该操作需要新的服务主体,则重新启用系统分配的托管标识。

将现有用户分配的托管标识分配给另一个Azure资源不会创建另一个服务主体。 因此,该分配不会占用另一个目录对象,因此不会被此验证阻止。

98% 阈值的工作原理

在Microsoft Entra为托管标识创建服务主体之前,它会评估租户的当前目录对象使用情况。

如果添加服务主体会导致目录使用量达到或超过租户总配额的 98%,则会阻止创建。

例如,如果租户的配额为 300,000 个目录对象,则托管标识创建阈值为 294,000 个对象。 阻止将使用量增加到 294,000 个对象的请求。

剩余容量可用于其他目录操作和基本对象。 它不会增加租户的总目录对象配额。

错误消息

当托管标识创建被阻止时,会收到类似于以下消息的错误:

租户的目录对象配额已达上限。 创建新的托管标识将被阻止。 请要求管理员增加目录配额限制或删除对象以减少已用配额。

Important

已软删除的对象也会计入总体配额用量。

解决被阻止的托管标识操作

在目录使用率降至 98% 阈值以下后,或者在 Microsoft 支持提高租户配额后,请重试创建或启用托管标识。

后续步骤