将具有托管标识的应用程序部署到 Service Fabric 托管群集
若要使用托管标识部署 Service Fabric 应用程序,需通过 Azure 资源管理器部署应用程序,通常需要使用 Azure 资源管理器模板。 若要详细了解如何通过 Azure 资源管理器部署 Service Fabric 应用程序,请参阅使用 Azure 资源管理器将应用程序部署到托管群集。
注意
未部署为 Azure 资源的应用程序不能有托管标识。
托管群集上的 API 版本 "2021-05-01"
支持使用托管标识部署 Service Fabric 应用程序。
此处提供了示例托管群集模板:Service Fabric 托管群集模板
Service Fabric 托管群集中的托管标识支持
使用 Azure 资源的托管标识配置 Service Fabric 应用程序并部署到群集时,它将触发 Service Fabric 托管群集上“托管标识令牌服务”的自动配置。 此服务负责使用 Service Fabric 应用程序的托管标识对这些应用程序进行身份验证,以及代表它们获取访问令牌。 启用此服务以后,即可在 Service Fabric Explorer 中左侧窗格的“系统”部分看到它,它以 fabric:/System/ManagedIdentityTokenService 名称运行。
注意
首次使用托管标识部署应用程序时,由于自动群集配置更改,可能预计部署时间会较长(仅限此次)。 区域性群集可能需要 15 分钟,而跨区域群集可能需要 45 分钟。 如果有任何其他部署正在进行中,托管标识配置将必须等待这些部署先完成。
应用程序资源支持分配 SystemAssigned 或 UserAssigned 两者,并且分配可以按以下代码片段所示完成。
{
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"apiVersion": "2021-05-01",
"identity": {
"type": "SystemAssigned",
"userAssignedIdentities": {}
},
}
用户分配的标识
若要为应用程序启用用户分配的托管标识,请先将类型为 userAssigned 的 identity 属性添加到应用程序资源和引用的用户分配标识。 然后将 managedIdentities 节添加到 application 资源的 properties 节中,该资源包含一个易记名称的列表,可以为每个用户分配的标识进行 principalId 映射。 有关用户分配的标识的详细信息,请参阅创建、列出或删除用户分配的托管标识。
应用程序模板
若要为应用程序启用用户分配的托管标识,请先将类型为 userAssigned 的 identity 属性添加到应用程序资源和引用的用户分配标识,然后将 managedIdentities 对象添加到 properties 节中,该节包含一个易记名称的列表,可以为每个用户分配的标识进行 principalId 映射。
{
"apiVersion": "2021-05-01",
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[parameters('applicationVersion')]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
],
"identity": {
"type" : "userAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]": {}
}
},
"properties": {
"version": "[parameters('applicationVersion')]",
"parameters": {
},
"managedIdentities": [
{
"name" : "[parameters('userAssignedIdentityName')]",
"principalId" : "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName')), '2018-11-30').principalId]"
}
]
}
}
在上面的示例中,用户分配标识的资源名称用作应用程序的托管标识的易记名称。 以下示例假定实际的易记名称为“AdminUser”。
应用程序包
对于在 Azure 资源管理器模板的
managedIdentities
节中定义的每个标识,请在应用程序清单的 Principals 节下添加<ManagedIdentity>
标记。Name
属性需与managedIdentities
节中定义的name
属性匹配。ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="AdminUser" /> </ManagedIdentities> </Principals>
在 ServiceManifestImport 节中,为使用托管标识的服务添加 IdentityBindingPolicy。 此策略将
AdminUser
标识映射到特定于服务的标识名称,该名称需在以后添加到服务清单中。ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" /> </Policies> </ServiceManifestImport>
更新服务清单,将 ManagedIdentity 添加到 Resources 节中,其名称与应用程序清单的
IdentityBindingPolicy
中的ServiceIdentityRef
匹配:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
系统分配的托管标识
应用程序模板
若要为应用程序启用系统分配的托管标识,请将类型为 systemAssigned 的 identity 属性添加到应用程序资源,如以下示例所示:
{
"apiVersion": "2021-05-01",
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'), '/versions/', parameters('applicationTypeVersion'))]"
],
"identity": {
"type" : "systemAssigned"
},
"properties": {
"typeName": "[parameters('applicationTypeName')]",
"typeVersion": "[parameters('applicationTypeVersion')]",
"parameters": {
}
}
}
此属性向 Azure 资源管理器、托管标识和 Service Fabric 资源提供程序分别声明:此资源应该有一个隐式 (system assigned
) 托管标识。
应用程序和服务包
更新应用程序清单,在 Principals 节添加包含单个条目的 ManagedIdentity 元素,如下所示:
ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="SystemAssigned" /> </ManagedIdentities> </Principals>
这会将分配给应用程序作为资源的标识映射到某个易记名称,以便进一步分配给包含该应用程序的服务。
在 ServiceManifestImport 节(对应于已向其分配了托管标识的服务)中添加 IdentityBindingPolicy 元素,如下所示:
ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" /> </Policies> </ServiceManifestImport>
此元素将应用程序的标识分配给服务;没有此分配,服务将无法访问应用程序的标识。 在上面的代码片段中,
SystemAssigned
标识(保留关键字)映射到服务的定义,采用的易记名称为WebAdmin
。更新服务清单,将 ManagedIdentity 元素添加到 Resources 节中,其名称与
ServiceIdentityRef
设置的值匹配,该设置来自应用程序清单中的IdentityBindingPolicy
定义:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
这是一个等效映射,等效于将标识映射到服务(如上所述),但却是从服务定义的角度来看。 在这里,标识按其易记名称 (
WebAdmin
) 引用,如应用程序清单所述。