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

Azure 资源的托管标识是 Microsoft Entra ID 的一项功能。 支持 Azure 资源的托管标识的每个 Azure 服务都受其自己的时间线限制。 在开始之前,请务必查看资源的托管标识的可用性状态以及已知问题

注意

Azure 资源托管标识是以前称为托管服务标识 (MSI) 的服务的新名称。

管理

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

可通过使用以下 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. 将所有其他设置保留为默认设置,然后选择“查看 + 创建”

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

Policy violation

概念

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

不是。 托管标识和 Microsoft Entra 应用注册在目录中是不同的。

应用注册有两个组件:应用程序对象和服务主体对象。 Azure 资源的托管标识仅包含以下组件之一:一个服务主体对象。

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

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

注意

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

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

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

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

限制

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

简而言之,是的,可以在多个 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)会继续接受来自该令牌的请求,直到令牌过期。

后续步骤