Samouczek: używanie przypisanej przez system tożsamości zarządzanej maszyny wirtualnej systemu Windows w celu uzyskania dostępu do usługi Azure SQL

W tym samouczku pokazano, jak używać tożsamości przypisanej przez system dla maszyny wirtualnej z systemem Windows w celu uzyskania dostępu do usługi Azure SQL Database. Tożsamości usługi zarządzanej są automatycznie zarządzane przez platformę Azure i umożliwiają uwierzytelnianie w usługach obsługujących uwierzytelnianie firmy Microsoft Entra bez konieczności wstawiania poświadczeń do kodu. Dowiedz się, jak odbywa się:

  • Udzielanie maszynie wirtualnej dostępu do usługi Azure SQL Database
  • Włączanie uwierzytelniania entra firmy Microsoft
  • Tworzenie w bazie danych zawartego użytkownika, który będzie reprezentować tożsamość maszyny wirtualnej przypisaną przez system
  • Uzyskiwanie tokenu dostępu przy użyciu tożsamości maszyny wirtualnej i używanie go do wykonywania zapytań w usłudze Azure SQL Database

Wymagania wstępne

  • Jeśli nie znasz funkcji tożsamości zarządzanych dla zasobów platformy Azure, zobacz to omówienie.
  • Jeśli nie masz jeszcze konta platformy Azure, przed kontynuowaniem utwórz bezpłatne konto.
  • Aby przeprowadzić wymagane czynności tworzenia zasobów i zarządzania rolami, Twoje konto musi mieć uprawnienia „Właściciel” w odpowiednim zakresie (subskrypcji lub grupy zasobów). Jeśli potrzebujesz pomocy dotyczącej przypisywania ról, zobacz Przypisywanie ról platformy Azure w celu zarządzania dostępem do zasobów subskrypcji platformy Azure.

Włączanie

Włączenie tożsamości zarządzanej przypisanej przez system jest jednym kliknięciem. Można ją włączyć podczas tworzenia maszyny wirtualnej lub we właściwościach istniejącej maszyny wirtualnej.

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

Aby włączyć tożsamość zarządzaną przypisaną przez system na nowej maszynie wirtualnej:

  1. Zaloguj się do witryny Azure Portal.

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

Udzielanie dostępu

Aby udzielić maszynie wirtualnej dostępu do bazy danych w usłudze Azure SQL Database, możesz użyć istniejącego logicznego serwera SQL lub utworzyć nowy. Aby utworzyć nowy serwer i bazę danych przy użyciu witryny Azure Portal, wykonaj ten przewodnik Szybki start usługi Azure SQL. 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.

Istnieją dwa kroki związane z udzielaniem maszynie wirtualnej dostępu do bazy danych:

  1. Włącz uwierzytelnianie microsoft Entra dla serwera.
  2. Tworzenie w bazie danych zawartego użytkownika, który będzie reprezentować tożsamość maszyny wirtualnej przypisaną przez system.

Włączanie uwierzytelniania entra firmy Microsoft

Aby skonfigurować uwierzytelnianie firmy Microsoft Entra:

  1. W witrynie Azure Portal wybierz opcję Serwery SQL z lewego paska nawigacyjnego.
  2. Wybierz serwer SQL, który ma być włączony dla uwierzytelniania firmy Microsoft Entra.
  3. W sekcji Ustawienia bloku kliknij opcję Administrator usługi Active Directory.
  4. Na pasku poleceń kliknij przycisk Ustaw administratora.
  5. Wybierz konto użytkownika Microsoft Entra, które ma zostać administratorem serwera, a następnie kliknij pozycję Wybierz.
  6. Na pasku poleceń kliknij przycisk Zapisz.

Tworzenie zawartego użytkownika

W tej sekcji pokazano, jak utworzyć zawartego użytkownika w bazie danych, który reprezentuje tożsamość przypisaną przez system maszyny wirtualnej. W tym kroku potrzebujesz programu Microsoft SQL Server Management Studio (SSMS). Przed rozpoczęciem warto również zapoznać się z następującymi artykułami dotyczącymi integracji z firmą Microsoft Entra:

Usługa SQL DB wymaga unikatowych nazw wyświetlanych identyfikatorów entra firmy Microsoft. W związku z tym konta microsoft Entra, takie jak użytkownicy, grupy i jednostki usługi (aplikacje), a nazwy maszyn wirtualnych włączone dla tożsamości zarządzanej muszą być unikatowo zdefiniowane w identyfikatorze Entra firmy Microsoft w odniesieniu do ich nazw wyświetlanych. Usługa SQL DB sprawdza nazwę wyświetlaną identyfikatora entra firmy Microsoft podczas tworzenia takich użytkowników w języku T-SQL i jeśli nie jest unikatowa, polecenie nie może wysłać żądania podania unikatowej nazwy wyświetlanej identyfikatora entra firmy Microsoft dla danego konta.

