构建云应用程序时面临的一个常见挑战是如何在代码中安全地管理凭据,以便对各种服务进行身份验证,而无需在本地开发人员工作站或源代码管理中保存这些凭据。 Azure 的托管标识 通过向其提供 Microsoft Entra ID 中的自动托管标识,为 Microsoft Entra ID 中的所有资源解决了此问题。 可以使用服务的标识向任何支持Microsoft Entra 身份验证的服务(包括 Key Vault)进行身份验证,而无需在代码中存储任何凭据。
Azure 资源的托管标识 在 Microsoft Entra ID 用于 Azure 订阅时免费提供。 没有额外费用。
注释
Azure 的托管标识 是以前称为托管服务标识(MSI)的服务的新名称。
概念
Azure 的托管标识基于几个关键概念:
客户端 ID - Microsoft Entra ID 生成的唯一标识符,该 ID 在初始预配期间绑定到应用程序和服务主体(另请参阅 应用程序(客户端)ID。
主体 ID - 您的托管标识的服务主体对象的对象 ID,用于授予基于角色访问 Azure 资源的权限。
服务主体 - Microsoft Entra 对象,该对象表示给定租户中Microsoft Entra 应用程序的投影(另请参阅 服务主体)。
托管标识分为两种类型:
- 系统 分配的托管标识 直接在 Azure 服务实例上启用。 系统分配标识的生命周期对于启用它的 Azure 服务实例来说是独一无二的。
- 用户分配的托管标识作为独立 Azure 资源创建。 可以将该标识分配给一个或多个 Azure 服务实例,并独立于这些实例的生命周期对其进行管理。
若要进一步了解托管标识类型之间的差异,请参阅 Azure 资源的托管标识的工作原理?
Service Fabric 应用程序支持的使用场景
Service Fabric 的托管标识仅在 Azure 部署的 Service Fabric 群集中受支持,仅适用于部署为 Azure 资源的应用程序。 无法将未部署为 Azure 资源的应用程序分配标识。 从概念上讲,对 Azure Service Fabric 群集中的托管标识的支持包括两个阶段:
向应用程序资源分配一个或多个托管标识;应用程序可以分别分配单个系统分配的标识和/或最多 32 个用户分配的标识。
在应用程序的定义中,将分配给应用程序的标识之一映射到由应用程序构成的任何单个服务。
应用程序的系统分配标识对该应用程序是唯一的;用户分配的标识是一个独立的资源,可以分配给多个应用程序。 在应用程序中,可以将单个标识(无论是系统分配的还是用户分配的)分配给应用程序的多个服务,但每个单独的服务只能分配一个标识。 最后,必须显式为服务分配一个标识才能访问此功能。 实际上,应用程序标识与其构成服务的映射允许应用程序内隔离,服务只能使用映射到它的标识。
此功能支持以下方案:
使用一个或多个服务以及一个或多个分配的标识部署新应用程序
将一个或多个托管标识分配给现有(Azure 部署)应用程序以访问 Azure 资源
以下方案不受支持或不建议使用。 这些作可能不会被阻止,但可能会导致应用程序中出现中断:
删除或更改分配给应用程序的标识。 如果需要进行更改,请提交单独的部署,先添加新的标识分配,然后再删除先前的标识分配。 从现有应用程序中删除标识可能会产生不良影响,包括使应用程序处于不可升级状态。 如果需要删除标识,则完全删除应用程序是安全的。 删除应用程序会删除与应用程序关联的任何系统分配的标识,并删除与分配给应用程序的任何用户分配标识的所有关联。
Service Fabric 不支持弃用的 AzureServiceTokenProvider 中的托管标识。 而是使用 Azure 标识 SDK 在 Service Fabric 中使用托管标识