若要使用托管标识部署 Service Fabric 应用程序,需通过 Azure 资源管理器部署应用程序,通常需要使用 Azure 资源管理器模板。 若要详细了解如何通过 Azure 资源管理器部署 Service Fabric 应用程序,请参阅将应用程序和服务作为 Azure 资源管理器资源进行管理。
注意
未部署为 Azure 资源的应用程序不能有托管标识。
API 版本 "2019-06-01-preview" 支持使用托管标识部署 Service Fabric 应用程序。 另外,不管应用程序类型、应用程序类型版本和服务资源如何,你都可以使用同一 API 版本。
用户分配的标识
若要为应用程序启用用户分配的托管标识,请先将类型为 userAssigned 的 identity 属性添加到应用程序资源和引用的用户分配标识。 然后将 managedIdentities 节添加到 application 资源的 properties 节中,该资源包含一个易记名称的列表,可以为每个用户分配的标识进行 principalId 映射。 有关用户分配的标识的详细信息,请参阅创建、列出或删除用户分配的托管标识。
应用程序模板
若要为应用程序启用用户分配的托管标识,请先将类型为 userAssigned 的 identity 属性添加到应用程序资源和引用的用户分配标识,然后将 managedIdentities 对象添加到 properties 节中,该节包含一个易记名称的列表,可以为每个用户分配的标识进行 principalId 映射。
{
  "apiVersion": "2019-06-01-preview",
  "type": "Microsoft.ServiceFabric/clusters/applications",
  "name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
  "location": "[resourceGroup().location]",
  "dependsOn": [
    "[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'), '/versions/', parameters('applicationTypeVersion'))]",
    "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
  ],
  "identity": {
    "type" : "userAssigned",
    "userAssignedIdentities": {
        "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]": {}
    }
  },
  "properties": {
    "typeName": "[parameters('applicationTypeName')]",
    "typeVersion": "[parameters('applicationTypeVersion')]",
    "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>