Udostępnij za pośrednictwem


Samouczek: nawiązywanie połączenia z bazami danych platformy Azure z usługi App Service bez wpisów tajnych przy użyciu tożsamości zarządzanej

Usługa App Service oferuje wysoce skalowalną i samonaprawialną usługę hostingu w Internecie na platformie Azure. Zapewnia również tożsamość zarządzaną dla aplikacji, która jest rozwiązaniem kluczowym dla zabezpieczania dostępu do baz danych platformy Azure, w tym:

Uwaga

Ten samouczek nie zawiera wskazówek dotyczących usługi Azure Cosmos DB, która obsługuje uwierzytelnianie firmy Microsoft Entra w inny sposób. Aby uzyskać więcej informacji, zobacz dokumentację usługi Azure Cosmos DB, taką jak Używanie tożsamości zarządzanych przypisanych przez system do uzyskiwania dostępu do danych usługi Azure Cosmos DB.

Tożsamości zarządzane w usłudze App Service zwiększają bezpieczeństwo aplikacji przez wyeliminowanie wpisów tajnych z aplikacji, takich jak poświadczenia w parametrach połączenia. W tym samouczku pokazano, jak nawiązać połączenie z wyżej wymienionymi bazami danych z usługi App Service przy użyciu tożsamości zarządzanych.

Czego nauczysz się:

  • Skonfiguruj użytkownika firmy Microsoft Entra jako administratora dla bazy danych platformy Azure.
  • Połącz się z bazą danych jako użytkownik microsoft Entra.
  • Skonfiguruj tożsamość zarządzaną przypisaną przez system lub przypisaną przez użytkownika dla aplikacji usługi App Service.
  • Udziel dostępu do bazy danych tożsamości zarządzanej.
  • Połącz się z bazą danych platformy Azure z poziomu kodu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) przy użyciu tożsamości zarządzanej.
  • Połącz się z bazą danych platformy Azure ze środowiska deweloperskiego przy użyciu użytkownika Firmy Microsoft Entra.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

  • Utwórz aplikację w usłudze App Service na podstawie platformy .NET, Node.js, python lub Java.
  • Utwórz serwer bazy danych za pomocą usługi Azure SQL Database, usługi Azure Database for MySQL lub usługi Azure Database for PostgreSQL.
  • Należy zapoznać się ze standardowym wzorcem łączności (z nazwą użytkownika i hasłem) i mieć możliwość pomyślnego nawiązania połączenia z poziomu wybranej bazy danych z poziomu aplikacji usługi App Service.

Przygotowanie środowiska do interfejsu wiersza polecenia platformy Azure.

1. Instalowanie rozszerzenia bez hasła łącznika usługi

Zainstaluj najnowsze rozszerzenie bez hasła łącznika usługi dla interfejsu wiersza polecenia platformy Azure:

az extension add --name serviceconnector-passwordless --upgrade

Uwaga

Sprawdź rozszerzenie "serviceconnector-passwordless" w wersji "2.0.2" lub nowszej, uruchamiając polecenie az version. Aby uaktualnić wersję rozszerzenia, może być konieczne uaktualnienie interfejsu wiersza polecenia platformy Azure.

2. Tworzenie połączenia bez hasła

Następnie utwórz połączenie bez hasła z łącznikiem usługi.

Napiwek

Witryna Azure Portal może pomóc w redagowania poniższych poleceń. W witrynie Azure Portal przejdź do zasobu usługi aplikacja systemu Azure, wybierz pozycję Łącznik usługi z menu po lewej stronie i wybierz pozycję Utwórz. Wypełnij formularz wszystkimi wymaganymi parametrami. Platforma Azure automatycznie generuje polecenie tworzenia połączenia, które można skopiować do użycia w interfejsie wiersza polecenia lub wykonać w usłudze Azure Cloud Shell.

Następujące polecenie interfejsu wiersza polecenia platformy Azure używa parametru --client-type .

  1. Opcjonalnie uruchom polecenie , az webapp connection create sql -h aby uzyskać obsługiwane typy klientów.

  2. Wybierz typ klienta i uruchom odpowiednie polecenie. Zastąp symbole zastępcze poniżej własnymi informacjami.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

