Compartir vía


Tutorial: Uso de una identidad administrada para invocar Azure Functions desde una aplicación de Azure Spring Apps

Nota:

Los planes de Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retiro de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.

El plan de consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para obtener más información, consulte Migrar el plan de consumo y dedicado Azure Spring Apps Standard a Azure Container Apps.

Este artículo se aplica a:✅ Básico/Estándar ✅ Enterprise

Este artículo le muestra cómo crear una identidad administrada para una aplicación hospedada en Azure Spring Apps y utilizarla para invocar las funciones desencadenadas HTTP.

Tanto Azure Functions como App Services tienen compatibilidad integrada con la autenticación de Microsoft Entra. Al usar la capacidad de autenticación integrada junto con las identidades administradas de Azure Spring Apps, se pueden invocar servicios RESTful con la semántica moderna de OAuth. Este método no requiere almacenar secretos en el código y proporciona controles más pormenorizados del acceso a los recursos externos.

Requisitos previos

Crear un grupo de recursos

Un grupo de recursos es un contenedor lógico en el que se implementan y se administran los recursos de Azure. Use el siguiente comando para crear un grupo de recursos que contenga una aplicación de funciones:

az group create --name <resource-group-name> --location <location>

Para obtener más información, consulte el comando az group create.

Cree una aplicación de funciones

Para crear una aplicación de funciones, primero debe crear la cuenta de almacenamiento subyacente. Puede usar el comando az storage account create.

Importante

Las aplicaciones de funciones y las cuentas de almacenamiento deben tener nombres únicos.

Use el comando siguiente para crear la cuenta de almacenamiento. Reemplace <function-app-name> por el nombre de la aplicación de funciones y <storage-account-name> por el nombre de la cuenta de almacenamiento.

az storage account create \
    --resource-group <resource-group-name> \
    --name <storage-account-name> \
    --location <location> \
    --sku Standard_LRS

Una vez creada la cuenta de almacenamiento, use el siguiente comando para crear la aplicación de funciones:

az functionapp create \
    --resource-group <resource-group-name> \
    --name <function-app-name> \
    --consumption-plan-location <location> \
    --os-type windows \
    --runtime node \
    --storage-account <storage-account-name> \
    --functions-version 4

Anote el valor hostNames que se devuelve, que tiene el formato https://<your-functionapp-name>.azurewebsites.net. Use este valor en la dirección URL raíz de la aplicación de funciones para probar la aplicación de funciones.

Habilitar la autenticación de Microsoft Entra

Siga estos pasos para habilitar la autenticación de Microsoft Entra y poder acceder a su aplicación de funciones.

  1. En Azure Portal, vaya al grupo de recursos y abra la aplicación de funciones que creó.
  2. En el panel de navegación, seleccione Autenticación y, a continuación, seleccione Agregar proveedor de identidades en el panel principal.
  3. En la página Agregar un proveedor de identidades, seleccione Microsoft en el menú desplegable Proveedor de identidades.
  4. Seleccione Agregar.
  5. Para la configuración Básica en la página Agregar un proveedor de identidades, establezca Tipos de cuenta admitidos en Cualquier directorio de Microsoft Entra: multiinquilino.
  6. Configure las Solicitudes no autenticadas en HTTP 401 No autorizado: recomendado para las API. Esta configuración garantiza que se denieguen todas las solicitudes no autenticadas (respuesta 401).
  7. Seleccione Agregar.

Después de agregar la configuración, la aplicación de funciones se reinicia y se solicita a todas las solicitudes posteriores que inicien sesión a través de Microsoft Entra ID. Puede probar que las solicitudes no autenticadas se rechazan actualmente con la dirección URL raíz de la aplicación de funciones (devuelta en la salida hostNames del comando az functionapp create). A continuación, se le debe redirigir a la pantalla de inicio de sesión de Microsoft Entra de su organización.

Necesita el identificador de la aplicación y el URI del identificador de la aplicación para su uso posterior. En Azure Portal, vaya a la aplicación de funciones que haya creado.

