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 allez ajouter une identité managée à une fonction Azure qui utilise des liaisons Azure SQL. Un exemple de projet Azure Functions avec des liaisons SQL est disponible dans l’exemple de serveur principal ToDo.

Lorsque vous aurez terminé ce tutoriel, votre fonction Azure se connectera à la base de données Azure SQL sans avoir besoin de nom d’utilisateur ni de mot de passe.

Voici un aperçu des étapes que vous allez suivre :

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

Tout d’abord, activez l’authentification Microsoft Entra pour la base de données SQL en attribuant 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.

L’activation de l’authentification Microsoft Entra peut être effectuée via le Portail Azure, PowerShell ou Azure CLI. Les instructions relatives à Azure CLI sont indiquées ci-dessous et les informations concernant l’activation via le Portail Azure et PowerShell sont disponibles dans 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 en utilisant az ad user list et remplacez <user-principal-name> par votre propre valeur. Le résultat est enregistré 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 à l’aide de la commande az sql server ad-admin create 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 Approvisionner un administrateur Microsoft Entra pour votre serveur

Activer une identité managée affectée par le système sur une fonction Azure

Dans cette étape, nous allons ajouter une identité affectée par le système à la fonction Azure. Dans les étapes suivantes, cette identité aura accès à la base de données SQL.

Pour activer une identité managée affectée par le système dans le portail Azure :

  1. Créez une fonction Azure dans le portail comme vous le feriez normalement. Accédez-y dans le portail.
  2. Faites défiler la page vers le bas jusqu’au groupe Paramètres dans le menu de navigation gauche.
  3. Sélectionnez Identité.
  4. Dans l’onglet Attribuée par le système, définissez État sur Activé. Cliquez sur Enregistrer.

Turn on system assigned identity for Function app

Pour plus d’informations sur l’activation d’une identité managée affectée par le système via Azure CLI ou PowerShell, consultez les informations complémentaires sur l’utilisation des identités managées avec Azure Functions.

Conseil

Pour l’identité managée affectée par l’utilisateur, basculez vers l’onglet Affecté par l’utilisateur. Cliquez sur Ajouter et sélectionnez une identité managée. Pour plus d’informations sur la création d’une identité managée affectée par l’utilisateur, consultez la section Gérer les identités managés affectées par l’utilisateur.

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

Dans cette étape, nous allons nous connecter à la base de données SQL avec un compte d’utilisateur Microsoft Entra et accorder à l’identité managée l’accès à la base de données.

  1. Ouvrez votre outil SQL préféré et connectez-vous avec un compte d’utilisateur Microsoft Entra (tel que l’utilisateur Microsoft Entra que nous avons affecté en tant qu’administrateur). Vous pouvez le faire dans Cloud Shell à l’aide de 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. Si l’identité est affectée par le système, le nom sera toujours identique à celui de votre application de fonction.

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

Dans la dernière étape, nous allons configurer la chaîne de connexion SQL de la fonction Azure pour utiliser l’authentification par identité managée Microsoft Entra.

Le nom du paramètre de la chaîne de connexion est identifié dans notre code Functions comme l’attribut de liaison « ConnectionStringSetting », comme on peut le voir dans les attributs et annotations de liaison de l’entrée SQL.

Dans les paramètres d’application de notre application de fonction, le paramètre de chaîne de connexion SQL doit être mis à jour pour respecter le format suivant :

Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Database=testdb

testdb est le nom de la base de données à laquelle nous nous connectons et demo.database.windows.net est le nom du serveur auquel nous nous connectons.

Conseil

Pour une identité managée affectée par l’utilisateur, utilisez Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; User Id=ClientIdOfManagedIdentity; Database=testdb.

Étapes suivantes