Tutoriel : Connecter une application de fonction à Azure SQL avec une identité managée et des liaisons SQL

Azure Functions fournit une identité managée, qui constitue une solution clé en main permettant de sécuriser l’accès à Azure SQL Database et à d’autres services Azure. Les identités managées rendent votre application plus sûre en éliminant les secrets de votre application, tels que les informations d’identification dans les chaînes de connexion. Dans ce tutoriel, vous ajoutez une identité gérée à une application de fonctions qui utilise des liaisons Azure SQL.

Ce tutoriel utilise une identité managée attribuée par l’utilisateur (UAMI), recommandée car elle peut être partagée entre les ressources et est indépendante du cycle de vie de l’application. Pour plus d’informations sur les connexions basées sur l’identité dans Azure Functions, voir Configurer les connexions vers des services distants.

Lorsque vous aurez terminé ce tutoriel, votre application de fonctions se connecte à Azure SQL Database sans avoir besoin de nom d’utilisateur ni de mot de passe.

Un aperçu des étapes à suivre :

Accorder l’accès à la base de données à l’utilisateur Microsoft Entra

Tout d’abord, activez l’authentification Microsoft Entra dans la base de données SQL en assignant un utilisateur Microsoft Entra comme administrateur Active Directory du serveur. Cet utilisateur est différent du compte Microsoft que vous avez utilisé pour vous inscrire à votre abonnement Azure. Il doit s’agir d’un utilisateur créé, importé, synchronisé ou invité dans Microsoft Entra ID. Pour plus d’informations sur les utilisateurs Microsoft Entra autorisés, consultez Fonctionnalités et limitations de Microsoft Entra dans la base de données SQL.

Vous pouvez activer l’authentification Microsoft Entra via le portail Azure, PowerShell ou Azure CLI. Les instructions pour Azure CLI se trouvent dans la section suivante. Pour plus d’informations sur la réalisation de cette tâche via le portail Azure et PowerShell, consultez la documentation Azure SQL sur l’authentification Microsoft Entra.

  1. Si votre tenant Microsoft Entra n’a pas encore d’utilisateur, créez-en un en suivant les étapes de la section Ajouter ou supprimer des utilisateurs à l’aide de Microsoft Entra ID.

  2. Recherchez l’ID d’objet de l’utilisateur Microsoft Entra à l’aide de la commande az ad user list et remplacez <user-principal-name>. Enregistrez le résultat dans une variable.

    Pour Azure CLI 2.37.0 et versions ultérieures :

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Pour les versions antérieures d’Azure CLI :

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)
    

    Conseil

    Pour afficher la liste de tous les noms d’utilisateurs principaux dans Microsoft Entra ID, exécutez az ad user list --query [].userPrincipalName.

  3. Ajoutez cet utilisateur Microsoft Entra en tant qu’administrateur Active Directory en utilisant la az sql server ad-admin create commande dans Cloud Shell. Dans la commande suivante, remplacez <server-name> par le nom du serveur (sans le suffixe .database.windows.net).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Pour plus d’informations sur l’ajout d’un administrateur Active Directory, consultez Provisionner un administrateur Microsoft Entra pour votre serveur.

Créer une identité managée assignée à l'utilisateur

Créez une identité managée attribuée par l’utilisateur et assignez-la à votre application de fonction. Utilisez une identité attribuée par l’utilisateur car vous pouvez la réutiliser sur plusieurs ressources et son cycle de vie est indépendant de votre application de fonction.

  1. Dans le portail Azure, recherchez Identités managées et sélectionnez Créer.

  2. Choisissez votre abonnement, groupe de ressources, région, et attribuez un nom à l’identité (par exemple, my-sql-identity).

  3. Sélectionnez Vérifier + créer, puis sélectionnez Créer.

  4. Une fois l’identité créée, allez dans votre application de fonctions dans le portail.

  5. Dans Paramètres, sélectionnez Identité, puis sélectionnez l’onglet Utilisateur assigné.

  6. Sélectionnez Ajouter, choisissez l’identité gérée que vous avez créée, puis sélectionnez Ajouter.

Conseil

Vous pouvez également utiliser une identité managée assignée par le système. Si vous préférez l’assignation système, activez-la dans l’onglet Assigné au système de la page Identité . Lorsque vous utilisez une identité attribuée par le système, dans les commandes SQL, <identity-name> correspond au nom de votre application de fonction, et vous n’avez pas besoin du paramètre User Id dans la chaîne de connexion.

Accorder à l’identité managée un accès à la base de données SQL

À cette étape, connectez-vous à la base de données SQL en utilisant un compte utilisateur Microsoft Entra et accordez à l’identité gérée l’accès à la base de données.

  1. Ouvrez votre outil SQL préféré et connectez-vous en utilisant un compte utilisateur Microsoft Entra, comme l’utilisateur Microsoft Entra que vous avez assigné comme administrateur. Vous pouvez accomplir cette étape dans Cloud Shell en utilisant la commande SQLCMD.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. Dans l’invite SQL de la base de données souhaitée, exécutez les commandes suivantes pour accorder des autorisations à votre fonction. Par exemple,

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> est le nom de l’identité managée dans Microsoft Entra ID. Pour une identité attribuée par l’utilisateur, ce nom est celui que vous avez donné à l’identité lors de la création (par exemple, my-sql-identity). Pour une identité assignée par le système, le nom est toujours le même que celui de votre application fonctionnelle.

    Note

    Si vous utilisez le déclencheur Azure SQL, votre identité managée nécessite des autorisations supplémentaires au-delà de db_datareader et db_datawriter. Pour plus d’informations, consultez les autorisations à accorder pour le déclencheur Azure SQL.

Configurer la chaîne de connexion SQL de la fonction Azure

À l’étape finale, configurez la chaîne de connexion SQL de l’application fonctionnelle pour utiliser l’authentification d’identité gérée Microsoft Entra.

Vous identifiez le nom du paramètre de chaîne de connexion dans votre code de fonction comme l’attribut de liaison ConnectionStringSetting, comme indiqué dans les attributs et annotations de la liaison d’entrée SQL.

Dans les paramètres de votre application fonction, mettez à jour le paramètre de chaîne de connexion SQL pour suivre ce format :

Server=<server-name>.database.windows.net; Authentication=Active Directory Default; Database=<database-name>; User Id=<client-id-of-user-assigned-identity>

Remplacez <server-name> par votre nom de serveur SQL, <database-name> par votre nom de base de données, et <client-id-of-user-assigned-identity> par l’ID client de votre identité managée attribuée par l’utilisateur. Vous pouvez trouver l’ID client sur la page Aperçu de votre ressource d’identité gérée dans le portail Azure.

Conseil

Le Active Directory Default mot-clé authentification fonctionne à la fois localement (en utilisant vos identifiants de développeur) et dans Azure (en utilisant l’identité gérée). Cette fonctionnalité signifie que vous pouvez utiliser la même chaîne de connexion dans les deux environnements. Pour l’identité gérée assignée au système, omettez le User Id paramètre.

Pour plus d’informations sur les connexions basées sur l’identité, voir Configurer les connexions vers des services distants.

Étapes suivantes