Zelfstudie: een door het Windows-VM-systeem toegewezen beheerde identiteit gebruiken voor toegang tot Azure SQL

Deze zelfstudie laat zien hoe u toegang krijgt tot Azure SQL Database met een door het systeem toegewezen identiteit voor een virtuele Windows-machine (VM). Beheerde service-identiteiten worden automatisch beheerd door Azure en stellen u in staat om te verifiëren bij services die ondersteuning bieden voor Microsoft Entra-verificatie, zonder dat u referenties hoeft in te voegen in uw code. U leert het volgende:

  • Uw virtuele machine toegang verlenen tot Azure SQL Database
  • Microsoft Entra-verificatie inschakelen
  • Een ingesloten gebruiker maken in de database die staat voor de door de systeem toegewezen id van de VM
  • Een toegangstoken ophalen met de identiteit van de virtuele machine en daarmee een query uitvoeren op Azure SQL Database

Vereisten

Inschakelen

Het inschakelen van een door het systeem toegewezen beheerde identiteit gebeurt met één klik. U kunt deze inschakelen tijdens het maken van een VM of in de eigenschappen van een bestaande VM.

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

Een door het systeem toegewezen beheerde identiteit inschakelen op een nieuwe VM:

  1. Meld u aan bij Azure Portal

  2. Een virtuele machine maken met door het systeem toegewezen identiteit ingeschakeld

Toegang verlenen

Als u uw virtuele machine toegang wilt verlenen tot een database in Azure SQL Database, kunt u een bestaande logische SQL-server gebruiken of een nieuwe server maken. Voor het maken van een nieuwe server en database met behulp van Azure Portal, volgt u deze Azure SQL-snelstart. Er zijn ook snelstarts in de documentatie over Azure SQL voor het gebruik van Azure CLI en Azure Powershell.

U moet twee stappen uitvoeren om uw virtuele machine toegang te verlenen tot een database:

  1. Schakel Microsoft Entra-verificatie in voor de server.
  2. Maak een ingesloten gebruiker in de database die staat voor de door de systeem toegewezen id van de VM.

Microsoft Entra-verificatie inschakelen

Microsoft Entra-verificatie configureren:

  1. Selecteer SQL-servers in het linkernavigatievenster van Azure Portal.
  2. Selecteer de SQL-server die moet worden ingeschakeld voor Microsoft Entra-verificatie.
  3. Klik in de sectie Instellingen van de blade op Active Directory-beheerder.
  4. Klik in de opdrachtbalk op Beheerder instellen.
  5. Selecteer een Microsoft Entra-gebruikersaccount om een beheerder van de server te maken en klik op Selecteren.
  6. Klik in de opdrachtbalk op Opslaan.

Ingesloten gebruiker maken

In dit gedeelte wordt getoond hoe u een ingesloten gebruiker in de database maakt die staat voor de door de systeem toegewezen id van de VM. Voor deze stap hebt u Microsoft SQL Server Management Studio (SSMS) nodig. Voordat u begint, kan het ook handig zijn om de volgende artikelen te bekijken voor achtergrondinformatie over Microsoft Entra-integratie:

VOOR SQL DB zijn unieke weergavenamen van Microsoft Entra ID vereist. Hiermee moeten de Microsoft Entra-accounts, zoals gebruikers, groepen en service-principals (toepassingen) en VM-namen die zijn ingeschakeld voor beheerde identiteit, uniek zijn gedefinieerd in Microsoft Entra-id met betrekking tot hun weergavenamen. SQL DB controleert de weergavenaam van Microsoft Entra ID tijdens het maken van dergelijke gebruikers door T-SQL. Als deze niet uniek is, mislukt de opdracht bij het opgeven van een unieke weergavenaam van Microsoft Entra ID voor een bepaald account.

Een ingesloten gebruiker maken:

  1. Start SQL Server Management Studio.

  2. Voer in het dialoogvenster Verbinding maken met server de naam van de server in het veld Servernaam in.

  3. Selecteer in het veld VerificatieActive Directory - Universeel met ondersteuning voor MFA.

  4. Voer in het veld Gebruikersnaam de naam in van het Microsoft Entra-account dat u hebt ingesteld als serverbeheerder, bijvoorbeeld helen@woodgroveonline.com

  5. Klik op Opties.

  6. Voer in het veld Verbinding maken met database de naam in van de niet-systeemdatabase die u wilt configureren.

  7. Klik op Verbinding maken. Voltooi het aanmeldingsproces.

  8. Vouw in Objectverkenner de map Databases uit.

  9. Klik met de rechtermuisknop op een gebruikersdatabase en selecteer Nieuwe query.

  10. Voer in het queryvenster de volgende regel in en klik op Uitvoeren in de werkbalk:

    Notitie

    VMName in de volgende opdracht staat de naam van de VM waarvoor u door het systeem toegewezen id's hebt ingeschakeld in het gedeelte met vereisten.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    De opdracht voor het maken van de ingesloten gebruiker voor de door het systeem toegewezen id voor de VM wordt uitgevoerd.

  11. Wis het queryvenster, voer de volgende regel in en klik op Uitvoeren in de werkbalk:

    Notitie

    VMName in de volgende opdracht is de naam van de vm waarop u door het systeem toegewezen identiteit hebt ingeschakeld in de sectie Vereisten.

    Als u de fout 'Principal VMName heeft een dubbele weergavenaam' tegenkomt, voegt u de instructie CREATE USER toe met WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    De opdracht wordt uitgevoerd en de ingesloten gebruiker heeft nu leestoegang tot de gehele database.

Code die wordt uitgevoerd op de VM kan nu een token verkrijgen via de door het systeem toegewezen beheerde identiteit en het token gebruiken voor verificatie bij de server.

Toegang tot gegevens

In dit gedeelte wordt getoond hoe u een toegangstoken kunt ophalen met behulp van de door het systeem toegewezen beheerde identiteit van de VM en dit kunt gebruiken om Azure SQL aan te roepen. Azure SQL biedt systeemeigen ondersteuning voor Microsoft Entra-verificatie, zodat toegangstokens die zijn verkregen met behulp van beheerde identiteiten voor Azure-resources, rechtstreeks kunnen accepteren. Deze methode vereist geen referenties op de verbindingsreeks.

Hier volgt een .NET-codevoorbeeld van het openen van een verbinding met SQL met behulp van Active Directory Managed Identity-verificatie. De code moet worden uitgevoerd op de virtuele machine om toegang te krijgen tot het eindpunt van de door het systeem toegewezen beheerde identiteit van de virtuele machine. .NET Framework 4.6.2 of hoger of .NET Core 3.1 of hoger is vereist voor het gebruik van deze methode. Vervang de waarden van AZURE-SQL-SERVERNAME en DATABASE dienovereenkomstig en voeg een NuGet-verwijzing toe aan de Bibliotheek 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();

Notitie

U kunt beheerde identiteiten gebruiken terwijl u met andere programmeeropties werkt met behulp van onze SDK's.

Met PowerShell kunt u snel de end-to-end-instellingen testen zonder een app te hoeven schrijven en implementeren op de virtuele machine.

  1. Navigeer in Azure Portal naar Virtuele machines, ga naar uw virtuele Windows-machine en klik op de pagina Overzicht op Verbinden.

  2. Voer uw VM-beheerdersreferentie in die u hebt toegevoegd bij het maken van de Windows-VM.

  3. Nu u een Verbinding met extern bureaublad met de virtuele machine hebt gemaakt, opent u PowerShell in de externe sessie.

  4. Verstuur met de cmdlet Invoke-WebRequest van Powershell een aanvraag naar het lokale eindpunt van de beheerde identiteit om een toegangstoken voor Azure SQL op te halen.

        $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"}
    

    Converteer de reactie van een JSON-object naar een PowerShell-object.

    $content = $response.Content | ConvertFrom-Json
    

    Extraheer het toegangstoken uit de reactie.

    $AccessToken = $content.access_token
    
  5. Open een verbinding met de server. Vervang de waarden voor AZURE-SQL-SERVERNAME en 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()
    

    Maak vervolgens een query en verzend de query naar de server. Vergeet niet de waarde voor TABLE te vervangen.

    $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)
    

Bekijk de waarde van $DataSet.Tables[0] om de resultaten van de query weer te geven.

Uitschakelen

Als u de door het systeem toegewezen identiteit op uw VM wilt uitschakelen, stelt u de status van de door het systeem toegewezen identiteit in op Uit.

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

Volgende stappen

In deze zelfstudie hebt u geleerd om met een door het systeem toegewezen beheerde identiteit toegang te krijgen tot Azure SQL Database. Raadpleeg voor meer informatie over Azure SQL Database: