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
- Un abonnement Azure. Si vous n’avez pas d’abonnement, créez un compte gratuit avant de commencer.
- Azure CLI version 2.45.0 ou ultérieure.
- Git.
- Apache Maven version 3.0 ou ultérieure.
- Installer Azure Functions Core Tools version 4 ou ultérieure.
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.
- Dans le Portail Azure, accédez à votre groupe de ressources, puis ouvrez l’application de fonction créée.
- Dans le volet de navigation, sélectionnez Authentification, puis Ajouter un fournisseur d’identité dans le volet principal.
- Dans la page Ajouter un fournisseur d’identité, sélectionnez Microsoft à partir du menu déroulant Fournisseur d’identité.
- Sélectionnez Ajouter.
- 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.
- 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).
- 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.
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.
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.
Utilisez la commande suivante pour cloner l’exemple de projet :
git clone https://github.com/Azure-Samples/azure-spring-apps-samples.git
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
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>
Utilisez la commande suivante pour empaqueter votre exemple d’application :
mvn clean package
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
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.