通过 Service Fabric 使用 Azure 的托管标识

在构建云应用程序时,一个常见难题是如何安全地管理代码中的凭据,以便向各种服务进行身份验证,而无需将凭据以本地方式保存在开发人员工作站或源代码管理中。 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,用于授予对 Azure 资源的基于角色的访问权限。

  • 服务主体 - 一个 Microsoft Entra ID 对象,表示给定租户中 Microsoft Entra ID 应用程序的投影(另请参阅服务主体。)

托管标识分为两种类型:

  • 系统分配托管标识直接在 Azure 服务实例上启用。 系统分配标识的生命周期对于启用它的 Azure 服务实例来说是独一无二的。
  • 用户分配托管标识是作为独立的 Azure 资源创建的。 可以将该标识分配给一个或多个 Azure 服务实例,并独立于这些实例的生命周期对其进行管理。

若要进一步了解托管标识类型之间的差异,请参阅 Azure 资源托管标识如何工作

Service Fabric 应用程序支持的方案

Service Fabric 的托管标识仅在 Azure 部署的 Service Fabric 群集中受支持,且仅适用于部署为 Azure 资源的应用程序。 无法为未部署为 Azure 资源的应用程序分配标识。 从概念上讲,Azure Service Fabric 群集中的托管标识支持包括两个阶段:

  1. 将一个或多个托管标识分配到应用程序资源;可以分别为某个应用程序分配单个系统分配的标识和/或最多 32 个用户分配的标识。

  2. 在应用程序的定义中,可将分配给应用程序的某个标识映射到构成该应用程序的任意单个服务。

应用程序的系统分配的标识是该应用程序特有的;用户分配的标识是独立的资源,可分配到多个应用程序。 在应用程序中,可将单个标识(无论是系统分配的还是用户分配的)分配到该应用程序的多个服务,但对于每个服务,只能为其分配一个标识。 最后,必须显式为服务分配标识才能访问此功能。 实际上,应用程序标识到其构成服务的映射可以实现应用程序内隔离 — 一个服务只能使用映射到其自身的标识。

此功能支持以下方案:

  • 部署包含一个或多个服务以及一个或多个已分配标识的新应用程序

  • 将一个或多个托管标识分配到现有的(Azure 部署的)应用程序以访问 Azure 资源

以下方案不受支持或不建议使用。 这些操作可能不会受到阻止,但可能会导致应用程序中断:

  • 删除或更改分配给应用程序的标识。 如果需要进行更改,请提交单独的部署,以先添加新的标识分配,然后删除以前分配的标识。 从现有应用程序中删除标识可能会产生不良影响,包括使应用程序处于一种不可升级的状态。 如果需要删除标识,完全删除应用程序是安全的。 删除应用程序会删除与应用程序关联的任何系统分配标识,并删除与分配给应用程序的任何用户分配标识的所有关联。

  • 目前,对托管标识的 Service Fabric 支持未集成到 AzureServiceTokenProvider

后续步骤