Självstudie: Använda en systemtilldelad hanterad identitet för en virtuell Windows-dator för åtkomst till Azure SQL

Hanterade identiteter för Azure-resurser är en funktion i Azure Active Directory. Alla Azure-tjänster som stöder hanterade identiteter för Azure-resurser har sin egen tidslinje. Var noga med att kontrollera tillgänglighetsstatus för hanterade identiteter för din resurs och kända problem innan du börjar.

Den här självstudien visar hur du använder en system tilldelad identitet för en Windows virtuell dator (VM) för att komma åt Azure SQL Database. Hanterade tjänstidentiteter hanteras automatiskt av Azure och gör att du kan autentisera mot tjänster som stöder Azure AD-autentisering, utan att du behöver skriva in autentiseringsuppgifter i koden. Lär dig att:

  • Ge den virtuella datorn åtkomst till Azure SQL Database
  • Aktivera Azure AD-autentisering
  • Skapa en innesluten användare i databasen som representerar den virtuella datorns systemtilldelade identitet
  • Hämta en åtkomsttoken med hjälp av den virtuella datorns identitet och använd den för att fråga Azure SQL Database

Förutsättningar

Aktivera

Att aktivera en systemtilldelad hanterad identitet är en upplevelse med ett klick. Du kan antingen aktivera det när du skapar en virtuell dator eller i egenskaperna för en befintlig virtuell dator.

Skärm bild som visar fliken systemtilldelad för en virtuell dator där du kan aktivera systemets tilldelade status.

Så här aktiverar du en systemtilldelad hanterad identitet på en ny virtuell dator:

  1. Logga in på Azure Portal

  2. Skapa en virtuell dator med systemtilldelad identitet aktiverat

Bevilja åtkomst

Om du vill ge den virtuella datorn åtkomst till en databas i Azure SQL Database kan du använda en befintlig logisk SQL server eller skapa en ny. Om du vill skapa en ny server och en databas med hjälp av Azure-portalen följer du den här Azure SQL-snabbstarten. Det finns även snabbstarter som använder Azure CLI och Azure PowerShell i Azure SQL-dokumentationen.

Det finns två steg för att ge den virtuella datorn åtkomst till en databas:

  1. Aktivera Azure AD-autentisering för servern.
  2. Skapa en innesluten användare i databasen som representerar den virtuella datorns systemtilldelade identitet.

Aktivera Azure AD-autentisering

Så här konfigurerar du Azure AD-autentisering:

  1. I Azure-portalen väljer du SQL-servrar från det vänstra navigeringsfältet.
  2. Klicka på den SQL server som ska aktiveras för Azure AD-autentisering.
  3. I avsnittet Inställningar avsnittet på bladet klickar du på Active Directory-administratör.
  4. I kommandofältet klickar du på Konfigurera administratör.
  5. Välj ett Azure AD-användarkonto som ska bli administratör för servern och klicka på Välj.
  6. I kommandofältet klickar du på Spara.

Skapa innesluten användare

Det här avsnittet visar hur du skapar en innesluten användare i databasen som representerar den virtuella datorns system tilldelade identitet. För det här steget behöver du Microsoft SQL Server Management Studio (SSMS). Innan du börjar kan det också vara bra att granska följande artiklar för att få bakgrundsinformation om Azure AD-integrering:

SQL DB kräver unika AAD-visningsnamn. Med detta måste AAD-konton som användare, grupper och tjänsthuvudnamn (program) och VM-namn som aktiverats för hanterad identitet definieras unikt i AAD angående deras visningsnamn. SQL DB kontrollerar AAD-visningsnamnet när T-SQL skapar sådana användare och om det inte är unikt kan kommandot inte begära att ange ett unikt AAD-visningsnamn för ett visst konto.

Så här skapar du en innesluten användare:

  1. Starta SQL Server Management Studio.

  2. I dialogrutan Anslut till server anger du servernamnet i fältet Servernamn.

  3. I fältet Autentisering väljer du Active Directory – Universell med stöd för MFA.

  4. I fältet Användarnamn anger du namnet på det Azure AD-konto som du anger som serveradministratör, till exempel helen@woodgroveonline.com

  5. Klicka på Alternativ.

  6. I fältet Anslut till databas anger du namnet på den icke-systembaserade databas som du vill konfigurera.

  7. Klicka på Anslut. Slutför inloggningsprocessen.

  8. I Object Explorer expanderar du mappen Databaser.

  9. Högerklicka på en användardatabas och klicka på Ny fråga.

  10. I frågefönstret anger du följande rad och klickar på Kör i verktygsfältet:

    Anteckning

    VMName i följande kommando är namnet på den virtuella datorn som du har aktiverat systemtilldelad identitet på i avsnittet om förutsättningar.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    Kommandot bör slutföras utan problem och skapa den inneslutna användaren för den virtuella datorns systemtilldelade identitet.

  11. Rensa frågefönstret, ange följande rad och klicka på Kör i verktygsfältet:

    Anteckning

    VMName i följande kommando är namnet på den virtuella datorn som du har aktiverat systemtilldelad identitet på i avsnittet om förutsättningar.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    Kommandot bör slutföras utan problem och bevilja den inneslutna användaren möjligheten att läsa hela databasen.