To polecenie łącznika usługi wykonuje następujące zadania w tle:

  • Włącz tożsamość zarządzaną przypisaną przez system lub przypisz tożsamość użytkownika dla aplikacji <server-name> hostowanej przez usługę aplikacja systemu Azure.
  • Ustaw administratora firmy Microsoft Entra na bieżącego zalogowanego użytkownika.
  • Dodaj użytkownika bazy danych dla przypisanej przez system tożsamości zarządzanej lub tożsamości zarządzanej przypisanej przez użytkownika. Przyznaj temu użytkownikowi wszystkie uprawnienia bazy danych <database-name> . Nazwę użytkownika można znaleźć w parametry połączenia w poprzednich danych wyjściowych polecenia.
  • Ustaw konfiguracje o nazwie AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRINGlub AZURE_SQL_CONNECTIONSTRING na zasób platformy Azure na podstawie typu bazy danych.
  • W przypadku usługi App Service konfiguracje są ustawiane w bloku Ustawienia aplikacji.

Jeśli wystąpi jakikolwiek problem podczas tworzenia połączenia, zapoznaj się z tematem Rozwiązywanie problemów , aby uzyskać pomoc.

3. Modyfikowanie kodu

  1. Instalowanie zależności.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Pobierz parametry połączenia usługi Azure SQL Database ze zmiennej środowiskowej dodanej przez łącznik usługi.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Aby uzyskać więcej informacji, zobacz Używanie uwierzytelniania tożsamości zarządzanej usługi Active Directory.

Aby uzyskać więcej informacji, zobacz Strona główna programowania klientów w programie Microsoft SQL Server. Aby uzyskać więcej przykładów kodu, zobacz Create a passwordless connection to a database service via Service Connector (Tworzenie połączenia bez hasła z usługą za pośrednictwem łącznika usługi).

4. Konfigurowanie środowiska deweloperskiego

Ten przykładowy kod używa DefaultAzureCredential metody w celu uzyskania tokenu możliwego do użycia dla bazy danych platformy Azure z identyfikatora Entra firmy Microsoft, a następnie dodaje go do połączenia z bazą danych. Chociaż można dostosować DefaultAzureCredentialelement , jest już domyślnie wszechstronny. Pobiera token z zalogowanego użytkownika Microsoft Entra lub tożsamości zarządzanej, w zależności od tego, czy jest uruchamiany lokalnie w środowisku deweloperów, czy w usłudze App Service.

Bez żadnych dalszych zmian kod jest gotowy do uruchomienia na platformie Azure. Aby debugować kod lokalnie, jednak środowisko programistyczne wymaga zalogowanego użytkownika firmy Microsoft Entra. W tym kroku skonfigurujesz wybrane środowisko, logując się przy użyciu użytkownika firmy Microsoft Entra.

  1. Program Visual Studio dla systemu Windows jest zintegrowany z uwierzytelnianiem firmy Microsoft Entra. Aby włączyć programowanie i debugowanie w programie Visual Studio, dodaj użytkownika microsoft Entra w programie Visual Studio, wybierając pozycję Ustawienia konta plików>z menu, a następnie wybierz pozycję Zaloguj się lub Dodaj.

  2. Aby ustawić użytkownika microsoft Entra na potrzeby uwierzytelniania usługi platformy Azure, wybierz pozycję Narzędzia>Opcje z menu, a następnie wybierz pozycję Wybór konta uwierzytelniania>usługi platformy Azure. Wybierz dodanego użytkownika Microsoft Entra i wybierz przycisk OK.

Aby uzyskać więcej informacji na temat konfigurowania środowiska deweloperskiego na potrzeby uwierzytelniania firmy Microsoft Entra, zobacz Biblioteka klienta tożsamości platformy Azure dla platformy .NET.

Teraz możesz przystąpić do tworzenia i debugowania aplikacji przy użyciu usługi SQL Database jako zaplecza przy użyciu uwierzytelniania firmy Microsoft Entra.

5. Testowanie i publikowanie

  1. Uruchom kod w środowisku deweloperskim. Kod używa zalogowanego użytkownika Microsoft Entra w środowisku, aby nawiązać połączenie z bazą danych zaplecza. Użytkownik może uzyskać dostęp do bazy danych, ponieważ jest skonfigurowany jako administrator firmy Microsoft Entra dla bazy danych.

  2. Opublikuj kod na platformie Azure przy użyciu preferowanej metody publikowania. W usłudze App Service kod używa tożsamości zarządzanej aplikacji do nawiązywania połączenia z bazą danych zaplecza.

