Samouczek: używanie przypisanej przez system tożsamości zarządzanej maszyny wirtualnej systemu Windows w celu uzyskania dostępu do usługi Azure SQLTutorial: Use a Windows VM system-assigned managed identity to access Azure SQL

Zarządzane tożsamości dla zasobów platformy Azure to funkcja usługi Azure Active Directory.Managed identities for Azure resources is a feature of Azure Active Directory. Każda usługa platformy Azure obsługująca tożsamości zarządzane dla zasobów platformy Azure ma własną oś czasu.Each of the Azure services that support managed identities for Azure resources are subject to their own timeline. Pamiętaj, aby przed rozpoczęciem sprawdzić stan dostępności tożsamości zarządzanych dla swojego zasobu i znane problemy.Make sure you review the availability status of managed identities for your resource and known issues before you begin.

W tym samouczku przedstawiono sposób używania tożsamości przypisanej przez system dla maszyny wirtualnej z systemem Windows w celu uzyskania dostępu do usługi Azure SQL.This tutorial shows you how to use a system-assigned identity for a Windows virtual machine (VM) to access an Azure SQL server. Tożsamości usługi zarządzanej są automatycznie zarządzane przez platformę Azure. Umożliwiają uwierzytelnianie w usługach obsługujących uwierzytelnianie usługi Azure AD bez potrzeby wprowadzania poświadczeń do kodu.Managed Service Identities are automatically managed by Azure and enable you to authenticate to services that support Azure AD authentication, without needing to insert credentials into your code. Omawiane kwestie:You learn how to:

  • Udzielanie maszynie wirtualnej dostępu do serwera Azure SQLGrant your VM access to an Azure SQL server
  • Włączanie uwierzytelniania usługi Azure AD na potrzeby serwera SQLEnable Azure AD authentication for the SQL server
  • Tworzenie w bazie danych zawartego użytkownika, który będzie reprezentować tożsamość maszyny wirtualnej przypisaną przez systemCreate a contained user in the database that represents the VM's system assigned identity
  • Uzyskiwanie tokenu dostępu przy użyciu tożsamości maszyny wirtualnej oraz używanie go do wysyłania zapytań do serwera Azure SQLGet an access token using the VM identity and use it to query an Azure SQL server

Wymagania wstępnePrerequisites

WłączenieEnable

Włączenie tożsamości zarządzanej przypisanej do systemu jest jednym kliknięciem.Enabling a system-assigned managed identity is a one-click experience. Można je włączyć podczas tworzenia maszyny wirtualnej lub we właściwościach istniejącej maszyny wirtualnej.You can either enable it during the creation of a VM or in the properties of an existing VM.

Tworzenie nowego konta magazynu

Aby włączyć tożsamość zarządzaną przypisaną przez system na nowej maszynie wirtualnej:To enable a system-assigned managed identity on a new VM:

  1. Zalogowanie się w witrynie Azure PortalSign in to Azure portal

  2. Create a virtual machine with system-assigned identity enabled (Tworzenie maszyny wirtualnej z tożsamością przypisaną przez system)Create a virtual machine with system-assigned identity enabled

Udzielanie dostępuGrant access

Aby udzielić maszynie wirtualnej dostępu do bazy danych na serwerze SQL platformy Azure, możesz użyć istniejącego serwera SQL lub utworzyć nowy.To grant your VM access to a database in an Azure SQL Server, you can use an existing SQL server or create a new one. Aby utworzyć nowy serwer i bazę danych przy użyciu witryny Azure Portal, wykonaj ten przewodnik Szybki start usługi Azure SQL.To create a new server and database using the Azure portal, follow this Azure SQL quickstart. W dokumentacji usługi Azure SQL dostępne są również przewodniki Szybki start, które używają interfejsu wiersza polecenia platformy Azure oraz programu Azure PowerShell.There are also quickstarts that use the Azure CLI and Azure PowerShell in the Azure SQL documentation.

