Cómo usar identidades administradas para App Service y Azure Functions

En este artículo se muestra cómo crear una identidad administrada para las aplicaciones App Service y Azure Functions y cómo usarla para acceder a otros recursos.

Importante

Las identidades administradas de App Service y Azure Functions no se comportarán según lo esperado si la aplicación se migra entre suscripciones e inquilinos. La aplicación tiene que obtener una nueva identidad, para lo cual se deshabilita y vuelve a habilitar la característica. Los recursos de nivel inferior también han de tener directivas de acceso actualizadas para utilizar la nueva identidad.

Nota

Las identidades administradas no están disponibles para las aplicaciones implementadas en Azure Arc.

Una identidad administrada de Azure Active Directory (Azure AD) permite a la aplicación acceder fácilmente a otros recursos protegidos por Azure AD, como Azure Key Vault. La identidad está administrada por la plataforma Azure y no requiere que aprovisione o rote los secretos. Para más información sobre las identidades administradas en Azure AD, consulte Identidades administradas para recursos de Azure.

La aplicación puede tener dos tipos de identidades:

  • Una identidad asignada por el sistema está asociada a la aplicación y se elimina si se elimina la aplicación. Una aplicación solo puede tener una identidad asignada por el sistema.
  • Una identidad asignada por el usuario es un recurso de Azure independiente que puede asignarse a la aplicación. Una aplicación puede tener varias identidades asignadas por el usuario.

Adición de una identidad asignada por el sistema

  1. En el panel de navegación izquierdo de la página de la aplicación, desplácese hacia abajo hasta el grupo Configuración.

  2. Seleccione Identidad.

  3. En la pestaña Asignado por el sistema, cambie Estado a Activado. Haga clic en Save(Guardar).

    Screenshot that shows where to switch Status to On and then select Save.

Nota

Para encontrar la identidad administrada de la aplicación web o de ranura en Azure Portal, busque en la sección Configuración de usuario en Aplicaciones empresariales. Normalmente, el nombre de la ranura es similar a <app name>/slots/<slot name>.

Adición de una identidad asignada por el usuario

La creación de una aplicación con una identidad asignada por el usuario requiere que se cree la identidad y luego se agregue su identificador de recurso a la configuración de la aplicación.

En primer lugar, tendrá que crear un recurso de identidad asignada por el usuario.

  1. Cree un recurso de identidad administrada asignada por el usuario según estas instrucciones.

  2. En el panel de navegación izquierdo de la página de la aplicación, desplácese hacia abajo hasta el grupo Configuración.

  3. Seleccione Identidad.

  4. En la pestaña Usuario asignado, haga clic Agregar.

  5. Busque la identidad que creó anteriormente y selecciónela. Haga clic en Agregar.

    Managed identity in App Service

Importante

Si selecciona Agregar después de seleccionar una identidad asignada por el usuario, la aplicación se reiniciará.

Configurar recurso de destino

Es posible que deba configurar el recurso de destino para permitir el acceso desde la aplicación o la función. Por ejemplo, si solicita un token para acceder a Key Vault, también debe agregar una directiva de acceso que incluya la identidad administrada de la aplicación o la función. De lo contrario, las llamadas a Key Vault se rechazarán, incluso si usa un token válido. Lo mismo se aplica a Azure SQL Database. Para más información sobre los recursos que admiten tokens de Azure Active Directory, consulte Servicios de Azure que admiten autenticación de Azure AD.

Importante

Los servicios de back-end para identidades administradas mantienen una memoria caché por URI de recurso durante unas veinticuatro horas. Si actualiza la directiva de acceso de un recurso de destino determinado y recupera inmediatamente un token para ese recurso, es posible que siga obteniendo un token en caché con permisos obsoletos hasta la expiración del token. Actualmente no existe ninguna forma de forzar la actualización de un token.

Conectar a los servicios de Azure en el código de la aplicación

Con su identidad administrada, una aplicación puede obtener tokens para los recursos de Azure protegidos por Azure Active Directory, como Azure SQL Database, Azure Key Vault y Azure Storage. Estos tokens representan a la aplicación que accede al recurso, y no a un usuario específico de la aplicación.

App Service y Azure Functions proporcionan un punto de conexión REST accesible internamente para la recuperación de tokens. Se puede acceder al punto de conexión REST desde dentro de la aplicación con un HTTP GET estándar, que se puede implementar con un cliente HTTP genérico en todos los lenguajes. Para .NET, JavaScript, Java y Python, la biblioteca cliente de identidad de Azure proporciona una abstracción sobre este punto de conexión REST y simplifica la experiencia de desarrollo. Conectarse a otros servicios de Azure es tan sencillo como agregar un objeto de credencial al cliente específico del servicio.

