Partager via


Tutoriel : Utiliser des connexions basées sur l’identité plutôt que des secrets avec des déclencheurs et des liaisons

Ce tutoriel vous montre comment configurer Azure Functions pour vous connecter à des files d’attente Azure Service Bus à l’aide d’identités managées plutôt que de secrets stockés dans les paramètres de l’application de fonction. Ce tutoriel est la suite du tutoriel Créer une application de fonction sans secrets de stockage par défaut dans sa définition. Pour en savoir plus sur les connexions basées sur l’identité, consultez Configurer une connexion basée sur l’identité.

Même si les procédures indiquées fonctionnent généralement pour tous les langages, ce tutoriel prend plus particulièrement en charge les fonctions de bibliothèque de classes C# sur Windows.

Dans ce tutoriel, vous allez apprendre à :

  • Créez un espace de noms et une file d’attente Service Bus.
  • Configurer votre application de fonction avec une identité managée.
  • Créer une attribution de rôle accordant à cette identité l’autorisation de lire à partir de la file d’attente Service Bus.
  • Créer et déployer une application de fonction avec un déclencheur Service Bus.
  • Vérifier votre connexion basée sur l’identité à Service Bus.

Prérequis

Suivez le tutoriel précédent : Créer une application de fonction avec des connexions basées sur l’identité.

Créer un espace de noms et une file d’attente Service Bus

  1. Dans le portail Azure, choisissez Créer une ressource (+) .

  2. Sur la page Créer une ressource, recherchez et sélectionnez Service Bus, puis sélectionnez Créer.

  3. Dans la page Informations de base, utilisez le tableau suivant pour configurer les paramètres d’espace de noms Service Bus. Utilisez les valeurs par défaut pour les options restantes.

    Option Valeur suggérée Description
    Abonnement Votre abonnement Abonnement sous lequel vos ressources sont créées.
    Groupe de ressources myResourceGroup Le groupe de ressources que vous avez créé avec votre application de fonction.
    Nom de l’espace de noms Nom globalement unique Espace de noms de votre instance à partir duquel déclencher votre fonction. Étant donné que l’espace de noms est accessible publiquement, vous devez utiliser un nom qui est globalement unique dans Azure. Le nom doit également comporter entre 6 et 50 caractères, contenir uniquement des caractères alphanumériques et des tirets, et ne pas commencer par un chiffre.
    Emplacement myFunctionRegion La région dans laquelle vous avez créé votre application de fonction.
    Niveau tarifaire De base Niveau Service Bus de base.
  4. Sélectionnez Revoir + créer. Une fois la validation terminée, sélectionnez Créer.

  5. Une fois le déploiement terminé, sélectionnez Accéder à la ressource.

  6. Dans votre espace de noms Service Bus, sélectionnez + File d’attente pour ajouter une file d’attente.

  7. Entrez myinputqueue comme nom de la nouvelle file d’attente, puis sélectionnez Créer.

Maintenant que vous avez une file d’attente, vous pouvez ajouter une attribution de rôle à l’identité managée de votre application de fonction.

Configurer votre déclencheur Service Bus avec une identité managée

Pour utiliser des déclencheurs Service Bus avec des connexions basées sur l’identité, vous devez ajouter l’attribution de rôle Récepteur de données Azure Service Bus à l’identité managée dans votre application de fonction. Ce rôle est requis lors de l’utilisation d’identités managées à déclencher à partir de votre espace de noms Service Bus. Vous pouvez également ajouter votre propre compte à ce rôle, ce qui permet de se connecter à l’espace de noms Service Bus au cours du test local.

Notes

Les exigences de rôle pour l’utilisation de connexions basées sur l’identité varient en fonction du service et de la façon dont vous vous y connectez. Les besoins varient selon les déclencheurs, les liaisons d’entrée et les liaisons de sortie. Pour plus d’informations sur des exigences de rôle spécifiques, consultez la documentation du service relative aux déclencheurs et aux liaisons.

  1. Dans l’espace de noms Service Bus que vous avez créé, sélectionnez Contrôle d’accès (IAM). C’est sur cette page que vous pouvez afficher et configurer qui a accès à la ressource.

  2. Sélectionnez + Ajouter, puis Ajouter une attribution de rôle.

  3. Recherchez Récepteur de données Azure Service Bus, sélectionnez-le, puis sélectionnez Suivant.

  4. Dans l’onglet Membres, sous Attribuer l’accès à, choisissez Identité managée

  5. Sélectionnez Sélectionner des membres pour ouvrir le volet Sélectionner des identités managées.

  6. Vérifiez que l’Abonnement est celui dans lequel vous avez créé les ressources précédemment.

  7. Dans le sélecteur Identité managée, choisissez Application de fonction dans la catégorie Identité managée affectée par le système. Un nombre entre parenthèses est sans doute affiché en regard de l’étiquette Application de fonction, indiquant le nombre d’applications de l’abonnement ayant des identités affectées par le système.

  8. Votre application doit apparaître dans une liste sous les champs d’entrée. Si vous ne la voyez pas, vous pouvez utiliser la zone Sélectionner pour filtrer les résultats avec le nom de votre application.

  9. Sélectionnez votre application. Elle doit descendre dans la section Membres sélectionnés. Sélectionnez Sélectionner.

  10. Dans l’écran Ajouter une attribution de rôle, sélectionnez Vérifier + attribuer. Vérifiez la configuration, puis sélectionnez Vérifier + attribuer.

Vous avez accordé à votre application de fonction l’accès à l’espace de noms Service Bus à l’aide d’identités managées.

Se connecter à Service Bus dans votre application de fonction

  1. Dans le portail, recherchez l’application de fonction que vous avez créée dans le tutoriel précédent ou accédez-y dans la page Function App.

  2. Dans votre application de fonction, développez Paramètres, puis sélectionnez Variables d’environnement.

  3. Dans l’onglet Paramètres de l’application, sélectionnez + Ajouter pour créer un paramètre. Utilisez les informations du tableau suivant pour entrer le nom et la valeur du nouveau paramètre :

    Nom Valeur Description
    ServiceBusConnection__fullyQualifiedNamespace <SERVICE_BUS_NAMESPACE>.servicebus.windows.net Ce paramètre connecte votre application de fonction au bus des services. Utilisez une connexion basée sur l’identité plutôt que des secrets.
  4. Sélectionnez Appliquer, puis Appliquer et Confirmer pour enregistrer vos modifications, puis redémarrer la fonction de l’application.

Remarque

Lorsque vous utilisez Azure App Configuration ou Key Vault pour fournir des paramètres pour les connexions d’identité managée, les noms de paramètres doivent utiliser un séparateur de clé valide tel que : ou / à la place de __ pour s’assurer que les noms sont résolus correctement.

Par exemple : ServiceBusConnection:fullyQualifiedNamespace.

Maintenant que vous avez préparé l’application de fonction à se connecter à l’espace de noms Service Bus à l’aide d’une identité managée, vous pouvez ajouter une nouvelle fonction qui utilise un déclencheur Service Bus à votre projet local.

Ajouter une fonction déclenchée par Service Bus

  1. Exécutez la commande func init, de la façon suivante, pour créer un projet Functions dans un dossier nommé LocalFunctionProj avec le runtime spécifié :

    func init LocalFunctionProj --dotnet
    
  2. Accédez au dossier du projet :

    cd LocalFunctionProj
    
  3. Dans le dossier racine du projet, exécutez la commande suivante :

    dotnet add package Microsoft.Azure.WebJobs.Extensions.ServiceBus --version 5.2.0
    

    Cette commande remplace la version par défaut du package d’extension Service Bus par une version qui prend en charge les identités managées.

  4. Exécutez la commande suivante pour ajouter une fonction déclenchée par Service Bus au projet :

    func new --name ServiceBusTrigger --template ServiceBusQueueTrigger 
    

    Cette commande ajoute le code pour un nouveau déclencheur Service Bus et une référence au package d’extension. Vous devez ajouter un paramètre de connexion de l’espace de noms Service Bus pour ce déclencheur.

  5. Ouvrez le nouveau fichier de projet ServiceBusTrigger.cs et remplacez la classe ServiceBusTrigger par le code suivant :

    public static class ServiceBusTrigger
    {
        [FunctionName("ServiceBusTrigger")]
        public static void Run([ServiceBusTrigger("myinputqueue", 
            Connection = "ServiceBusConnection")]string myQueueItem, ILogger log)
        {
            log.LogInformation($"C# ServiceBus queue trigger function processed message: {myQueueItem}");
        }
    }
    

    Cet exemple de code met à jour le nom de la file d’attente de façon à utiliser myinputqueue, qui est le même nom que celui de la file d’attente que vous avez créée précédemment. Il définit également le nom de la connexion Service Bus sur ServiceBusConnection. Ce nom correspond à l’espace de noms Service Bus utilisé par la connexion basée sur l’identité ServiceBusConnection__fullyQualifiedNamespace que vous avez configuré dans le portail.

Remarque

Si vous essayez d’exécuter vos fonctions maintenant à l’aide de func start, une erreur s’affiche. Cela est dû au fait que vous n’avez pas de connexion basée sur l’identité définie localement. Si vous souhaitez exécuter votre fonction localement, définissez le paramètre d’application ServiceBusConnection__fullyQualifiedNamespace dans local.settings.json comme vous l’avez fait dans [la section précédente](#connect-to-the service-bus-in-your-function-app). En outre, vous devez attribuer le rôle à votre identité de développeur. Pour plus d’informations, consultez la section Développement local avec connexions basées sur une identité.

Remarque

Lorsque vous utilisez Azure App Configuration ou Key Vault pour fournir des paramètres pour les connexions d’identité managée, les noms de paramètres doivent utiliser un séparateur de clé valide tel que : ou / à la place de __ pour s’assurer que les noms sont résolus correctement.

Par exemple : ServiceBusConnection:fullyQualifiedNamespace.

Publier le projet mis à jour

  1. Exécutez la commande suivante afin de générer localement les fichiers nécessaires pour le package de déploiement :

    dotnet publish --configuration Release
    
  2. Accédez au sous-dossier \bin\Release\netcoreapp3.1\publish et créez un fichier .zip à partir de son contenu.

  3. Publiez le fichier .zip. Pour cela, exécutez la commande suivante, en remplaçant les paramètres FUNCTION_APP_NAME, RESOURCE_GROUP_NAME et PATH_TO_ZIP, selon le cas :

    az functionapp deploy -n FUNCTION_APP_NAME -g RESOURCE_GROUP_NAME --src-path PATH_TO_ZIP
    

Maintenant que vous avez mis à jour l’application de fonction avec le nouveau déclencheur, vous pouvez vérifier qu’elle fonctionne avec l’identité.

Valider vos changements

  1. Dans le portail, recherchez Application Insights, puis sélectionnez Application Insights sous Services.

  2. Dans Application Insights, naviguez jusqu’à votre instance nommée ou recherchez-la.

  3. Dans votre instance, sélectionnez Métriques en temps réel sous Examiner.

  4. Laissez l’onglet précédent ouvert et ouvrez le portail Azure dans un nouvel onglet. Dans votre nouvel onglet, accédez à votre espace de noms Service Bus, puis sélectionnez Files d’attente dans le menu de gauche.

  5. Sélectionnez votre file d’attente nommée myinputqueue.

  6. Sélectionnez Service Bus Explorer dans le menu de gauche.

  7. Envoyez un message de test.

  8. Sélectionnez votre onglet Métriques en temps réel, puis regardez l’exécution de la file d’attente Service Bus.

Félicitations ! Vous avez configuré votre déclencheur de file d’attente Service Bus avec une identité managée.

Nettoyer les ressources

Au cours des étapes précédentes, vous avez créé des ressources Azure au sein d’un groupe de ressources. Si vous ne pensez pas avoir besoin de ces ressources à l’avenir, vous pouvez les supprimer en supprimant le groupe de ressources.

Dans le menu ou la page d’accueil du portail Azure, sélectionnez Groupes de ressources. Ensuite, dans la page Groupes de ressources, sélectionnez myResourceGroup.

Dans la page myResourceGroup, assurez-vous que les ressources répertoriées sont bien celles que vous souhaitez supprimer.

Sélectionnez Supprimer le groupe de ressources, tapez myResourceGroup dans la zone de texte pour confirmer, puis sélectionnez Supprimer.

Étapes suivantes

Dans ce tutoriel, vous avez créé une application de fonction avec des connexions basées sur l’identité.

Passez à l’article suivant pour découvrir comment gérer l’identité.