Aby utworzyć zawartego użytkownika:

  1. Uruchom program SQL Server Management Studio.

  2. W oknie dialogowym Połączenie do serwera wprowadź nazwę serwera w polu Nazwa serwera.

  3. W polu Uwierzytelnianie wybierz opcję Active Directory — uniwersalne z obsługą uwierzytelniania wieloskładnikowego.

  4. W polu Nazwa użytkownika wprowadź nazwę konta Microsoft Entra, które zostało ustawione jako administrator serwera, na przykładhelen@woodgroveonline.com

  5. Kliknij Opcje.

  6. W polu Połącz z bazą danych wpisz nazwę niesystemowej bazy danych, którą chcesz skonfigurować.

  7. Kliknij Połącz. Zakończ proces logowania.

  8. W Eksploratorze obiektów rozwiń folder Bazy danych.

  9. Kliknij prawym przyciskiem myszy bazę danych użytkownika i wybierz pozycję Nowe zapytanie.

  10. W oknie zapytania wpisz następujący wiersz, a następnie kliknij przycisk Wykonaj na pasku narzędzi:

    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.

    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.

  11. Wyczyść okno zapytania, wpisz następujący wiersz, a następnie kliknij przycisk Wykonaj na pasku narzędzi:

    Uwaga

    VMName w poniższym poleceniu jest nazwą maszyny wirtualnej, dla której włączono tożsamość przypisaną przez system w sekcji wymagań wstępnych.

    Jeśli wystąpi błąd "Jednostka VMName ma zduplikowaną nazwę wyświetlaną", dołącz instrukcję CREATE USER z instrukcją WITH OBJECT_ID='xxx'.

    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.

Kod uruchomiony na maszynie wirtualnej może teraz uzyskać token przy użyciu przypisanej przez system tożsamości zarządzanej i użyć tokenu do uwierzytelniania na serwerze.

Uzyskiwanie dostępu do danych

W tej sekcji pokazano, jak uzyskać token dostępu przy użyciu przypisanej przez system tożsamości zarządzanej maszyny wirtualnej i użyć go do wywołania usługi Azure SQL. Usługa Azure SQL natywnie obsługuje uwierzytelnianie firmy Microsoft Entra, dzięki czemu może bezpośrednio akceptować tokeny dostępu uzyskane przy użyciu tożsamości zarządzanych dla zasobów platformy Azure. Ta metoda nie wymaga podania poświadczeń w parametry połączenia.

Oto przykład kodu platformy .NET podczas otwierania połączenia z usługą SQL przy użyciu uwierzytelniania tożsamości zarządzanej usługi Active Directory. Kod musi zostać uruchomiony na maszynie wirtualnej, aby móc uzyskać dostęp do punktu końcowego tożsamości zarządzanej przypisanej przez system maszyny wirtualnej. Do użycia tej metody jest wymagany program .NET Framework 4.6.2 lub nowszy lub .NET Core 3.1 lub nowszy. Zastąp odpowiednio wartości AZURE-SQL-SERVERNAME i DATABASE, a następnie dodaj odwołanie NuGet do biblioteki 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();

Uwaga

Tożsamości zarządzane można używać podczas pracy z innymi opcjami programowania przy użyciu naszych zestawów SDK.

Możesz też szybko przetestować kompleksową konfigurację bez konieczności pisania i wdrażania aplikacji na maszynie wirtualnej przy użyciu programu 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.

  2. Wprowadź w poświadczeniu administratora maszyny wirtualnej dodanym podczas tworzenia maszyny wirtualnej z systemem Windows.

  3. Teraz, po utworzeniu połączenia pulpitu zdalnego z maszyną wirtualną, otwórz program PowerShell w sesji zdalnej.

  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.

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

    $content = $response.Content | ConvertFrom-Json
    

    Wyodrębnij token dostępu z odpowiedzi.

    $AccessToken = $content.access_token
    
  5. Otwórz połączenie z serwerem. Pamiętaj, aby zastąpić wartości AZURE SQL-SERVERNAME i 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()
    

    Następnie utwórz i wyślij zapytanie do serwera. Pamiętaj, aby zastąpić wartość w pozycji 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.

Wyłącz

Aby wyłączyć tożsamość przypisaną przez system na maszynie wirtualnej, ustaw stan tożsamości przypisanej przez system na wartość Wyłączone.

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

Następne kroki

W tym samouczku przedstawiono sposób używania przypisanej przez system tożsamości zarządzanej w celu uzyskania dostępu do usługi Azure SQL Database. Aby dowiedzieć się więcej o usłudze Azure SQL Database, zobacz: