Samouczek: łączenie usługi Key Vault z aplikacją internetową platformy Azure na platformie .NET przy użyciu tożsamości zarządzanej
Usługa Azure Key Vault umożliwia przechowywanie poświadczeń i innych wpisów tajnych ze zwiększonymi zabezpieczeniami. Jednak kod musi uwierzytelnić się w usłudze Key Vault, aby je pobrać. Tożsamości zarządzane dla zasobów platformy Azure pomagają rozwiązać ten problem, udostępniając usługom platformy Azure automatyczną tożsamość zarządzaną w identyfikatorze Entra firmy Microsoft. Ta tożsamość umożliwia uwierzytelnianie w dowolnej usłudze obsługującej uwierzytelnianie firmy Microsoft Entra, w tym usługę Key Vault, bez konieczności wyświetlania poświadczeń w kodzie.
W tym samouczku utworzysz i wdrożysz aplikację internetową platformy Azure w usłudze aplikacja systemu Azure Service. Użyjesz tożsamości zarządzanej do uwierzytelniania aplikacji internetowej platformy Azure za pomocą usługi Azure Key Vault przy użyciu tajnej biblioteki klienta usługi Azure Key Vault dla platformy .NET i interfejsu wiersza polecenia platformy Azure. Te same podstawowe zasady mają zastosowanie w przypadku używania wybranego języka programowania, programu Azure PowerShell i/lub witryny Azure Portal.
Aby uzyskać więcej informacji na temat aplikacji internetowych usługi aplikacja systemu Azure i wdrażania przedstawionych w tym samouczku, zobacz:
- Omówienie usługi App Service
- Tworzenie aplikacji internetowej ASP.NET Core w usłudze aplikacja systemu Azure
- Lokalne wdrożenie usługi Git w usłudze aplikacja systemu Azure
Wymagania wstępne
Do ukończenia tego samouczka niezbędne są następujące elementy:
- Subskrypcja Azure. Utwórz je bezpłatnie.
- Zestaw .NET Core 3.1 SDK (lub nowszy)
- Instalacja usługi Git w wersji 2.28.0 lub nowszej.
- Interfejs wiersza polecenia platformy Azure lub program Azure PowerShell.
- Azure Key Vault. Magazyn kluczy można utworzyć przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.
- Wpis tajny usługi Key Vault. Wpis tajny można utworzyć przy użyciu witryny Azure Portal, programu PowerShell lub interfejsu wiersza polecenia platformy Azure.
Jeśli aplikacja internetowa została już wdrożona w usłudze aplikacja systemu Azure, możesz pominąć konfigurowanie dostępu aplikacji internetowej do magazynu kluczy i modyfikowanie sekcji kodu aplikacji internetowej.
Tworzenie aplikacji .NET Core
W tym kroku skonfigurujesz lokalny projekt .NET Core.
W oknie terminalu na maszynie utwórz katalog o nazwie akvwebapp
i ustaw go jako bieżący katalog:
mkdir akvwebapp
cd akvwebapp
Utwórz aplikację platformy .NET Core przy użyciu polecenia dotnet new web :
dotnet new web
Uruchom aplikację lokalnie, aby wiedzieć, jak powinna wyglądać podczas wdrażania jej na platformie Azure:
dotnet run
W przeglądarce internetowej przejdź do aplikacji pod adresem http://localhost:5000
.
Na stronie zostanie wyświetlony komunikat "Hello World!" z przykładowej aplikacji.
Aby uzyskać więcej informacji na temat tworzenia aplikacji internetowych dla platformy Azure, zobacz Tworzenie aplikacji internetowej ASP.NET Core w usłudze aplikacja systemu Azure Service
Wdrażanie aplikacji na platformie Azure
W tym kroku wdrożysz aplikację platformy .NET Core w usłudze aplikacja systemu Azure przy użyciu lokalnego narzędzia Git. Aby uzyskać więcej informacji na temat tworzenia i wdrażania aplikacji, zobacz Tworzenie ASP.NET Core aplikacji internetowej na platformie Azure.
Konfigurowanie lokalnego wdrożenia usługi Git
W oknie terminalu wybierz Ctrl+C , aby zamknąć serwer internetowy. Zainicjuj repozytorium Git dla projektu platformy .NET Core:
git init --initial-branch=main
git add .
git commit -m "first commit"
Aby wdrożyć aplikację internetową platformy Azure przy użyciu użytkownika wdrożenia, możesz użyć protokołu FTP i lokalnego narzędzia Git. Po skonfigurowaniu użytkownika wdrożenia można go użyć dla wszystkich wdrożeń platformy Azure. Nazwa użytkownika i hasło wdrożenia na poziomie konta różnią się od poświadczeń subskrypcji platformy Azure.
Aby skonfigurować użytkownika wdrożenia, uruchom polecenie az webapp deployment user set . Wybierz nazwę użytkownika i hasło zgodne z następującymi wytycznymi:
- Nazwa użytkownika musi być unikatowa w obrębie platformy Azure. W przypadku lokalnych wypchnięć git nie może zawierać symbolu znaku (@).
- Hasło musi mieć długość co najmniej ośmiu znaków i zawierać dwa z następujących trzech elementów: litery, cyfry i symbole.
az webapp deployment user set --user-name "<username>" --password "<password>"
Dane wyjściowe JSON zawierają hasło jako null
. Jeśli wystąpi 'Conflict'. Details: 409
błąd, zmień nazwę użytkownika. Jeśli wystąpił błąd 'Bad Request'. Details: 400
, użyj silniejszego hasła.
Zarejestruj nazwę użytkownika i hasło, aby można było go użyć do wdrożenia aplikacji internetowych.
Tworzenie grupy zasobów
Grupa zasobów to logiczny kontener, w którym wdrażasz zasoby platformy Azure i zarządzasz nimi. Utwórz grupę zasobów zawierającą zarówno magazyn kluczy, jak i aplikację internetową za pomocą polecenia az group create :
az group create --name "myResourceGroup" -l "EastUS"
Tworzenie planu usługi App Service
Utwórz plan usługi App Service przy użyciu polecenia az appservice plan create interfejsu wiersza polecenia platformy Azure. W poniższym przykładzie tworzony jest plan usługi App Service o nazwie myAppServicePlan
w warstwie cenowej FREE
:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
Po utworzeniu planu usługi App Service interfejs wiersza polecenia platformy Azure wyświetla informacje podobne do wyświetlanych tutaj:
{ "adminSiteName": null, "appServicePlanName": "myAppServicePlan", "geoRegion": "West Europe", "hostingEnvironmentProfile": null, "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan", "kind": "app", "location": "West Europe", "maximumNumberOfWorkers": 1, "name": "myAppServicePlan", < JSON data removed for brevity. > "targetWorkerSizeId": 0, "type": "Microsoft.Web/serverfarms", "workerTierName": null }
Aby uzyskać więcej informacji, zobacz Zarządzanie planem usługi App Service na platformie Azure.
Tworzenie aplikacji internetowej
Utwórz aplikację internetową platformy Azure w myAppServicePlan
planie usługi App Service.
Ważne
Podobnie jak w przypadku magazynu kluczy, aplikacja internetowa platformy Azure musi mieć unikatową nazwę. Zastąp <your-webapp-name>
ciąg nazwą aplikacji internetowej w poniższych przykładach.
az webapp create --resource-group "myResourceGroup" --plan "myAppServicePlan" --name "<your-webapp-name>" --deployment-local-git
Po utworzeniu aplikacji internetowej interfejs wiersza polecenia platformy Azure wyświetla dane wyjściowe podobne do wyświetlanych tutaj:
Local git is configured with url of 'https://<username>@<your-webapp-name>.scm.azurewebsites.net/<ayour-webapp-name>.git' { "availabilityState": "Normal", "clientAffinityEnabled": true, "clientCertEnabled": false, "clientCertExclusionPaths": null, "cloningInfo": null, "containerSize": 0, "dailyMemoryTimeQuota": 0, "defaultHostName": "<your-webapp-name>.azurewebsites.net", "deploymentLocalGitUrl": "https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git", "enabled": true, < JSON data removed for brevity. > }
Adres URL zdalnego repozytorium Git jest wyświetlany we właściwości w deploymentLocalGitUrl
formacie https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git
. Zapisz ten adres URL. Będziesz jej potrzebować później.
Teraz skonfiguruj aplikację internetową do wdrożenia z main
gałęzi :
az webapp config appsettings set -g MyResourceGroup --name "<your-webapp-name>" --settings deployment_branch=main
Przejdź do nowej aplikacji, używając następującego polecenia. Zastąp <your-webapp-name>
ciąg nazwą swojej aplikacji.
https://<your-webapp-name>.azurewebsites.net
Zobaczysz domyślną stronę internetową dla nowej aplikacji internetowej platformy Azure.
Wdrażanie aplikacji lokalnej
W lokalnym oknie terminala dodaj zdalną platformę Azure do lokalnego repozytorium Git. W poniższym poleceniu zastąp <deploymentLocalGitUrl-from-create-step>
ciąg adresem URL zdalnego narzędzia Git zapisanym w sekcji Tworzenie aplikacji internetowej.
git remote add azure <deploymentLocalGitUrl-from-create-step>
Użyj następującego polecenia, aby wypchnąć do zdalnej platformy Azure, aby wdrożyć aplikację. Gdy menedżer poświadczeń usługi Git wyświetli monit o podanie poświadczeń, użyj poświadczeń utworzonych w sekcji Konfigurowanie lokalnego wdrożenia git.
git push azure main
Uruchomienie tego polecenia może potrwać kilka minut. Podczas jego uruchamiania są wyświetlane informacje podobne do wyświetlanych w tym miejscu:
Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 285 bytes | 95.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Deploy Async remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'd6b54472f7'. remote: Repository path is /home/site/repository remote: Running oryx build... remote: Build orchestrated by Microsoft Oryx, https://github.com/Microsoft/Oryx remote: You can report issues at https://github.com/Microsoft/Oryx/issues remote: remote: Oryx Version : 0.2.20200114.13, Commit: 204922f30f8e8d41f5241b8c218425ef89106d1d, ReleaseTagName: 20200114.13 remote: Build Operation ID: |imoMY2y77/s=.40ca2a87_ remote: Repository Commit : d6b54472f7e8e9fd885ffafaa64522e74cf370e1 . . . remote: Deployment successful. remote: Deployment Logs : 'https://<your-webapp-name>.scm.azurewebsites.net/newui/jsonviewer?view_url=/api/deployments/d6b54472f7e8e9fd885ffafaa64522e74cf370e1/log' To https://<your-webapp-name>.scm.azurewebsites.net:443/<your-webapp-name>.git d87e6ca..d6b5447 main -> main
Przejdź do (lub odśwież) wdrożonej aplikacji przy użyciu przeglądarki internetowej:
http://<your-webapp-name>.azurewebsites.net
Zobaczysz komunikat "Hello World!", który został wyświetlony wcześniej po odwiedzeniu http://localhost:5000
elementu .
Aby uzyskać więcej informacji na temat wdrażania aplikacji internetowej przy użyciu usługi Git, zobacz Wdrażanie lokalne usługi Git w usłudze aplikacja systemu Azure
Konfigurowanie aplikacji internetowej w celu nawiązania połączenia z usługą Key Vault
W tej sekcji skonfigurujesz dostęp internetowy do usługi Key Vault i zaktualizujesz kod aplikacji, aby pobrać wpis tajny z usługi Key Vault.
Tworzenie i przypisywanie dostępu do tożsamości zarządzanej
W tym samouczku użyjemy tożsamości zarządzanej do uwierzytelniania w usłudze Key Vault. Tożsamość zarządzana automatycznie zarządza poświadczeniami aplikacji.
W interfejsie wiersza polecenia platformy Azure, aby utworzyć tożsamość dla aplikacji, uruchom polecenie az webapp-identity assign :
az webapp identity assign --name "<your-webapp-name>" --resource-group "myResourceGroup"
Polecenie zwróci ten fragment kodu JSON:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Aby udzielić aplikacji uprawnień do magazynu kluczy za pomocą kontroli dostępu opartej na rolach (RBAC), przypisz rolę przy użyciu polecenia interfejsu wiersza polecenia platformy Azure az role assignment create.
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
Zastąp <app-id>
wartości , <subscription-id>
i <resource-group-name>
<your-unique-keyvault-name>
wartościami rzeczywistymi. <app-id>
to identyfikator aplikacji (klienta) zarejestrowanej aplikacji w firmie Microsoft Entra.
Modyfikowanie aplikacji w celu uzyskania dostępu do magazynu kluczy
W tym samouczku użyjesz tajnej biblioteki klienta usługi Azure Key Vault do celów demonstracyjnych. Możesz również użyć biblioteki klienta certyfikatu usługi Azure Key Vault lub biblioteki klienta kluczy usługi Azure Key Vault.
Instalowanie pakietów
W oknie terminalu zainstaluj bibliotekę klienta wpisu tajnego usługi Azure Key Vault dla pakietów bibliotek klienta .NET i Azure Identity:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Aktualizacja kodu
Znajdź i otwórz plik Startup.cs dla platformy .NET 5.0 lub starszej albo Program.cs plik dla platformy .NET 6.0 w projekcie akvwebapp.
Dodaj następujące wiersze do nagłówka:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Dodaj następujące wiersze przed wywołaniem app.UseEndpoints
(.NET 5.0 lub starszym) lub app.MapGet
wywołaniem (.NET 6.0), aktualizując identyfikator URI w celu odzwierciedlenia vaultUri
magazynu kluczy. Ten kod używa wartości DefaultAzureCredential() do uwierzytelniania w usłudze Key Vault, która używa tokenu z tożsamości zarządzanej do uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania w usłudze Key Vault, zobacz Przewodnik dewelopera. Kod używa również wykładniczego wycofywania dla ponownych prób w przypadku ograniczenia usługi Key Vault. Aby uzyskać więcej informacji na temat limitów transakcji usługi Key Vault, zobacz Wskazówki dotyczące ograniczania przepustowości usługi Azure Key Vault.
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
var client = new SecretClient(new Uri("https://<your-unique-key-vault-name>.vault.azure.net/"), new DefaultAzureCredential(),options);
KeyVaultSecret secret = client.GetSecret("<mySecret>");
string secretValue = secret.Value;
.NET 5.0 lub starszy
Zaktualizuj wiersz await context.Response.WriteAsync("Hello World!");
tak, aby wyglądał następująco:
await context.Response.WriteAsync(secretValue);
.NET 6.0
Zaktualizuj wiersz app.MapGet("/", () => "Hello World!");
tak, aby wyglądał następująco:
app.MapGet("/", () => secretValue);
Pamiętaj, aby zapisać zmiany przed przejściem do następnego kroku.
Ponowne wdrażanie aplikacji internetowej
Teraz, gdy kod został zaktualizowany, możesz go ponownie wdrożyć na platformie Azure przy użyciu następujących poleceń git:
git add .
git commit -m "Updated web app to access my key vault"
git push azure main
Przejdź do ukończonej aplikacji internetowej
http://<your-webapp-name>.azurewebsites.net
Gdzie przed wyświetleniem komunikatu "Hello World!", powinna zostać wyświetlona wartość wpisu tajnego.