Partager via


Tutoriel : Utiliser une identité managée pour appeler Azure Functions à partir d’une application Azure Spring Apps

Remarque

Les plans Essentiel, Standard et Entreprise seront déconseillés à partir de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de la mise hors service d’Azure Spring Apps.

Le plan de consommation Standard et dédié sera déconseillé à partir du 30 septembre 2024, avec un arrêt complet au bout de six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation Standard et dédié Azure Spring Apps vers Azure Container Apps.

Cet article s’applique au : Niveau ✔️ De base/Standard ✔️ Entreprise

Cet article vous montre comment créer une identité managée pour une application hébergée Azure Spring Apps et comment l’utiliser pour appeler des fonctions déclenchées via HTTP.

Azure Functions et App Services disposent d’une prise en charge intégrée de l’authentification Microsoft Entra. En utilisant cette fonctionnalité d’authentification intégrée et des identités managées pour Azure Spring Apps, vous pouvez appeler des services RESTful en tirant parti de la sémantique OAuth moderne. Cette méthode ne demande pas le stockage de secrets dans le code et permet un contrôle plus précis de l’accès aux ressources externes.

Prérequis

Créer un groupe de ressources

Un groupe de ressources est un conteneur logique dans lequel les ressources Azure sont déployées et gérées. Utilisez la commande suivante afin de créer un groupe de ressources pour contenir une application de fonction :

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

Si vous souhaitez obtenir plus d’informations, consultez la commande az group create.

Créer une application de fonction

Pour créer une application de fonction, vous devez d’abord créer un compte de stockage de secours. Vous pouvez utiliser la commande az storage account create.

Important

Chaque application de fonction et chaque compte de stockage doit avoir un nom unique.

Utilisez la commande suivante pour créer le compte de stockage. Remplacez <function-app-name> par le nom de votre application de fonction et <storage-account-name> par le nom de votre compte de stockage.

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

Une fois le compte de stockage créé, utilisez la commande suivante pour créer l’application de fonction :

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

Notez la valeur hostNames retournée, qui est au format https://<your-functionapp-name>.azurewebsites.net. Utilisez cette valeur dans l’URL racine de l’application de fonction pour tester l’application de fonction.

Activez l’authentification Microsoft Entra

Utilisez les étapes suivantes afin d’activer l’authentification Microsoft Entra pour accéder à votre application de fonction.

  1. Dans le Portail Azure, accédez à votre groupe de ressources, puis ouvrez l’application de fonction créée.
  2. Dans le volet de navigation, sélectionnez Authentification, puis Ajouter un fournisseur d’identité dans le volet principal.
  3. Dans la page Ajouter un fournisseur d’identité, sélectionnez Microsoft à partir du menu déroulant Fournisseur d’identité.
  4. Sélectionnez Ajouter.
  5. Pour les paramètres De base de la page Ajouter un fournisseur d’identité, définissez Types de comptes pris en charge sur N’importe quel annuaire Microsoft Entra – Multi-tenant.
  6. Définissez Requêtes non authentifiées sur HTTP 401 Non autorisé : recommandé pour des API. Ce paramètre garantit que toutes les demandes non authentifiées sont refusées (réponse 401).
  7. Sélectionnez Ajouter.

Une fois les paramètres ajoutés, l’application de fonction redémarre et toutes les requêtes suivantes sont invitées à se connecter via Microsoft Entra ID. Vous pouvez tester que les requêtes non authentifiées sont actuellement rejetées avec l’URL racine de l’application de fonction (retournée dans la sortie hostNames de la commande az functionapp create). Vous devez ensuite être redirigé vers l’écran de connexion Microsoft Entra de votre organisation.

Vous avez besoin de l’ID d’application et de l’URI d’ID d’application pour une utilisation ultérieure. Dans le Portail Azure, accédez à l’application de fonction que vous avez créée.

Pour obtenir l’ID d’application, sélectionnez Authentification dans le volet de navigation, puis copiez la valeur ID d’application (client) du fournisseur d’identité qui inclut le nom de l’application de fonction.

Capture d’écran du Portail Azure montrant la page Authentification d’une application de fonction au sein de laquelle le nom d’application de fonction est mis en surbrillance dans le fournisseur d’identité.

Pour obtenir l’URI ID d’application, sélectionnez Exposer une API dans le volet de navigation, puis copiez la valeur de l’URI d’ID d’application.

Capture d’écran du Portail Azure montrant la page Exposer une API pour une application de fonction dans laquelle l’URI d’ID d’application est mis en surbrillance.

Créer une fonction déclenchée via HTTP

Dans un répertoire local vide, utilisez les commandes suivantes pour créer une application de fonction, puis ajoutez une fonction déclenchée via HTTP :

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

Par défaut, les fonctions utilisent l’authentification basée sur des clés pour sécuriser des points de terminaison HTTP. Pour activer l’authentification Microsoft Entra permettant de sécuriser l’accès aux fonctions, définissez la clé authLevel sur anonymous dans le fichier function.json, comme illustré dans l’exemple suivant :

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

Pour plus d’informations, consultez la section Points de terminaison HTTP sécurisés de Sécurisation d’Azure Functions.

Utilisez la commande suivante pour publier l’application sur l’instance créée à l’étape précédente :

func azure functionapp publish <function-app-name>

La sortie de la commande de publication doit répertorier l’URL dans votre fonction récemment créée, tel qu’illustré dans la sortie suivante :

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

Créer une instance de service Azure Spring Apps et une application

Utilisez les commandes suivantes pour ajouter l’extension Spring et créer une instance d’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>

Utilisez la commande suivante pour créer une application nommée msiapp avec une identité managée affectée par le système, comme le demande le paramètre --assign-identity :

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

Générer un exemple d’application Spring Boot pour appeler la fonction

Cet exemple appelle la fonction déclenchée via HTTP en demandant d’abord un jeton d’accès à partir du point de terminaison MSI et en utilisant ce jeton pour authentifier la requête HTTP de la fonction. Si vous souhaitez obtenir plus d’informations, consultez la section Obtenir un jeton par HTTP du Guide pratique de l’utilisation d’identités managées pour ressources Azure sur une machine virtuelle Azure afin d’acquérir un jeton d’accès.

  1. Utilisez la commande suivante pour cloner l’exemple de projet :

    git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
    
  2. Utilisez la commande suivante pour spécifier l’URI de votre fonction et le nom du déclencheur dans les propriétés de votre application :

    cd azure-spring-apps-samples/managed-identity-function
    vim src/main/resources/application.properties
    
  3. Pour utiliser une identité managée pour des applications Azure Spring Apps, ajoutez à src/main/resources/application.properties les propriétés suivantes comportant ces valeurs.

    azure.function.uri=https://<function-app-name>.azurewebsites.net
    azure.function.triggerPath=httptrigger
    azure.function.application-id.uri=<function-app-application-ID-uri>
    
  4. Utilisez la commande suivante pour empaqueter votre exemple d’application :

    mvn clean package
    
  5. Utilisez la commande suivante pour déployer l’application sur 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. Utilisez la commande suivante pour accéder au point de terminaison public ou au point de terminaison de test afin de tester votre application :

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

    Le message suivant est retourné dans le corps de la réponse.

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

Étapes suivantes