Tutoriel : Utiliser une identité managée de machine virtuelle Windows attribuée par le système pour accéder à Azure SQL

Ce tutoriel illustre comment utiliser une identité attribuée par le système pour une machine virtuelle Windows afin d’accéder à Azure SQL Database. Les identités MSI sont gérées automatiquement par Azure et vous permettent de vous authentifier auprès des services prenant en charge l’authentification Microsoft Entra sans avoir à insérer des informations d’identification dans votre code. Vous allez apprendre à effectuer les actions suivantes :

  • Accorder à votre machine virtuelle l’accès à Azure SQL Database
  • Activez l’authentification Microsoft Entra
  • Créer un utilisateur contenu dans la base de données représentant l’identité attribuée du système de la machine virtuelle
  • Obtenir un jeton d’accès à l’aide de l’identité de machine virtuelle, et l’utiliser pour interroger Azure SQL Database

Prérequis

Activer

L’activation d’une identité managée affectée par le système s’effectue en un seul clic. Vous pouvez l’activer au moment de la création d’une machine virtuelle ou plus tard dans les propriétés d’une machine virtuelle existante.

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

Pour activer une identité managée affectée par le système sur une nouvelle machine virtuelle :

  1. Connectez-vous au portail Azure

  2. Créer une machine virtuelle avec une identité affectée par le système activée

Accorder l'accès

Pour accorder à votre machine virtuelle l’accès à une base de données dans Azure SQL Database, vous pouvez utiliser un serveur SQL logique existant ou en créer un. Pour créer un serveur et une base de données à l’aide du portail Azure, procédez de la manière décrite dans cette procédure de démarrage rapide d’Azure SQL. Des procédures de démarrage rapide utilisant Azure CLI et Azure PowerShell sont également décrites dans la Documentation Azure SQL Database.

Pour accorder à votre machine virtuelle l’accès à une base de données, deux étapes sont nécessaires :

  1. Activez l’authentification Microsoft Entra pour le serveur.
  2. Créez un utilisateur contenu dans la base de données représentant l’identité attribuée du système de la machine virtuelle.

Activez l’authentification Microsoft Entra

Pour configurer l’authentification Microsoft Entra :

  1. Dans le portail Azure, dans le volet de navigation gauche, sélectionnez Serveurs SQL.
  2. Sélectionnez le serveur SQL à activer pour l’authentification Microsoft Entra.
  3. Dans la section Paramètres du panneau, cliquez sur Administrateur Active Directory.
  4. Dans la barre de commandes, cliquez sur Définir l’administrateur.
  5. Sélectionnez un compte d’utilisateur Microsoft Entra à désigner comme administrateur du serveur, puis cliquez sur Sélectionner.
  6. Dans la barre de commandes, cliquez sur Enregistrer.

Créer un utilisateur contenu

Cette section montre comment créer un utilisateur contenu dans la base de données représentant l’identité attribuée par le système de la machine virtuelle. Pour cette étape, vous avez besoin de Microsoft SQL Server Management Studio (SSMS). Avant de commencer, il peut également être utile de lire les articles suivants pour acquérir une compréhension de l’intégration de Microsoft Entra :

SQL DB nécessite des noms d’affichage Microsoft Entra uniques. Ainsi, les comptes Microsoft Entra comme les comptes d’utilisateurs, de groupes et de principaux de service (applications), et les noms des machines virtuelles activées pour l’identité managée doivent être définis de façon unique dans Microsoft Entra ID concernant leurs noms complets. SQL DB vérifie le nom d’affichage Microsoft Entra ID lors de la création T-SQL de tels utilisateurs, et s’il n’est pas unique, la commande ne permet pas la mise à disposition d’un nom d’affichage Microsoft Entra ID unique pour un compte donné.

