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:

Wymagania wstępne

Do ukończenia tego samouczka niezbędne są następujące elementy:

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 klawisze 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:5000elementu .

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 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 nadać aplikacji internetowej uprawnienia do wykonywania operacji pobierania i wyświetlania listy w magazynie kluczy, przekaż polecenie principalId az keyvault set-policy interfejsu wiersza polecenia platformy Azure:

az keyvault set-policy --name "<your-keyvault-name>" --object-id "<principalId>" --secret-permissions get list

Zasady dostępu można również przypisywać przy użyciu witryny Azure Portal lub programu PowerShell.

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 plik Program.cs 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.

Następne kroki