Istnieją dwa kroki związane z udzielaniem maszynie wirtualnej dostępu do bazy danych:There are two steps to granting your VM access to a database:

  1. Włącz uwierzytelnianie usługi Azure AD na potrzeby serwera SQL.Enable Azure AD authentication for the SQL server.
  2. Tworzenie w bazie danych zawartego użytkownika, który będzie reprezentować tożsamość maszyny wirtualnej przypisaną przez system.Create a contained user in the database that represents the VM's system-assigned identity.

Włączanie uwierzytelniania w usłudze Azure ADEnable Azure AD authentication

Aby skonfigurować uwierzytelnianie usługi Azure AD dla programu SQL Server:To configure Azure AD authentication for the SQL server:

  1. W witrynie Azure Portal wybierz opcję Serwery SQL z lewego paska nawigacyjnego.In the Azure portal, select SQL servers from the left-hand navigation.
  2. Kliknij serwer SQL, aby włączyć go do uwierzytelniania usługi Azure AD.Click the SQL server to be enabled for Azure AD authentication.
  3. W sekcji Ustawienia bloku kliknij opcję Administrator usługi Active Directory.In the Settings section of the blade, click Active Directory admin.
  4. Na pasku poleceń kliknij przycisk Ustaw administratora.In the command bar, click Set admin.
  5. Wybierz konto użytkownika usługi Azure AD, które zostanie administratorem serwera, i kliknij przycisk Wybierz.Select an Azure AD user account to be made an administrator of the server, and click Select.
  6. Na pasku poleceń kliknij przycisk Zapisz.In the command bar, click Save.

Utwórz zawartego użytkownikaCreate contained user

W tej sekcji przedstawiono sposób tworzenia zawartego użytkownika w bazie danych, który reprezentuje tożsamość przypisanej do systemu maszyny wirtualnej.This section shows how to create a contained user in the database that represents the VM's system assigned identity. Ten krok wymaga Microsoft SQL Server Management Studio (SSMS).For this step, you need Microsoft SQL Server Management Studio (SSMS). Przed rozpoczęciem pomocne może być sprawdzenie następujących artykułów, aby uzyskać podstawowe informacje o integracji usługi Azure AD:Before beginning, it may also be helpful to review the following articles for background on Azure AD integration:

Usługa SQL Database wymaga unikatowych nazw wyświetlanych usługi AAD.SQL DB requires unique AAD display names. Zatem konta usługi AAD, takie jak użytkownicy, grupy, jednostki usługi (aplikacje) i nazwy maszyn wirtualnych włączone dla tożsamości zarządzanej muszą mieć unikatowe definicje w usłudze AAD w odniesieniu do ich nazw wyświetlanych.With this, the AAD accounts such as users, groups and Service Principals (applications) and VM names enabled for managed identity must be uniquely defined in AAD regarding their display names. Baza danych SQL sprawdza nazwę wyświetlaną usługi AAD podczas tworzenia tych użytkowników przez T-SQL, a jeśli nie jest unikatowa, polecenie nie powiedzie się, aby podać unikatową nazwę wyświetlaną usługi AAD dla danego konta.SQL DB checks the AAD display name during T-SQL creation of such users and if it is not unique, the command fails requesting to provide a unique AAD display name for a given account.

