Kurz: Použití spravované identity k připojení služby Key Vault k webové aplikaci Azure v .NET

Azure Key Vault nabízí způsob ukládání přihlašovacích údajů a dalších tajných kódů se zvýšeným zabezpečením. Váš kód se ale musí ověřit ve službě Key Vault, aby je načetl. Spravované identity pro prostředky Azure pomáhají tento problém vyřešit tím, že službám Azure poskytují automaticky spravovanou identitu v Microsoft Entra ID. Tuto identitu můžete použít k ověření ve všech službách, které podporují ověřování Microsoft Entra, včetně služby Key Vault, aniž byste museli v kódu zobrazovat přihlašovací údaje.

V tomto kurzu vytvoříte a nasadíte webovou aplikaci Azure do služby Aplikace Azure Service. Spravovanou identitu použijete k ověření webové aplikace Azure pomocí trezoru klíčů Azure pomocí tajné klientské knihovny služby Azure Key Vault pro .NET a Azure CLI. Stejné základní principy platí při použití vámi zvoleného vývojového jazyka, Azure PowerShellu nebo webu Azure Portal.

Další informace o webových aplikacích služby Aplikace Azure a nasazeních uvedených v tomto kurzu najdete tady:

Požadavky

Pro absolvování tohoto kurzu potřebujete:

Pokud už máte webovou aplikaci nasazenou ve službě Aplikace Azure Service, můžete přeskočit ke konfiguraci přístupu webové aplikace k trezoru klíčů a úpravě oddílů kódu webové aplikace.

Vytvoření aplikace .NET Core

V tomto kroku nastavíte místní projekt .NET Core.

V okně terminálu na počítači vytvořte adresář s názvem akvwebapp a nastavte ho jako aktuální adresář:

mkdir akvwebapp
cd akvwebapp

Pomocí nového webového příkazu dotnet vytvořte aplikaci .NET Core:

dotnet new web

Spusťte aplikaci místně, abyste věděli, jak by měla vypadat, když ji nasadíte do Azure:

dotnet run

Ve webovém prohlížeči přejděte do aplikace na adrese http://localhost:5000.

Zobrazí se zpráva "Hello World!" z ukázkové aplikace zobrazené na stránce.

Další informace o vytváření webových aplikací pro Azure najdete v tématu Vytvoření webové aplikace ASP.NET Core ve službě Aplikace Azure Service.

Nasadit aplikaci do Azure

V tomto kroku nasadíte aplikaci .NET Core do služby Aplikace Azure Service pomocí místního Gitu. Další informace o tom, jak vytvářet a nasazovat aplikace, najdete v tématu Vytvoření webové aplikace ASP.NET Core v Azure.

Konfigurace místního nasazení Gitu

V okně terminálu zavřete webový server stisknutím kombinace kláves Ctrl+C . Inicializace úložiště Git pro projekt .NET Core:

git init --initial-branch=main
git add .
git commit -m "first commit"

K nasazení webové aplikace Azure pomocí uživatele nasazení můžete použít FTP a místní Git. Jakmile nakonfigurujete uživatele nasazení, můžete ho použít pro všechna nasazení Azure. Uživatelské jméno a heslo nasazení na úrovni účtu se liší od přihlašovacích údajů předplatného Azure.

Pokud chcete nakonfigurovat uživatele nasazení, spusťte příkaz az webapp deployment user set . Zvolte uživatelské jméno a heslo, které odpovídá těmto pokynům:

  • Uživatelské jméno musí být jedinečné v rámci Azure. U místních nabízených oznámení Gitu nemůže obsahovat symbol znaku at (@).
  • Heslo musí mít alespoň osm znaků a musí obsahovat dva z následujících tří prvků: písmena, číslice a symboly.
az webapp deployment user set --user-name "<username>" --password "<password>"

Výstup JSON zobrazuje heslo jako null. Pokud se zobrazí 'Conflict'. Details: 409 chyba, změňte uživatelské jméno. Pokud se zobrazí chyba 'Bad Request'. Details: 400, použijte silnější heslo.

Poznamenejte si uživatelské jméno a heslo, abyste ho mohli použít k nasazení webových aplikací.

Vytvoření skupiny zdrojů

Skupina prostředků je logický kontejner, do kterého nasazujete prostředky Azure a spravujete je. Pomocí příkazu az group create vytvořte skupinu prostředků, která bude obsahovat váš trezor klíčů i webovou aplikaci:

az group create --name "myResourceGroup" -l "EastUS"

Vytvoření plánu služby App Service

Vytvořte plán služby App Service pomocí příkazu Azure CLI az appservice plan create . Následující příklad vytvoří plán služby App Service pojmenovaný myAppServicePlan v FREE cenové úrovni:

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE

Po vytvoření plánu služby App Service se v Azure CLI zobrazí podobné informace jako tady:

{ 
  "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
} 

Další informace najdete v článku Správa plánu služby App Service v Azure.

Vytvoření webové aplikace

Vytvořte webovou aplikaci Azure v myAppServicePlan plánu služby App Service.

Důležité

Podobně jako trezor klíčů musí mít webová aplikace Azure jedinečný název. V následujících příkladech nahraďte <your-webapp-name> názvem vaší webové aplikace.

az webapp create --resource-group "myResourceGroup" --plan "myAppServicePlan" --name "<your-webapp-name>" --deployment-local-git

Po vytvoření webové aplikace se v Azure CLI zobrazí výstup podobný tomu, co vidíte tady:

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

