Samouczek: Łączenie się z bazą danych SQL Database z usługi NET 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 także tożsamość zarządzaną dla aplikacji, czyli gotowe rozwiązanie do zabezpieczania dostępu do usługi Azure SQL Database i innych usług platformy Azure. 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 dodasz tożsamość zarządzaną do przykładowej aplikacji internetowej utworzonej w jednym z następujących samouczków:
- Samouczek: tworzenie aplikacji ASP.NET na platformie Azure przy użyciu usługi Azure SQL Database
- Samouczek: tworzenie aplikacji ASP.NET Core i Azure SQL Database w usłudze aplikacja systemu Azure Service
Po zakończeniu Twoja przykładowa aplikacja będzie bezpiecznie łączyć się z usługą SQL Database bez konieczności podawania nazwy użytkownika i hasła.
Uwaga
Kroki opisane w tym samouczku obsługują następujące wersje:
- .NET Framework 4.8 lub nowszy
- .NET 6.0 i nowsze
Aby uzyskać wskazówki dotyczące usługi Azure Database for MySQL lub Azure Database for PostgreSQL w innych platformach językowych (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.
Czego nauczysz się:
- Włączanie tożsamości zarządzanych
- Udzielanie usłudze SQL Database dostępu do tożsamości zarządzanej
- Konfigurowanie programu Entity Framework do korzystania z uwierzytelniania firmy Microsoft w usłudze SQL Database
- Nawiązywanie połączenia z usługą SQL Database z poziomu programu Visual Studio przy użyciu uwierzytelniania entra firmy Microsoft
Uwaga
Uwierzytelnianie entra firmy Microsoft różni się od zintegrowanego uwierzytelniania systemu Windows w usłudze lokalna usługa Active Directory (AD 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.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.
Wymagania wstępne
Ten artykuł będzie kontynuowany w miejscu, w którym zostało to przerwane w jednym z następujących samouczków:
- Samouczek: tworzenie aplikacji ASP.NET na platformie Azure przy użyciu usługi SQL Database
- Samouczek: tworzenie aplikacji ASP.NET Core i SQL Database w usłudze aplikacja systemu Azure Service.
Jeśli jeszcze tego nie zrobiono, najpierw wykonaj jedną z dwóch samouczków. Alternatywnie możesz dostosować kroki dla własnej aplikacji .NET za pomocą usługi SQL Database.
Aby debugować aplikację przy użyciu usługi SQL Database jako zaplecza, upewnij się, że z komputera jest dozwolone połączenie klienta. Jeśli nie, dodaj adres IP klienta, wykonując kroki opisane w temacie Zarządzanie regułami zapory adresów IP na poziomie serwera przy użyciu witryny Azure Portal.
Przygotowanie środowiska do interfejsu wiersza polecenia platformy Azure.
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
1. Udzielanie dostępu do bazy danych użytkownikowi firmy Microsoft Entra
Najpierw włącz uwierzytelnianie microsoft Entra w usłudze SQL Database, przypisując użytkownika Microsoft Entra jako administratora serwera. Ten użytkownik różni się od konta Microsoft użytego do zarejestrowania się w celu uzyskania subskrypcji platformy Azure. Musi to być użytkownik, który został utworzony, zaimportowany, zsynchronizowany lub zaproszony do usługi Microsoft Entra ID. Aby uzyskać więcej informacji na temat dozwolonych użytkowników microsoft Entra, zobacz Microsoft Entra features and limitations in SQL Database (Funkcje i ograniczenia firmy Microsoft w usłudze SQL Database).
Jeśli dzierżawa firmy Microsoft Entra nie ma jeszcze użytkownika, utwórz go, wykonując kroki opisane w temacie Dodawanie lub usuwanie użytkowników przy użyciu identyfikatora Entra firmy Microsoft.
Znajdź identyfikator obiektu użytkownika Microsoft Entra przy użyciu i zastąp
az ad user list
wartość <user-principal-name>. Wynik jest zapisywany w zmiennej.$azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
Napiwek
Aby wyświetlić listę wszystkich głównych nazw użytkowników w identyfikatorze Entra firmy Microsoft, uruchom polecenie
az ad user list --query '[].userPrincipalName'
.Dodaj tego użytkownika microsoft Entra jako administratora usługi Active Directory przy użyciu
az sql server ad-admin create
polecenia w usłudze Cloud Shell. W poniższym poleceniu zastąp <ciąg server-name> nazwą serwera (bez sufiksu.database.windows.net
).az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
Aby uzyskać więcej informacji na temat dodawania administratora usługi Active Directory, zobacz Provision a Microsoft Entra administrator for your server (Aprowizuj administratora usługi Microsoft Entra dla serwera)
2. Konfigurowanie środowiska deweloperskiego
- Visual Studio Windows
- Visual Studio dla systemu macOS
- Visual Studio Code
- Interfejs wiersza polecenia platformy Azure
- Azure PowerShell
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.
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.
3. Modyfikowanie projektu
Uwaga
Microsoft.Azure.Services.AppAuthentication nie jest już zalecane do użycia z nowym zestawem Azure SDK.
Jest on zastępowany nową biblioteką klienta tożsamości platformy Azure dostępną dla platform .NET, Java, TypeScript i Python i powinna być używana do wszystkich nowych programowania.
Informacje o sposobie migracji do Azure Identity
programu można znaleźć tutaj: AppAuthentication to Azure.Identity Migration Guidance (Wskazówki dotyczące migracji w usłudze Azure.Identity).
Kroki wykonywane dla projektu zależą od tego, czy używasz platformy Entity Framework Core (domyślnie dla platformy ASP.NET Core) czy Entity Framework (ustawienie domyślne dla ASP.NET).
W programie Visual Studio otwórz konsolę Menedżer pakietów i dodaj pakiet NuGet Microsoft.Data.SqlClient:
Install-Package Microsoft.Data.SqlClient -Version 5.1.0
W samouczku
MyDbConnection
ASP.NET Core i SQL Database parametry połączenia w appsettings.json nie jest jeszcze używana. Środowisko lokalne i środowisko platformy Azure pobierają parametry połączenia z odpowiednich zmiennych środowiskowych, aby zachować wpisy tajne połączenia z pliku źródłowego. Ale teraz z uwierzytelnianiem usługi Active Directory nie ma więcej wpisów tajnych. W appsettings.json zastąp wartośćMyDbConnection
parametry połączenia:"Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
Uwaga
Domyślny typ uwierzytelniania usługi Active Directory może być używany zarówno na komputerze lokalnym, jak i w usłudze aplikacja systemu Azure. Sterownik próbuje uzyskać token z identyfikatora Entra firmy Microsoft przy użyciu różnych środków. Jeśli aplikacja jest wdrażana, pobiera token z przypisanej przez system tożsamości zarządzanej aplikacji. Może również uwierzytelniać się przy użyciu tożsamości zarządzanej przypisanej przez użytkownika, jeśli uwzględnisz następujące
User Id=<client-id-of-user-assigned-managed-identity>;
elementy w parametry połączenia. Jeśli aplikacja jest uruchomiona lokalnie, próbuje pobrać token z programu Visual Studio, programu Visual Studio Code i interfejsu wiersza polecenia platformy Azure.To wszystko, czego potrzebujesz, aby nawiązać połączenie z usługą SQL Database. Podczas debugowania w programie Visual Studio kod używa użytkownika Microsoft Entra skonfigurowanego w wersji 2. Skonfiguruj środowisko deweloperskie. Później skonfigurujesz usługę SQL Database, aby zezwolić na połączenie z tożsamości zarządzanej aplikacji usługi App Service. Klasa
DefaultAzureCredential
buforuje token w pamięci i pobiera go z identyfikatora Entra firmy Microsoft tuż przed wygaśnięciem. Do odświeżenia tokenu nie jest potrzebny żaden kod niestandardowy.Wpisz
Ctrl+F5
polecenie , aby ponownie uruchomić aplikację. Ta sama aplikacja CRUD w przeglądarce łączy się teraz bezpośrednio z usługą Azure SQL Database przy użyciu uwierzytelniania microsoft Entra. Ta konfiguracja umożliwia uruchamianie migracji baz danych z programu Visual Studio.
4. Używanie łączności tożsamości zarządzanej
Następnie skonfigurujesz aplikację usługi App Service tak, aby łączyła się z usługą SQL Database przy użyciu przypisanej przez system tożsamości zarządzanej.
Uwaga
Instrukcje w tej sekcji dotyczą tożsamości przypisanej przez system, 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 w aplikacji
Aby włączyć tożsamość zarządzanej dla aplikacji platformy Azure, użyj polecenia az webapp identity assign w usłudze Cloud Shell. W poniższym poleceniu zastąp ciąg app-name>.<
az webapp identity assign --resource-group myResourceGroup --name <app-name>
Uwaga
Aby włączyć tożsamość zarządzaną dla miejsca wdrożenia, dodaj --slot <slot-name>
i użyj nazwy miejsca w< polu nazwa-miejsca>.
Poniżej przedstawiono przykładowe dane wyjściowe:
{ "additionalProperties": {}, "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Udzielanie uprawnień tożsamości zarządzanej
Uwaga
Jeśli chcesz, możesz dodać tożsamość do grupy Microsoft Entra, a następnie przyznać usłudze SQL Database dostęp 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 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
W usłudze Cloud Shell zaloguj się do usługi SQL Database przy użyciu polecenia SQLCMD. Zastąp ciąg nazwa-serwera> nazwą serwera,< nazwą bazy> danych używaną przez aplikację,< aad-user-name> i <aad-password> poświadczeniami użytkownika firmy Microsoft Entra.<
sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
W wierszu polecenia SQL dla żądanej bazy danych uruchom następujące polecenia, aby udzielić minimalnych uprawnień wymaganych przez aplikację. Na przykład:
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
<identity-name> to nazwa tożsamości zarządzanej w usłudze Microsoft Entra ID. Jeśli tożsamość jest przypisana przez system, nazwa jest zawsze taka sama jak nazwa aplikacji usługi App Service. W przypadku miejsca wdrożenia nazwa przypisanej przez system tożsamości to< app-name>/slots/<slot-name>. Aby udzielić uprawnień grupie Microsoft Entra, użyj nazwy wyświetlanej grupy (na przykład myAzureSQLDBAccessGroup).
Wpisz polecenie
EXIT
, aby powrócić do wiersza polecenia usługi Cloud Shell.Uwaga
Usługi zaplecza tożsamości zarządzanych utrzymują również pamięć podręczną tokenów, która aktualizuje token dla zasobu docelowego tylko wtedy, gdy wygaśnie. Jeśli popełnisz błąd podczas konfigurowania uprawnień usługi SQL Database i spróbujesz zmodyfikować uprawnienia po próbie uzyskania tokenu z aplikacją, nie otrzymasz nowego tokenu ze zaktualizowanymi uprawnieniami do momentu wygaśnięcia buforowanego tokenu.
Uwaga
Identyfikator entra firmy Microsoft i tożsamości zarządzane nie są obsługiwane w przypadku lokalnego programu SQL Server.
Modyfikowanie parametrów połączenia
Pamiętaj, że te same zmiany wprowadzone w pliku Web.config lub appsettings.json współdziałają z tożsamością zarządzaną, więc jedyną rzeczą do zrobienia jest usunięcie istniejących parametry połączenia w usłudze App Service, które program Visual Studio utworzył podczas wdrażania aplikacji po raz pierwszy. Użyj następującego polecenia, ale zastąp <ciąg app-name> nazwą aplikacji.
az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection
5. Publikowanie zmian
Teraz pozostało tylko opublikowanie zmian na platformie Azure.
Jeśli pochodzisz z artykułu Samouczek: tworzenie aplikacji ASP.NET na platformie Azure przy użyciu usługi SQL Database, opublikuj zmiany w programie Visual Studio. W obszarze Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt DotNetAppSqlDb i wybierz polecenie Publikuj.
Na stronie publikowania wybierz pozycję Publikuj.
Ważne
Upewnij się, że nazwa usługi app Service nie jest zgodna z żadną istniejącą rejestracją aplikacji. Spowoduje to konflikty identyfikatorów głównych.
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.
Teraz powinno być możliwe edytowanie listy zadań do wykonania tak jak wcześniej.
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ę.
Następne kroki
Które czynności umiesz wykonać:
- Włączanie tożsamości zarządzanych
- Udzielanie usłudze SQL Database dostępu do tożsamości zarządzanej
- Konfigurowanie programu Entity Framework do korzystania z uwierzytelniania firmy Microsoft w usłudze SQL Database
- Nawiązywanie połączenia z usługą SQL Database z poziomu programu Visual Studio przy użyciu uwierzytelniania entra firmy Microsoft