Implementación de una aplicación con identidad administrada en un clúster administrado de Service Fabric
Para implementar una aplicación de Service Fabric con una identidad administrada, la aplicación debe implementarse a través de Azure Resource Manager, normalmente con una plantilla de Azure Resource Manager. Para obtener más información sobre cómo implementar una aplicación de Service Fabric a través de Azure Resource Manager, consulte Implementación de una aplicación de clúster administrado de Service Fabric mediante una plantilla de ARM.
Nota:
Las aplicaciones que no se implementan como un recurso de Azure no pueden tener identidades administradas.
La implementación de la aplicación de Service Fabric con identidad administrada es compatible con la versión "2021-05-01"
de la API en clústeres administrados.
Las plantillas de clúster administrado de ejemplo están disponibles aquí: plantillas de clúster administrado de Service Fabric
Compatibilidad con identidad administrada en el clúster administrado de Service Fabric
Cuando una aplicación de Service Fabric se configura con identidades administradas para los recursos de Azure y se implementa en el clúster, desencadenará la configuración automática del servicio de token de identidad administrada en el clúster administrado de Service Fabric. Este servicio es responsable de la autenticación de aplicaciones de Service Fabric que usan sus identidades administradas y de la obtención de los tokens de acceso en su nombre. Una vez habilitado el servicio, puede verlo en Service Fabric Explorer, en la sección Sistema del panel izquierdo. Se ejecuta con el nombre fabric:/System/ManagedIdentityTokenService.
Nota:
La primera vez que se implementa una aplicación con identidades administradas, debería haber una implementación única más larga debido al cambio en la configuración automática del clúster. Esto debería tardar de 15 minutos para un clúster de zona a 45 minutos para un clúster que abarca varias zonas. Si hay otras implementaciones en curso, la configuración de identidad administrada tendrá que esperar a que se completen primero.
El recurso de aplicación admite la asignación de SystemAssigned o UserAssigned y esta asignación se puede realizar tal como se muestra en el fragmento de código siguiente.
{
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"apiVersion": "2021-05-01",
"identity": {
"type": "SystemAssigned",
"userAssignedIdentities": {}
},
}
Identidad asignada por el usuario
Para habilitar la aplicación con una identidad asignada por el usuario, agregue primero la propiedad de identidad al recurso de aplicación de tipo userAssigned y las identidades asignadas por el usuario a las que se hace referencia. A continuación, agregue una sección managedIdentities dentro de la sección properties del recurso application que contiene una lista de nombres descriptivos para la asignación del objeto principalId para cada una de las identidades asignadas por el usuario. Para más información sobre las identidades asignadas por el usuario, consulte Creación, enumeración o eliminación de una identidad administrada asignada por el usuario.
Plantilla de la aplicación
Para habilitar la aplicación con la identidad asignada por el usuario, primero agregue la propiedad identity al recurso de la aplicación con el tipo userAssigned y las identidades asignadas por el usuario a las que se hace referencia y, después, agregue un objeto managedIdentities dentro de la sección properties que contiene una lista de nombres descriptivos para la asignación del objeto principalId para cada una de las identidades asignadas por el usuario.
{
"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]"
}
]
}
}
En el ejemplo anterior, se usa el nombre del recurso de la identidad asignada por el usuario como nombre descriptivo de la identidad administrada para la aplicación. En los ejemplos siguientes se da por hecho que el nombre descriptivo real es "AdminUser".
Paquete de aplicación
Para cada identidad definida en la sección
managedIdentities
de la plantilla de Azure Resource Manager, agregue una etiqueta<ManagedIdentity>
en el manifiesto de aplicación, en la sección Principals. El atributoName
debe coincidir con la propiedadname
definida en la secciónmanagedIdentities
.ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="AdminUser" /> </ManagedIdentities> </Principals>
En la sección ServiceManifestImport, agregue IdentityBindingPolicy para el servicio que usa la identidad administrada. Esta directiva asigna la identidad
AdminUser
a un nombre de identidad específico del servicio que se debe agregar en el manifiesto de servicio más adelante.ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" /> </Policies> </ServiceManifestImport>
Actualice el manifiesto de servicio para agregar ManagedIdentity dentro de la sección Resources con el nombre que coincide con
ServiceIdentityRef
enIdentityBindingPolicy
del manifiesto de aplicación:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Identidad administrada asignada por el sistema
Plantilla de la aplicación
Para habilitar una aplicación con una identidad administrada asignada por el sistema, agregue la propiedad identity al recurso de aplicación, con el tipo systemAssigned como se muestra en el ejemplo siguiente:
{
"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": {
}
}
}
Esta propiedad declara (para Azure Resource Manager y los proveedores de recursos de identidad administrada y de Service Fabric, respectivamente) que este recurso debe tener una identidad administrada (system assigned
) implícita.
Aplicación y paquete de servicio
Actualice el manifiesto de aplicación para agregar un elemento ManagedIdentity en la sección Principals que contenga una sola entrada, como se muestra a continuación:
ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="SystemAssigned" /> </ManagedIdentities> </Principals>
De este modo, la identidad asignada se asigna a la aplicación como un recurso para un nombre descriptivo, para la posterior asignación a los servicios que componen la aplicación.
En la sección ServiceManifestImport correspondiente al servicio al que se está asignando la identidad administrada, agregue un elemento IdentityBindingPolicy, como se indica a continuación:
ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" /> </Policies> </ServiceManifestImport>
Este elemento asigna la identidad de la aplicación al servicio; sin esta asignación, el servicio no podrá acceder a la identidad de la aplicación. En el fragmento de código anterior, la identidad
SystemAssigned
(que es una palabra clave reservada) se asigna a la definición del servicio con el nombre descriptivoWebAdmin
.Actualice el manifiesto de servicio para agregar un elemento ManagedIdentity en la sección Resources con el nombre que coincide con el valor de la opción
ServiceIdentityRef
en la definiciónIdentityBindingPolicy
del manifiesto de aplicación:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Esta es la asignación equivalente de una identidad a un servicio, tal como se ha descrito anteriormente, pero desde la perspectiva de la definición del servicio. Aquí se hace referencia a la identidad mediante su nombre descriptivo (
WebAdmin
), como se declaró en el manifiesto de aplicación.