开发人员面临着一个共同的挑战,那就是如何管理用于保护服务之间通信安全的机密、凭据、证书和密钥。 手动操作机密和证书是安全问题和故障的已知来源。 托管标识使开发人员无需管理这些凭据。 应用程序可以使用托管标识来获取 Microsoft Entra 令牌,无需管理任何凭据。
什么是托管标识?
总体而言,有两种类型的身份:人类身份和机器/非人身份。 计算机/非人类标识由设备和工作负荷标识组成。 在Microsoft Entra中,工作负载标识是应用程序、服务主体和托管标识。 有关工作负荷标识的详细信息,请参阅 工作负荷标识。
托管标识是可以分配给 Azure 计算资源(虚拟机(VM)、虚拟机规模集(VMSS)、Service Fabric 群集、Azure Kubernetes 群集或 Azure 支持的任何应用托管平台的标识。 在计算资源上分配托管标识后,可以直接或间接访问下游依赖项资源,例如存储帐户、SQL 数据库、CosmosDB 等。 托管标识取代了访问密钥或密码等机密。 此外,托管身份可以替换证书或其他形式的身份验证,用于服务之间的依赖关系。
以下视频演示了如何使用托管标识:
下面是使用托管标识的一些好处:
- 你无需管理凭据。 而且你甚至可能都无法访问凭据。
- 可使用托管标识对支持 Microsoft Entra 身份验证的任何资源(包括你自己的应用程序)进行身份验证。
- 使用托管标识不会产生额外成本。
托管标识类型
托管标识分为两种类型:
系统分配。 某些 Azure 资源(例如虚拟机)允许直接在资源上启用托管标识。 启用系统分配的托管标识时:
- 会在 Microsoft Entra ID 中为该标识创建特殊类型的服务主体。 该服务主体与该 Azure 资源的生命周期相关联。 当 Azure 资源被删除时,Azure 会自动为您删除该服务主体。
- 按照设计,只有该 Azure 资源可以使用此标识从 Microsoft Entra ID 请求令牌。
- 授权托管标识对一个或多个服务的访问权限。
- 系统分配的服务主体的名称始终与为其创建的 Azure 资源的名称相同。 对于部署槽位,其系统分配的标识的名称为
<app-name>/slots/<slot-name>
。
用户分配。 您还可以将托管标识作为独立的 Azure 资源来创建。 可以创建用户分配的托管标识,并将其分配给一个或多个 Azure 资源。 启用用户分配的托管标识时:
- 会在 Microsoft Entra ID 中为该标识创建特殊类型的服务主体。 该服务主体与使用它的资源是分开管理的。
- 用户分配的标识可由多个资源使用。
- 授权托管标识对一个或多个服务的访问权限。
用户分配的标识独立于计算进行预配,可分配给多个计算资源,是Microsoft服务的建议托管标识类型。
支持系统分配托管标识的资源允许执行以下操作:
- 在资源级别启用或禁用托管标识。
- 使用基于角色的访问控制 (RBAC) 来授予权限。
- 在 Azure 活动日志中查看创建、读取、更新和删除 (CRUD) 操作。
- 在 Microsoft Entra ID 登录日志中查看登录活动。
如果改为选择用户分配的托管标识:
- 可以创建、读取、更新和删除标识。
- 可以使用 RBAC 角色分配来授予权限。
- 可以在多个资源上使用用户分配的托管标识。
- 可以在 Azure 活动日志中查看 CRUD 操作。
- 在 Microsoft Entra ID 登录日志中查看登录活动。
可以使用 Azure 资源管理器模板、Azure 门户、Azure CLI、PowerShell 和 REST API 来执行托管标识的操作。
系统分配的托管标识与用户分配的托管标识之间的差异
财产 | 系统分配的托管标识 | 用户分配的托管标识 |
---|---|---|
创建 | 作为 Azure 资源(例如 Azure 虚拟机或 Azure 应用服务)的一部分创建。 | 作为独立 Azure 资源创建。 |
生命周期 | 与用于创建托管标识的 Azure 资源共享生命周期。 删除父资源时,也会删除托管标识。 |
独立生命周期。 必须显式删除。 |
在 Azure 资源之间共享 | 无法共享。 只能与单个 Azure 资源相关联。 |
可以共享。 用户分配的同一个托管标识可以关联到多个 Azure 资源。 |
常见用例 | 包含在单个 Azure 资源中的工作负载。 需要独立标识的工作负载。 例如,在单个虚拟机上运行的应用程序。 |
在多个资源上运行并可共享单个标识的工作负载。 需要在预配流程中获得对安全资源的预先授权的工作负载。 其资源经常回收,但权限应保持一致的工作负载。 例如,多台虚拟机需要访问相同资源的工作负载。 |
如何使用 Azure 资源的托管标识?
您可以通过以下步骤使用托管标识:
- 在 Azure 中创建托管标识。 可以在系统分配的托管标识或用户分配的托管标识之间进行选择。
- 使用用户分配的托管标识时,需要将该托管标识分配到“源”Azure 资源,例如虚拟机、Azure 逻辑应用或 Azure Web 应用。
- 授予托管标识访问“目标”服务的权限。
- 使用托管标识来访问资源。 在此步骤中,可以将 Azure SDK 与 Azure.Identity 库配合使用。 一些“源”资源提供连接器,这些连接器知道如何使用托管标识进行连接。 在这种情况下,请将标识用作该“源”资源的一项功能。
哪些 Azure 服务支持该功能?
Azure 资源的托管标识可用于对支持 Microsoft Entra 身份验证的资源进行身份验证。 如需支持的 Azure 服务的列表,请参阅支持 Azure 资源托管标识的服务。
使用托管标识
可以直接使用托管标识,也可以用作Microsoft Entra ID 应用程序的联合标识凭据。
使用托管标识所涉及的步骤如下:
- 在 Azure 中创建托管标识。 可以在系统分配的托管标识或用户分配的托管标识之间进行选择。 使用用户分配的托管标识时,可将托管标识分配给源 Azure 资源,例如虚拟机、Azure 逻辑应用或 Azure Web 应用。
- 授权托管标识,使之有权访问目标服务。
- 使用托管标识来访问资源。 在此步骤中,可以使用任何 客户端库。 某些源资源提供连接器,这些连接器知道如何对这些连接使用托管标识。 在这种情况下,您将使用身份作为该源资源的一个特征。
直接使用托管标识
在 Azure 计算资源上运行的服务代码使用 Microsoft 身份验证库 (MSAL) 或 Azure.Identity SDK,从由托管标识支持的 Entra ID 中检索托管标识令牌。 此令牌获取不需要任何机密,并根据代码运行的环境自动进行身份验证。 只要托管标识获得授权,服务代码就可以访问支持 Entra ID 身份验证的下游依赖项。
例如,可以使用 Azure 虚拟机(VM)作为 Azure 计算。 然后,可以创建用户分配的托管标识并将其分配给 VM。 使用 Azure.Identity(或 MSAL)和 Azure 存储客户端 SDK 访问存储帐户的 VM 接口上运行的工作负载。 用户分配的托管标识有权访问存储帐户。
在 Entra ID 应用中使用受管理身份作为联合身份凭证 (FIC)
工作负载身份联合允许在 Entra ID 应用程序中将托管身份用作凭据,就像证书或密码一样。 每当需要 Entra ID 应用时,建议采用无须凭据的方式。 在 Entra ID 应用中将托管标识用作 FIC 时,限制为 20 个 FIC。
在作为 Entra ID 应用的角色运作的工作负载可以托管在任何具有托管身份的 Azure 计算资源上。 工作负载使用托管身份通过工作负载身份联合来获取用于交换 Entra ID 应用程序令牌的令牌。 此功能也称为托管标识凭据(联合标识凭据,FIC)。 有关详细信息,请参阅 配置应用程序以信任托管标识。
后续步骤
- 开发人员简介和指南
- 使用 VM 系统分配的托管标识访问资源管理器
- 如何使用应用服务和 Azure Functions 的托管标识
- 如何将托管标识与 Azure 容器实例结合使用
- 为 Microsoft Azure 资源实施托管身份
- 使用托管标识的工作负载标识联合身份验证访问受 Microsoft Entra 保护的资源,无需管理机密