Kod som körs på den virtuella datorn kan nu hämta en token med hjälp av dess system tilldelade hanterade identitet och använda token för att autentisera till servern.

Åtkomst till data

Det här avsnittet visar hur du hämtar en åtkomsttoken med hjälp av den virtuella datorns system tilldelade hanterade identitet och använder den för att anropa Azure SQL. Azure SQL har inbyggt stöd för Azure AD-autentisering, vilket gör att åtkomsttoken som hämtas med hanterade identiteter för Azure-resurser kan accepteras direkt. Du använder metoden med åtkomsttoken för att skapa en anslutning till SQL. Detta är en del av integreringen av Azure SQL med Azure AD, och skiljer sig från att ange autentiseringsuppgifter i anslutningssträngen.

Här är ett .NET-kodexempel på hur du öppnar en anslutning för att SQL med en åtkomsttoken. Koden måste köras på den virtuella datorn för att kunna komma åt slutpunkten för den virtuella datorns system tilldelade hanterade identitet. .NET Framework 4.6 eller senare eller .NET Core 2.2 eller senare krävs för att använda metoden för åtkomsttoken. Ersätt värdena för AZURE-SQL-SERVERNAME och DATABASE i enlighet med detta. Observera att resurs-ID:t för Azure SQL är https://database.windows.net/ .

using System.Net;
using System.IO;
using System.Data.SqlClient;
using System.Web.Script.Serialization;

//
// Get an access token for SQL.
//
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://database.windows.net/");
request.Headers["Metadata"] = "true";
request.Method = "GET";
string accessToken = null;

try
{
    // Call managed identities for Azure resources endpoint.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    // Pipe response Stream to a StreamReader and extract access token.
    StreamReader streamResponse = new StreamReader(response.GetResponseStream());
    string stringResponse = streamResponse.ReadToEnd();
    JavaScriptSerializer j = new JavaScriptSerializer();
    Dictionary<string, string> list = (Dictionary<string, string>) j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
    accessToken = list["access_token"];
}
catch (Exception e)
{
    string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
}

//
// Open a connection to the server using the access token.
//
if (accessToken != null) {
    string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>;";
    SqlConnection conn = new SqlConnection(connectionString);
    conn.AccessToken = accessToken;
    conn.Open();
}

Anteckning

Du kan använda hanterade identiteter när du arbetar med andra programmeringsalternativ med våra SDK:er.

Du kan snabbt testa konfigurationen av slutpunkt till slutpunkt utan att behöva skriva och distribuera en app på den virtuella datorn med hjälp av PowerShell.

  1. Gå till Virtuella datorer på portalen och sedan till den virtuella Windows-datorn. Under Översikt klickar du på Anslut.

  2. Ange ditt användarnamn och lösenord som du lade till när du skapade den virtuella Windows-datorn.

  3. Nu när du har skapat en anslutning till fjärrskrivbord med den virtuella datorn öppnar du PowerShell i fjärrsessionen.

  4. Använd PowerShells Invoke-WebRequest och skicka en begäran till den lokala hanterade identitetens slutpunkt för att hämta en åtkomsttoken för 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"}
    

    Konvertera svaret från ett JSON-objekt till ett PowerShell-objekt.

    $content = $response.Content | ConvertFrom-Json
    

    Extrahera åtkomsttoken från svaret.

    $AccessToken = $content.access_token
    
  5. Öppna en anslutning till servern. Kom ihåg att ersätta värdena för AZURE-SQL-SERVERNAME och DATABASE.

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

    Sedan skapar du och skickar en fråga till servern. Kom ihåg att ersätta värdet för 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)
    

Kontrollera värdet på $DataSet.Tables[0] för att visa resultatet av frågan.

Inaktivera

Om du vill inaktivera den systemtilldelade identiteten på den virtuella datorn anger du statusen för den systemtilldelade identiteten.

Skärm bild som visar fliken systemtilldelad för en virtuell dator där du kan stänga av systemets tilldelade status.

Nästa steg

I den här självstudien har du lärt dig hur du använder en system tilldelad hanterad identitet för att komma åt Azure SQL Database. Mer information om Azure SQL Database finns i: