Udostępnij za pośrednictwem


Samouczek: Użycie tożsamości zarządzanej do połączenia aplikacji internetowej Azure z bazą danych Azure SQL bez użycia sekretów

Azure App Service oferuje wysoce skalowalną, samopoprawczą usługę hostingu internetowego na platformie Azure. Usługa App Service udostępnia również tożsamość zarządzaną aplikacji, która jest rozwiązaniem w zakresie zabezpieczania dostępu do usługi Azure SQL i innych usług platformy Azure. Tożsamości zarządzane w usłudze App Service sprawiają, że aplikacja jest bezpieczniejsza, eliminując wpisy tajne, takie jak poświadczenia w parametrach połączenia.

W tym samouczku pokazano, jak dodać tożsamość zarządzaną do przykładowej aplikacji platformy .NET z zapleczem usługi Azure SQL. Po zakończeniu aplikacja może bezpiecznie nawiązać połączenie z bazą danych Azure SQL Database bez konieczności używania nazwy użytkownika i hasła.

Diagram architektury dla scenariusza instruktażowego.

W tym samouczku nauczysz się następujących rzeczy:

  • Włącz funkcję tożsamości zarządzanych.
  • Udziel usłudze Azure SQL Database dostępu do tożsamości zarządzanej.
  • Skonfiguruj Entity Framework do używania uwierzytelniania Microsoft Entra z bazą danych SQL.
  • Połącz się z bazą danych SQL z programu Visual Studio przy użyciu uwierzytelniania Microsoft Entra.

Aby uzyskać wskazówki dotyczące korzystania z usługi Azure Database for MySQL lub Azure Database for PostgreSQL w środowiskach Node.js, Python i Java, zobacz 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.

Uwaga

  • Identyfikator Microsoft Entra ID i tożsamości zarządzane nie są obsługiwane w przypadku lokalnego serwera SQL Server.

  • Uwierzytelnianie firmy Microsoft Entra różni się od zintegrowanego uwierzytelniania systemu Windows w lokalnych usługach Active Directory Domain Services (DS). Usługi AD DS i Microsoft Entra ID używają zupełnie różnych protokołów uwierzytelniania. Aby uzyskać więcej informacji, zobacz dokumentację usług Microsoft Entra Domain Services.

Wymagania wstępne

Udzielanie administratorowi bazy danych dostępu do użytkownika Entra firmy Microsoft

Włącz uwierzytelnianie microsoft Entra w bazie danych Azure SQL Database, przypisując użytkownika Microsoft Entra jako administratora serwera Azure SQL. Administrator firmy Microsoft Entra musi być użytkownikiem utworzonym, zaimportowanym, zsynchronizowanym lub zaproszonym do identyfikatora Entra firmy Microsoft. Ten użytkownik może nie być taki sam jak użytkownik konta Microsoft dla subskrypcji platformy Azure.

Uruchom następujące polecenia w środowisku powłoki Bash usługi Azure Cloud Shell lub po zalogowaniu się lokalnie do Azure CLI.

  1. Użyj az ad user list z parametrem display-name, filter lub upn, aby uzyskać identyfikator obiektu dla użytkownika Microsoft Entra ID, którego chcesz zostać administratorem. Uruchom az ad user list samodzielnie, aby wyświetlić informacje dla wszystkich użytkowników w katalogu Microsoft Entra.

    Na przykład następujące polecenie wyświetla informacje dla użytkownika Microsoft Entra ID z display-name o imieniu i nazwisku Firstname Lastname.

    az ad user list --display-name "Firstname Lastname"
    

    Oto przykładowe dane wyjściowe:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Dodaj użytkownika Microsoft Entra ID jako administratora na serwerze Azure SQL przy użyciu az sql server ad-admin create parametru object-id . W poniższym poleceniu zastąp <server-name> nazwę serwera bez sufiksu .database.windows.net, oraz <entra-id> wartością id z wyniku poprzedniego polecenia az ad user list.

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    

Konfigurowanie łączności tożsamości zarządzanej dla aplikacji

Poniższe kroki umożliwiają skonfigurowanie aplikacji w celu nawiązania połączenia z usługą Azure SQL Database przy użyciu przypisanej przez system tożsamości zarządzanej. Aby użyć tożsamości przypisanej przez użytkownika, zobacz 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.

Włączanie tożsamości zarządzanej dla aplikacji

Aby włączyć tożsamość zarządzaną dla aplikacji platformy Azure, użyj polecenia az webapp identity assign , zastępując ciąg <app-name> nazwą aplikacji. Nazwa tożsamości przypisanej przez system jest zawsze taka sama jak nazwa aplikacji.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Poniżej przedstawiono przykładowe dane wyjściowe:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Aby włączyć zarządzaną tożsamość dla miejsca wdrożenia, dodaj --slot <slot-name> do poprzedniego polecenia i użyj nazwy miejsca w <slot-name>. Nazwa tożsamości systemowej przypisanej do miejsca wdrożenia to <app-name>/slots/<slot-name>.

Możesz również dodać tożsamość do grupy Microsoft Entra, a następnie przyznać usłudze SQL Database dostęp do grupy Microsoft Entra zamiast do tożsamości. Aby udzielić uprawnień grupie Microsoft Entra, użyj jej nazwy wyświetlanej. Następujące polecenia dodają przykładową tożsamość zarządzaną 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 myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Przyznawanie uprawnień dla tożsamości zarządzanej

Udziel tożsamości minimalnych uprawnień, które są wymagane przez aplikację.

  1. Otwórz wiersz polecenia programu PowerShell i zaloguj się do usługi SQL Database przy użyciu następującego polecenia SQLCMD. Zastąp <server-name> nazwą swojego serwera, <db-name> nazwą swojej bazy danych oraz <admin-user> na userPrincipalName, czyli nazwę użytkownika administratora, z danych wyjściowych poprzedniego polecenia az ad user list.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Postępuj zgodnie z monitami, aby się zalogować.

  2. W wierszu polecenia SQL uruchom następujące polecenia, aby przyznać aplikacji minimalne uprawnienia, których potrzebuje w bazie danych. Zastąp <identity-name> nazwą tożsamości zarządzanej w usłudze Microsoft Entra ID, której nazwa jest taka sama jak nazwa aplikacji.

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

Uwaga

Usługi tożsamości zarządzanej zaplecza utrzymują pamięć podręczną tokenów , która aktualizuje token dla zasobu docelowego tylko wtedy, gdy wygaśnie. Jeśli spróbujesz zmodyfikować uprawnienia usługi SQL Database po pierwszym otrzymaniu tokenu z aplikacją, nie otrzymasz nowego tokenu ze zaktualizowanymi uprawnieniami do momentu wygaśnięcia buforowanego tokenu.

Usuwanie oryginalnych parametrów połączenia

Wszelkie zmiany wprowadzone w web.config lub appsettings.json współpracują z tożsamością zarządzaną. Oryginalny ciąg połączenia użyty podczas pierwszego wdrażania aplikacji można usunąć. Aby usunąć ciąg połączenia, uruchom następujące polecenie Azure CLI, zastępując <app-name> nazwą swojej aplikacji i <connection-string-name> nazwą swojego ciągu połączenia.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names <connection-string-name>

Konfigurowanie środowiska projektowego

Skonfiguruj wybrane środowisko programistyczne i zaloguj się na platformie Azure. 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.

Program Visual Studio dla systemu Windows jest zintegrowany z uwierzytelnianiem firmy Microsoft Entra.

  1. Aby włączyć rozwój i debugowanie w programie Visual Studio, dodaj użytkownika Microsoft Entra, wybierając pozycję Plik>Ustawienia konta w górnym menu, a następnie wybierz Zaloguj lub Dodaj.
  2. Aby ustawić użytkownika Microsoft Entra na potrzeby uwierzytelniania usługi platformy Azure, wybierz pozycję Narzędzia>Opcje w górnym menu, a następnie wybierz Uwierzytelnianie usługi Azure>Wybór konta. Wybierz dodanego użytkownika Microsoft Entra i wybierz przycisk OK.

