开发人员面临着一个共同的挑战,那就是如何管理用于保护服务之间通信安全的机密、凭据、证书和密钥。 手动操作机密和证书是安全问题和故障的已知来源。 托管标识使开发人员无需管理这些凭据。 应用程序可以使用托管标识来获取 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 Web 应用。
- 授权托管标识,使之有权访问“目标”服务。
- 使用托管标识来访问资源。 在此步骤中,可以将 Azure SDK 与 Azure.Identity 库配合使用。 一些“源”资源提供了连接器,知道如何使用托管标识进行连接。 在这种情况下,请将标识用作该“源”资源的一项功能。
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 应用程序中将托管身份用作凭据,就像证书或密码一样。 每当需要 Entra ID 应用时,建议采用无须凭据的方式。 在 Entra ID 应用中将托管标识用作 FIC 时,限制为 20 个 FIC。
在作为 Entra ID 应用的角色运作的工作负载可以托管在任何具有托管身份的 Azure 计算资源上。 工作负载使用托管身份通过工作负载身份联合来获取用于交换 Entra ID 应用程序令牌的令牌。 此功能也称为托管标识凭据(联合标识凭据,FIC)。 有关详细信息,请参阅 配置应用程序以信任托管标识。
- 开发人员简介和指南
- 使用 VM 系统分配的托管标识访问资源管理器
- 如何使用应用服务和 Azure Functions 的托管标识
- 如何将托管标识与 Azure 容器实例结合使用
- 实现 Azure 资源托管标识
- 使用托管标识的工作负载标识联合身份验证访问受 Microsoft Entra 保护的资源,无需管理机密