Aby utworzyć zawartego użytkownika:To create a contained user:

  1. Uruchom program SQL Server Management Studio.Start SQL Server Management Studio.

  2. W oknie dialogowym Łączenie z serwerem wprowadź nazwę serwera SQL w polu Nazwa serwera.In the Connect to Server dialog, Enter your SQL server name in the Server name field.

  3. W polu Uwierzytelnianie wybierz opcję Active Directory — uniwersalne z obsługą uwierzytelniania wieloskładnikowego.In the Authentication field, select Active Directory - Universal with MFA support.

  4. W polu Nazwa użytkownika wprowadź nazwę konta usługi Azure AD, które zostało ustawione jako administrator serwera, np. helen@woodgroveonline.comIn the User name field, enter the name of the Azure AD account that you set as the server administrator, for example, helen@woodgroveonline.com

  5. Kliknij pozycję Opcje.Click Options.

  6. W polu Połącz z bazą danych wpisz nazwę niesystemowej bazy danych, którą chcesz skonfigurować.In the Connect to database field, enter the name of the non-system database you want to configure.

  7. Kliknij przycisk Połącz.Click Connect. Zakończ proces logowania.Complete the sign-in process.

  8. W Eksploratorze obiektów rozwiń folder Bazy danych.In the Object Explorer, expand the Databases folder.

  9. Kliknij prawym przyciskiem myszy bazę danych użytkownika, a następnie kliknij pozycję Nowe zapytanie.Right-click on a user database and click New query.

  10. W oknie zapytania wpisz następujący wiersz, a następnie kliknij przycisk Wykonaj na pasku narzędzi:In the query window, enter the following line, and click Execute in the toolbar:

    Uwaga

    Element VMName w poniższym poleceniu to nazwa maszyny wirtualnej, dla której w sekcji wymagań wstępnych włączono tożsamość przypisaną przez system.VMName in the following command is the name of the VM that you enabled system assigned identity on in the prerequsites section.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    Polecenie powinno zakończyć się pomyślnie, tworząc zawartego użytkownika na potrzeby tożsamości maszyny wirtualnej przypisanej przez system.The command should complete successfully, creating the contained user for the VM's system-assigned identity.

  11. Wyczyść okno zapytania, wpisz następujący wiersz, a następnie kliknij przycisk Wykonaj na pasku narzędzi:Clear the query window, enter the following line, and click Execute in the toolbar:

    Uwaga

    Element VMName w poniższym poleceniu to nazwa maszyny wirtualnej, dla której w sekcji wymagań wstępnych włączono tożsamość przypisaną przez system.VMName in the following command is the name of the VM that you enabled system assigned identity on in the prerequsites section.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    Polecenie powinno zakończyć się pomyślnie, udzielając zawartemu użytkownikowi prawa do odczytu całej bazy danych.The command should complete successfully, granting the contained user the ability to read the entire database.

Kod uruchomiony na maszynie wirtualnej może teraz pobrać token za pomocą swojej przypisanej przez system tożsamości zarządzanej i użyć tokenu do uwierzytelnienia na serwerze SQL.Code running in the VM can now get a token using its system-assigned managed identity and use the token to authenticate to the SQL server.

Uzyskiwanie dostępu do danychAccess data

W tej sekcji pokazano, jak uzyskać token dostępu przy użyciu tożsamości zarządzanej przypisanej przez system do maszyny wirtualnej i użyć jej do wywołania usługi Azure SQL.This section shows how to get an access token using the VM's system-assigned managed identity and use it to call Azure SQL. Usługa Azure SQL natywnie obsługuje uwierzytelnianie usługi Azure AD, więc może bezpośrednio akceptować tokeny dostępu pozyskane przy użyciu tożsamości zarządzanych dla zasobów platformy Azure.Azure SQL natively supports Azure AD authentication, so it can directly accept access tokens obtained using managed identities for Azure resources. Możesz użyć metody tokena dostępu dla tworzenia połączeń z serwerem SQL.You use the access token method of creating a connection to SQL. Jest to część integracji usługi Azure SQL z usługą Azure AD. Takie rozwiązanie różni się od podawania poświadczeń w parametrach połączenia.This is part of Azure SQL's integration with Azure AD, and is different from supplying credentials on the connection string.