La solicitud HTTP GET sin formato es similar al ejemplo siguiente:

GET /MSI/token?resource=https://vault.azure.net&api-version=2019-08-01 HTTP/1.1
Host: localhost:4141
X-IDENTITY-HEADER: 853b9a84-5bfa-4b22-a3f3-0b9a43d9ad8a

Y una respuesta de ejemplo puede tener el siguiente aspecto:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJ0eXAi…",
    "expires_on": "1586984735",
    "resource": "https://vault.azure.net",
    "token_type": "Bearer",
    "client_id": "5E29463D-71DA-4FE0-8E69-999B57DB23B0"
}

Esta respuesta es la misma que la respuesta para la solicitud de token de acceso de servicio a servicio de Azure AD. Para acceder a Key Vault, agregará el valor de access_token a una conexión de cliente con el almacén.

Para más información sobre el punto de conexión REST, consulte Referencia del punto de conexión REST.

Quitar una identidad

Cuando se quita una identidad asignada por el sistema, se elimina de Azure Active Directory. Las identidades asignadas por el sistema también se quitan automáticamente de Azure Active Directory cuando se elimina el propio recurso de la aplicación.

  1. En el panel de navegación izquierdo de la página de la aplicación, desplácese hacia abajo hasta el grupo Configuración.

  2. Seleccione Identidad. A continuación, siga los pasos según el tipo de identidad:

    • Identidad asignada por el sistema: en la pestaña Asignado por el sistema, cambie Estado a Desactivado. Haga clic en Save(Guardar).
    • Identidad asignada por el usuario: haga clic en la pestaña Asignado por el usuario, active la casilla de la identidad y haga clic en Quitar. Haga clic en para confirmar.

Nota

También hay una configuración de aplicación que se puede establecer, WEBSITE_DISABLE_MSI, que simplemente deshabilita el servicio de token local. Sin embargo, con este valor, la identidad no se mueve y las herramientas siguen mostrando la identidad administrada como "activada" o "habilitada". Por lo tanto, no se recomienda su uso.

Referencia de punto de conexión REST

Una aplicación con una identidad administrada hace que este punto de conexión esté disponible mediante la definición de dos variables de entorno:

  • IDENTITY_ENDPOINT: dirección URL del servicio de token local.
  • IDENTITY_HEADER: encabezado que se usa para ayudar a mitigar los ataques de falsificación de solicitudes del servidor (SSRF). La plataforma se encarga de cambiarlo.

La variable IDENTITY_ENDPOINT es una dirección URL local desde la que la aplicación puede solicitar tokens. Para obtener un token para un recurso, realice una solicitud HTTP GET para este punto de conexión, incluyendo los parámetros siguientes:

Nombre de parámetro En Descripción
resource Consultar El URI del recurso de Azure AD del recurso para el que se debe obtener un token. Este podría ser uno de los servicios de Azure que admiten la autenticación de Azure AD o cualquier otro URI de recurso.
api-version Consultar La versión de la API de token que se usará. Use 2019-08-01.
X-IDENTITY-HEADER Encabezado El valor de la variable de entorno IDENTITY_HEADER. Este encabezado se utiliza para ayudar a mitigar los ataques de falsificación de solicitudes del servidor (SSRF).
client_id Consultar (Opcional) El identificador del cliente de la identidad asignada por el usuario que se va a usar. No se puede usar en una solicitud que incluya principal_id, mi_res_id o object_id. Si se omiten todos los parámetros de identificador (client_id, principal_id, object_id y mi_res_id), se usa la identidad asignada por el sistema.
principal_id Consultar (Opcional) El identificador de la entidad de seguridad de la identidad asignada por el usuario que se va a usar. object_id es un alias que se puede utilizar en su lugar. No se puede usar en una solicitud que incluya client_id, mi_res_id u object_id. Si se omiten todos los parámetros de identificador (client_id, principal_id, object_id y mi_res_id), se usa la identidad asignada por el sistema.
mi_res_id Consultar (Opcional) El identificador del recurso de Azure de la identidad asignada por el usuario que se va a usar. No se puede usar en una solicitud que incluya principal_id, client_id o object_id. Si se omiten todos los parámetros de identificador (client_id, principal_id, object_id y mi_res_id), se usa la identidad asignada por el sistema.

Importante

Si intenta obtener tokens para las identidades asignadas por el usuario, debe incluir una de las propiedades opcionales. De lo contrario, el servicio de token intentará obtener un token para una identidad que haya asignado el sistema, la cual puede existir o no.

Pasos siguientes