Modyfikowanie projektu i publikowanie aplikacji

Aplikacja internetowa korzystająca z bazy danych Azure SQL Database używa kontekstu bazy danych do nawiązywania połączenia z bazą danych. Aby używać uwierzytelniania Microsoft Entra do pracy z aplikacją, należy zaktualizować kontekst bazy danych, aby odwoływał się do dostawcy programu Entity Framework SQL Server, który zależy od nowoczesnego dostawcy ADO.NET Microsoft.Data.SqlClient.

Dostawca Entity Framework zastępuje wbudowanego dostawcę SQL Server System.Data.SqlClient i obejmuje obsługę metod uwierzytelniania Microsoft Entra ID. Aby uzyskać więcej informacji, zobacz Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] Działa lokalnie, aby używać Microsoft.Data.SqlClient dla kontekstu bazy danych, ale ponieważ System.Data.SqlClient jest zakodowany jako dostawca w usłudze Azure App Service, należy rozszerzyć MicrosoftSqlDbConfiguration , aby przekierować System.Data.SqlClient odwołania do Microsoft.Data.SqlClient . Kroki różnią się w zależności od tego, czy masz aplikację ASP.NET, czy ASP.NET Core.

Aplikacja ASP.NET Core domyślnie używa platformy Entity Framework Core .

  1. W konsoli menedżera pakietów programu Visual Studio dodaj pakiet NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. W appsettings.json, zastąp wartość ciągu połączenia następującym kodem, zastępując <server-name nazwą serwera i <database-name> nazwą bazy danych.

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Uwaga

    Możesz użyć uwierzytelniania domyślnego usługi Active Directory zarówno na komputerze lokalnym, jak i w usłudze Azure App Service. Sterownik może uzyskać token z identyfikatora Entra firmy Microsoft na kilka różnych sposobów.

    Jeśli aplikacja jest wdrożona, sterownik uzyskuje token z zarządzanej tożsamości przypisanej do aplikacji przez system. Sterownik może również uwierzytelniać się przy użyciu przez użytkownika przypisanej tożsamości zarządzanej, jeśli uwzględnisz User Id=<client-id-of-user-assigned-managed-identity>; w parametrach połączenia.

    Klasa DefaultAzureCredential buforuje token w pamięci i pobiera go z identyfikatora Entra firmy Microsoft przed wygaśnięciem. Do odświeżenia tokenu nie jest potrzebny żaden kod niestandardowy.

    Teraz masz wszystko, co musisz zrobić, aby nawiązać połączenie z usługą Azure SQL Database podczas debugowania w programie Visual Studio. Twój kod używa użytkownika Microsoft Entra skonfigurowanego podczas konfigurowania środowiska deweloperskiego.

  3. Uruchom aplikację. Aplikacja CRUD w przeglądarce łączy się bezpośrednio z bazą danych Azure SQL Database przy użyciu uwierzytelniania firmy Microsoft Entra. Ta konfiguracja umożliwia uruchamianie migracji baz danych z programu Visual Studio.

  4. Opublikuj zmiany przy użyciu następujących poleceń usługi Git:

    git commit -am "configure managed identity"
    git push azure main
    

Testowanie aplikacji

Gdy nowa strona internetowa wyświetla listę zadań do wykonania, aplikacja nawiązuje połączenie z bazą danych za pomocą tożsamości zarządzanej.

Zrzut ekranu przedstawiający aplikację platformy Azure po migracji Code First.

Teraz możesz edytować listę to-do.

Czyszczenie zasobów

W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie będą raczej potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w usłudze Cloud Shell:

az group delete --name myResourceGroup

Wykonanie tego polecenia może potrwać około minutę.