Adresa URL vzdáleného úložiště Git se zobrazuje ve deploymentLocalGitUrl vlastnosti ve formátu https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git. Uložte tuto adresu URL. Budete ho totiž potřebovat později.

Teď nakonfigurujte webovou aplikaci tak, aby se nasadí z main větve:

 az webapp config appsettings set -g MyResourceGroup --name "<your-webapp-name>" --settings deployment_branch=main

Pomocí následujícího příkazu přejděte do nové aplikace. Nahraďte <your-webapp-name> názvem aplikace.

https://<your-webapp-name>.azurewebsites.net

Zobrazí se výchozí webová stránka nové webové aplikace Azure.

Nasazení místní aplikace

Zpět v okně místního terminálu přidejte vzdálené úložiště Azure do místního úložiště Git. V následujícím příkazu nahraďte <deploymentLocalGitUrl-from-create-step> adresou URL vzdáleného úložiště Git, který jste uložili v části Vytvořit webovou aplikaci .

git remote add azure <deploymentLocalGitUrl-from-create-step>

Pomocí následujícího příkazu odešlete aplikaci do vzdáleného úložiště Azure. Když vás Git Credential Manager vyzve k zadání přihlašovacích údajů, použijte přihlašovací údaje, které jste vytvořili v části Konfigurace místního nasazení Gitu.

git push azure main

Spuštění tohoto příkazu může trvat několik minut. Když se spustí, zobrazí se informace podobné tomu, co vidíte tady:

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

Pomocí webového prohlížeče přejděte na nasazenou aplikaci (nebo ji aktualizujte):

http://<your-webapp-name>.azurewebsites.net

Zobrazí se zpráva "Hello World!", kterou jste viděli dříve, když jste navštívili http://localhost:5000.

Další informace o nasazení webové aplikace pomocí Gitu najdete v tématu Místní nasazení Gitu do služby Aplikace Azure Service.

Konfigurace webové aplikace pro připojení ke službě Key Vault

V této části nakonfigurujete webový přístup ke službě Key Vault a aktualizujete kód aplikace tak, aby načítal tajný kód ze služby Key Vault.

Vytvoření a přiřazení přístupu ke spravované identitě

V tomto kurzu použijeme spravovanou identitu k ověření ve službě Key Vault. Spravovaná identita automaticky spravuje přihlašovací údaje aplikace.

Pokud chcete v Azure CLI vytvořit identitu pro aplikaci, spusťte příkaz az webapp-identity assign :

az webapp identity assign --name "<your-webapp-name>" --resource-group "myResourceGroup"

Příkaz vrátí tento fragment kódu JSON:

{
  "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "type": "SystemAssigned"
}

Pokud chcete aplikaci udělit oprávnění k trezoru klíčů prostřednictvím řízení přístupu na základě role (RBAC), přiřaďte roli pomocí příkazu Azure CLI 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>"

Nahraďte <app-id>hodnoty <resource-group-name> <subscription-id>a <your-unique-keyvault-name> skutečnými hodnotami. <app-id> je ID aplikace (klienta) vaší registrované aplikace v Microsoft Entra.

Úprava aplikace pro přístup k trezoru klíčů

V tomto kurzu použijete pro demonstrační účely tajnou klientskou knihovnu služby Azure Key Vault. Můžete také použít klientskou knihovnu certifikátů služby Azure Key Vault nebo klientskou knihovnu klíčů služby Azure Key Vault.

Instalace balíčků

V okně terminálu nainstalujte tajnou klientskou knihovnu služby Azure Key Vault pro balíčky klientských knihoven .NET a Azure Identity:

dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets

Aktualizace kódu

Vyhledejte a otevřete soubor Startup.cs pro .NET 5.0 nebo starší nebo Program.cs soubor pro .NET 6.0 v projektu akvwebapp.

Přidejte do záhlaví tyto řádky:

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;

Před volání (.NET 5.0 nebo starší) nebo app.MapGet volání (.NET 6.0) přidejte následující řádky app.UseEndpoints a aktualizujte identifikátor URI tak, aby odrážel vaultUri váš trezor klíčů. Tento kód používá k ověření ve službě Key Vault defaultAzureCredential(), která k ověření používá token ze spravované identity. Další informace o ověřování ve službě Key Vault najdete v příručce pro vývojáře. Kód také používá exponenciální zpochybnění pro opakování v případě, že dojde k omezování služby Key Vault. Další informace o limitech transakcí služby Key Vault najdete v doprovodných materiálech k omezování služby 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 nebo starší

Aktualizujte řádek await context.Response.WriteAsync("Hello World!"); tak, aby vypadal takto:

await context.Response.WriteAsync(secretValue);
.NET 6.0

Aktualizujte řádek app.MapGet("/", () => "Hello World!"); tak, aby vypadal takto:

app.MapGet("/", () => secretValue);

Než budete pokračovat dalším krokem, nezapomeňte změny uložit.

Opětovné nasazení webové aplikace

Teď, když jste aktualizovali kód, můžete ho znovu nasadit do Azure pomocí těchto příkazů Gitu:

git add .
git commit -m "Updated web app to access my key vault"
git push azure main

Přechod na dokončenou webovou aplikaci

http://<your-webapp-name>.azurewebsites.net

Kde předtím, než jste viděli "Hello World!", by se teď měla zobrazit hodnota vašeho tajného kódu.

Další kroky