Często zadawane pytania

Czy tożsamość zarządzana obsługuje program SQL Server?

Tak. Aby uzyskać więcej informacji, zobacz:

Otrzymuję błąd Login failed for user '<token-identified principal>'.

Tożsamość zarządzana, dla której próbujesz zażądać tokenu, nie ma autoryzacji dostępu do bazy danych platformy Azure.

Wprowadzono zmiany w uwierzytelnianiu usługi App Service lub skojarzonej rejestracji aplikacji. Dlaczego nadal otrzymuję stary token?

Usługi zaplecza tożsamości zarządzanych również utrzymują pamięć podręczną tokenów, która aktualizuje token dla zasobu docelowego tylko wtedy, gdy wygaśnie. Jeśli po próbie uzyskania tokenu z aplikacją zmodyfikujesz konfigurację, nie otrzymasz nowego tokenu ze zaktualizowanymi uprawnieniami do momentu wygaśnięcia buforowanego tokenu. Najlepszym sposobem obejścia tego jest przetestowanie zmian za pomocą nowego okna InPrivate (Edge)/private (Safari)/Incognito (Chrome). W ten sposób na pewno zaczniesz od nowej sesji uwierzytelnionej.

Jak mogę dodać tożsamość zarządzaną do grupy firmy Microsoft Entra?

Jeśli chcesz, możesz dodać tożsamość do grupy Microsoft Entra, a następnie udzielić dostępu do grupy Microsoft Entra zamiast tożsamości. Na przykład następujące polecenia dodają tożsamość zarządzaną z poprzedniego kroku do nowej grupy o nazwie myAzureSQLDBAccessGroup:

groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Aby udzielić uprawnień bazy danych dla grupy entra firmy Microsoft, zobacz dokumentację odpowiedniego typu bazy danych.

Otrzymuję błąd SSL connection is required. Please specify SSL options and retry.

Nawiązywanie połączenia z bazą danych platformy Azure wymaga dodatkowych ustawień i wykracza poza zakres tego samouczka. Aby uzyskać więcej informacji, zobacz jeden z następujących linków:

Konfigurowanie łączności TLS w usłudze Azure Database for PostgreSQL — pojedynczy serwerkonfiguruje łączność SSL w aplikacji w celu bezpiecznego nawiązywania połączenia z usługą Azure Database for MySQL

Utworzono aplikację przy użyciu szablonu Aplikacja internetowa i baza danych, a teraz nie mogę skonfigurować połączenia tożsamości zarządzanej za pomocą poleceń łącznika usługi.

Łącznik usługi wymaga dostępu sieciowego do bazy danych w celu udzielenia dostępu do tożsamości aplikacji. Podczas tworzenia bezpiecznej domyślnie architektury aplikacji i bazy danych w witrynie Azure Portal przy użyciu szablonu Web App + Database architektura blokuje dostęp sieciowy do bazy danych i zezwala tylko na połączenia z sieci wirtualnej. Dotyczy to również usługi Azure Cloud Shell. Można jednak wdrożyć usługę Cloud Shell w sieci wirtualnej, a następnie uruchomić polecenie Łącznik usługi w tej usłudze Cloud Shell.

Następne kroki

Które czynności umiesz wykonać:

  • Skonfiguruj użytkownika firmy Microsoft Entra jako administratora dla bazy danych platformy Azure.
  • Połącz się z bazą danych jako użytkownik microsoft Entra.
  • Skonfiguruj tożsamość zarządzaną przypisaną przez system lub przypisaną przez użytkownika dla aplikacji usługi App Service.
  • Udziel dostępu do bazy danych tożsamości zarządzanej.
  • Połącz się z bazą danych platformy Azure z poziomu kodu (.NET Framework 4.8, .NET 6, Node.js, Python, Java) przy użyciu tożsamości zarządzanej.
  • Połącz się z bazą danych platformy Azure ze środowiska deweloperskiego przy użyciu użytkownika Firmy Microsoft Entra.