Oto przykład kodu platformy .NET służący do otwierania połączenia z programem SQL przy użyciu tokenu dostępu.Here's a .NET code example of opening a connection to SQL using an access token. Ten kod należy uruchomić na maszynie wirtualnej, aby mógł uzyskać dostęp do punktu końcowego przypisanej przez system tożsamości zarządzanej maszyny wirtualnej.This code must run on the VM to be able to access the VM's system-assigned managed identity's endpoint. Do korzystania z metody tokenu dostępu jest wymagany .NET Framework 4,6 lub nowszy lub .NET Core 2,2 lub nowszy..NET Framework 4.6 or higher or .NET Core 2.2 or higher is required to use the access token method. Zastąp odpowiednio wartości AZURE-SQL-SERVERNAME i DATABASE.Replace the values of AZURE-SQL-SERVERNAME and DATABASE accordingly. Zwróć uwagę na to, że identyfikator zasobu usługi Azure SQL jest https://database.windows.net/.Note the resource ID for Azure SQL is 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 SQL 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();
}

Alternatywną metodą szybkiego przetestowania kompleksowej konfiguracji bez potrzeby pisania i wdrażania aplikacji na maszynie wirtualnej jest użycie programu PowerShell.Alternatively, a quick way to test the end to end setup without having to write and deploy an app on the VM is using PowerShell.

  1. W portalu przejdź do pozycji Maszyny wirtualne, a następnie przejdź do swojej maszyny wirtualnej z systemem Windows i w pozycji Przegląd kliknij przycisk Połącz.In the portal, navigate to Virtual Machines and go to your Windows virtual machine and in the Overview, click Connect.

  2. Wprowadź nazwę użytkownika i hasło dodane podczas tworzenia maszyny wirtualnej z systemem Windows.Enter in your Username and Password for which you added when you created the Windows VM.

  3. Teraz, po utworzeniu połączenia pulpitu zdalnego z maszyną wirtualną, otwórz program PowerShell w sesji zdalnej.Now that you have created a Remote Desktop Connection with the virtual machine, open PowerShell in the remote session.

  4. Używając polecenia Invoke-WebRequest programu PowerShell, wyślij żądanie do lokalnego punktu końcowego tożsamości zarządzanej, aby uzyskać token dostępu na potrzeby usługi Azure SQL.Using PowerShell’s Invoke-WebRequest, make a request to the local managed identity's endpoint to get an access token for 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"}
    

    Skonwertuj odpowiedź z obiektu JSON do obiektu PowerShell.Convert the response from a JSON object to a PowerShell object.

    $content = $response.Content | ConvertFrom-Json
    

    Wyodrębnij token dostępu z odpowiedzi.Extract the access token from the response.

    $AccessToken = $content.access_token
    
  5. Otwórz połączenie z serwerem SQL.Open a connection to the SQL server. Pamiętaj, aby zastąpić wartości AZURE SQL-SERVERNAME i DATABASE.Remember to replace the values for AZURE-SQL-SERVERNAME and DATABASE.

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

    Następnie utwórz i wyślij zapytanie do serwera.Next, create and send a query to the server. Pamiętaj, aby zastąpić wartość w pozycji TABLE.Remember to replace the value for 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)
    

Sprawdź wartość $DataSet.Tables[0], aby wyświetlić wyniki zapytania.Examine the value of $DataSet.Tables[0] to view the results of the query.

WyłączenieDisable

Aby wyłączyć tożsamość przypisaną przez system na maszynie wirtualnej, Ustaw stan przypisanej do niej pozycji tożsamość przypisana do systemu.To disable the system-assigned identity on your VM, set the status of the system-assigned identity to Off.

Tworzenie nowego konta magazynu

Następne krokiNext steps

W tym samouczku przedstawiono sposób używania przypisanej przez system tożsamości zarządzanej w celu uzyskania dostępu do serwera usługi Azure SQL.In this tutorial, you learned how to use a system-assigned managed identity to access Azure SQL server. Aby dowiedzieć się więcej o usłudze Azure SQL Server, zobacz:To learn more about Azure SQL Server see: