Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
若要使用托管标识部署 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
) 引用,如应用程序清单所述。