Para obtener el identificador de la aplicación, seleccione Autenticación en el panel de navegación y copie el valor Id. de aplicación (cliente) para el proveedor de identidades que incluya el nombre de la aplicación de funciones.

Captura de pantalla de Azure Portal que muestra la página de autenticación de una aplicación de funciones, con el nombre de la aplicación de funciones resaltado en el proveedor de identidades.

Para obtener el URI del identificador de la aplicación, seleccione Exponer una API en el panel de navegación y, a continuación, copie el valor del URI del identificador de la aplicación.

Captura de pantalla de Azure Portal que muestra la página Exponer una API para una aplicación de funciones con el URI del id. de la aplicación resaltado.

Crear una función desencadenada mediante HTTP

En un directorio local vacío, use los siguientes comandos para crear una aplicación de funciones y agregue una función desencadenada mediante HTTP:

func init --worker-runtime node
func new --template HttpTrigger --name HttpTrigger

De forma predeterminada, las funciones usan la autenticación basada en claves para proteger los puntos de conexión HTTP. Para habilitar la autenticación de Microsoft Entra para proteger el acceso a las funciones, establezca la clave authLevel en anonymous en el archivo function.json, como se muestra en el siguiente ejemplo:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      ...
    }
  ]
}

Para más información, consulte la sección Secure HTTP endpoints (Puntos de conexión HTTP seguros) de Protección de Azure Functions.

Use el siguiente comando para publicar la aplicación en la instancia creada en el paso anterior:

func azure functionapp publish <function-app-name>

La salida del comando publish debe mostrar la dirección URL de la función recién creada, como se muestra en la salida siguiente:

Deployment completed successfully.
Syncing triggers...
Functions in <your-functionapp-name>:
    HttpTrigger - [httpTrigger]
        Invoke url: https://<function-app-name>.azurewebsites.net/api/httptrigger

Cree una instancia de servicio de Azure Spring Apps y una aplicación

Use los siguientes comandos para agregar la extensión spring y crear una instancia de Azure Spring Apps:

az extension add --upgrade --name spring
az spring create \
    --resource-group <resource-group-name> \
    --name <Azure-Spring-Apps-instance-name> \
    --location <location>

Use el siguiente comando para crear una aplicación denominada msiapp con una identidad administrada asignada por el sistema, según solicitó el parámetro --assign-identity:

az spring app create \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name "msiapp" \
    --assign-endpoint true \
    --assign-identity

Creación de una aplicación de Spring Boot de ejemplo para invocar la función

Este ejemplo invoca la función de desencadenador por HTTP solicitando primero un token de acceso desde el punto de conexión de MSI y, a continuación, usa ese token para autenticar la solicitud HTTP de la función. Para obtener más información, consulte la sección Obtener un token mediante HTTP de Cómo usar identidades administradas de recursos de Azure en una máquina virtual de Azure para adquirir un token de acceso.

  1. Use el comando siguiente para clonar el proyecto de ejemplo:

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. Use el siguiente comando para especificar el URI de la función y el nombre del desencadenador en las propiedades de la aplicación:

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. Para usar la identidad administrada para las aplicaciones de Azure Spring Apps, agregue las siguientes propiedades con estos valores a src/main/resources/application.properties.

    azure.function.uri=https://<function-app-name>.azurewebsites.net
    azure.function.triggerPath=httptrigger
    azure.function.application-id.uri=<function-app-application-ID-uri>
    
  4. Use el siguiente comando para empaquetar la aplicación de ejemplo:

    mvn clean package
    
  5. Use el siguiente comando para implementar la aplicación en Azure Spring Apps:

    az spring app deploy \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --name "msiapp" \
        --artifact-path target/asc-managed-identity-function-sample-0.1.0.jar
    
  6. Use el siguiente comando para acceder al punto de conexión público o al punto de conexión de prueba a fin de probar la aplicación:

    curl https://<Azure-Spring-Apps-instance-name>-msiapp.azuremicroservices.io/func/springcloud
    

    El siguiente mensaje se devuelve en el cuerpo de la respuesta.

    Function Response: Hello, springcloud. This HTTP triggered function executed successfully.
    

Pasos siguientes