Pour créer un utilisateur contenu :

  1. Exécutez SQL Server Management Studio.

  2. Dans la boîte de dialogue Se connecter au serveur, entrez le nom de votre serveur dans le champ Nom du serveur.

  3. Dans le champ Authentification, sélectionnez Active Directory - Authentification universelle avec prise en charge de MFA.

  4. Dans le champ Nom d’utilisateur, entrez le nom du compte Microsoft Entra que vous avez défini en tant qu’administrateur du serveur, par exemple, helen@woodgroveonline.com

  5. Cliquez sur Options.

  6. Dans le champ Connexion à une base de données, entrez le nom de la base de données non-système que vous souhaitez configurer.

  7. Cliquez sur Connecter. Terminez le processus de connexion.

  8. Dans l’Explorateur d’objets, développez le dossier Bases de données.

  9. Cliquez avec le bouton droit sur la base de données utilisateur et sélectionnez Nouvelle requête.

  10. Dans la fenêtre de requête, entrez la ligne suivante, puis, dans la barre d’outils, cliquez sur Exécuter :

    Notes

    VMName dans la commande suivante est le nom de la machine virtuelle pour laquelle vous avez activé l’identité attribuée au système sur dans la section Conditions préalables.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    La commande doit s’exécuter correctement, en créant l’utilisateur contenu pour l’identité attribuée du système de la machine virtuelle.

  11. Effacez le contenu de la fenêtre de requête, entrez la ligne suivante, puis, dans la barre d’outils, cliquez sur Exécuter :

    Notes

    VMName dans la commande suivante est le nom de la machine virtuelle pour laquelle vous avez activé l’identité attribuée au système sur dans la section Conditions préalables.

    Si vous rencontrez l’erreur « Principal VMName a un nom d’affichage en double », ajoutez l’instruction CREATE USER avec WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    La commande doit s’exécuter correctement, en octroyant à l’utilisateur contenu la possibilité de lire la base de données entière.

Le code qui s’exécute dans la machine virtuelle peut désormais obtenir un jeton à partir de son identité managée attribuée par le système et l’utiliser pour s’authentifier auprès du serveur.

Accéder aux données

Cette section montre comment obtenir un jeton d’accès à l’aide de l’identité managée attribuée par le système de la machine virtuelle et comment l’utiliser pour appeler Azure SQL. Azure SQL prenant en charge de l’authentification Microsoft Entra en mode natif, il peut accepter directement des jetons d’accès obtenus à l’aide d’identités managées attribuées par le système pour les ressources Azure. Cette méthode ne demande pas de fournir d’informations d’identification sur la chaîne de connexion.

Voici un exemple de code .NET pour ouvrir une connexion à SQL en utilisant l’authentification Active Directory Managed Identity. Pour permettre l’accès au point de terminaison de l’identité managée attribuée par le système de la machine virtuelle, le code doit s’exécuter sur la machine virtuelle. Pour pouvoir utiliser cette méthode, .NET Framework 4.6.2 ou ultérieur ou .NET Core 3.1 ou ultérieure est requis. Remplacez les valeurs d’AZURE-SQL-SERVERNAME et DATABASE en conséquence et ajoutez une référence NuGet à la bibliothèque Microsoft.Data.SqlClient.

using Microsoft.Data.SqlClient;

try
{
//
// Open a connection to the server using Active Directory Managed Identity authentication.
//
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>; Authentication=Active Directory Managed Identity; Encrypt=True";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

Notes

Vous pouvez utiliser des identités managées lors de l’utilisation d’autres options de programmation à l’aide de nos kits SDK.

Un autre moyen rapide de tester la configuration de bout en bout sans devoir écrire et déployer une application sur la machine virtuelle consiste à utiliser PowerShell.

  1. Dans le portail, accédez à Machines virtuelles et accédez à votre machine virtuelle Windows. Puis, dans Vue d’ensemble, cliquez sur Connecter.

  2. Entrez les Informations d’identification d’administrateur que vous avez ajoutées lors de la création de la machine virtuelle Windows.

  3. Maintenant que vous avez créé une Connexion au Bureau à distance avec la machine virtuelle, ouvrez PowerShell dans la session à distance.

  4. À l’aide de Invoke-WebRequest de Powershell, adressez une requête au point de terminaison de l’identité managée locale pour obtenir un jeton d’accès pour Azure SQL.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Convertissez la réponse d’objet JSON en objet PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extrayez le jeton d’accès de la réponse.

    $AccessToken = $content.access_token
    
  5. Ouvrez une connexion au serveur. N’oubliez pas de remplacer les valeurs de AZURE-SQL-SERVERNAME et DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>; Encrypt=True;"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

    Ensuite, créez et envoyez une requête au serveur. N’oubliez pas de remplacer la valeur de TABLE.

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Examinez la valeur de $DataSet.Tables[0] pour voir les résultats de la requête.

Disable

Pour désactiver l’identité affectée par le système sur votre machine virtuelle, définissez son état sur Off.

Screenshot shows the System assigned tab for a virtual machine where you can turn off the System assigned status.

Étapes suivantes

Dans ce tutoriel, vous avez appris à utiliser une identité managée attribuée par le système pour accéder à Azure SQL Database. Pour en savoir plus sur Azure SQL Database, consultez :