Udostępnij przez


Poradnik: Połączenie się z bazami danych platformy Azure z usługi App Service bez tajemnic z użyciem 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 / Notatka

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 tajnych danych z aplikacji, takich jak poświadczenia w ciągach 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 jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

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.

Przygotuj swoje środowisko dla Azure CLI.

1. Zainstaluj rozszerzenie bez hasła Service Connector

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

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

Uwaga / Notatka

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.

Wskazówka

Portal Azure może pomóc w redagowaniu poniższych poleceń. W witrynie Azure Portal przejdź do zasobu usługi Azure App Service , wybierz pozycję Łącznik usługi w 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 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ę Azure App Service.
  • Ustaw bieżącego zalogowanego użytkownika jako administratora Microsoft Entra.
  • 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 w usłudze 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 do uzyskania użytecznego tokena dla bazy danych Azure z Microsoft Entra ID, a następnie dodaje go do połączenia z bazą danych. Chociaż można dostosować DefaultAzureCredential, element jest już wszechstronny domyślnie. 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ć lokalnie kod, jednakże lokalne środowisko deweloperskie wymaga zalogowanego użytkownika 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> 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 Twoim środowisku, aby połączyć się 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.

Najczęściej zadawane pytania

Czy tożsamość zarządzana obsługuje 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 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 serwerSkonfiguruj łączność SSL w aplikacji, aby bezpiecznie połączyć się z usługą Azure Database for MySQL

Utworzyłem moją aplikację przy użyciu szablonu "Web App + Database", i 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 ustalenia 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.

Dalsze kroki

Czego się nauczyłeś:

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