有关 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 来阻止用户创建用户分配的托管标识
登录 Azure 门户并转到“策略”。
选择“定义”
选择“+ 策略定义”并输入必要的信息。
在策略规则部分,粘贴以下内容:
{ "mode": "All", "policyRule": { "if": { "field": "type", "equals": "Microsoft.ManagedIdentity/userAssignedIdentities" }, "then": { "effect": "deny" } }, "parameters": {} }
创建策略后,将其分配给要使用的资源组。
- 导航到资源组。
- 查找要用于测试的资源组。
- 从左侧菜单中选择“策略”。
- 选择“分配策略”
- 在“基本信息”部分中,提供:
- 范围:用于测试的资源组
- 策略定义:之前创建的策略。
- 将所有其他设置保留为默认设置,然后选择“查看 + 创建”
此时,任何在资源组中创建用户分配托管标识的尝试都将失败。
概念
托管标识是否具有后备应用对象?
否,目录中的托管标识和 Microsoft Entra 应用注册并不相同。
应用注册有两个组件:应用程序对象和服务主体对象。 Azure 资源的托管标识仅包含以下组件之一:一个服务主体对象。
托管标识在目录中没有通常用于授予 MS Graph 应用权限的应用程序对象。 需要直接将托管标识的 MS 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)会继续接受来自该令牌的请求,直到令牌过期。