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

Azure Key Vault poskytuje způsob ukládání přihlašovacích údajů a dalších tajných kódů s vyšším zabezpečením. Váš kód ale musí ověřit, aby se Key Vault načíst. Spravované identity pro prostředky Azure usnadňují řešení tohoto problému tím, že službám Azure poskytne automaticky spravovanou identitu ve službě Azure Active Directory (Azure AD). Tuto identitu můžete použít k ověření pro libovolnou službu, která podporuje ověřování Azure AD, včetně Key Vault, bez nutnosti zobrazovat přihlašovací údaje v kódu.

V tomto kurzu vytvoříte a nasadíte webovou aplikaci Azure pro Azure App Service. Pomocí spravované identity můžete svoji webovou aplikaci Azure ověřit pomocí trezoru klíčů Azure pomocí Azure Key Vault tajné klientské knihovny pro .NET a Azure CLI. Stejné základní principy platí při použití vývojového jazyka dle vašeho výběru, Azure PowerShell a/nebo Azure Portal.

Další informace o webových aplikacích a nasazení služby Azure App Service prezentovaných v tomto kurzu najdete v tématech:

Požadavky

Pro absolvování tohoto kurzu potřebujete:

Pokud již máte webovou aplikaci nasazenou v Azure App Service, můžete přeskočit ke konfiguraci přístupu k webové aplikaci k trezoru klíčů a úpravám částí kódu webové aplikace .

Vytvoření aplikace .NET Core

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

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

mkdir akvwebapp
cd akvwebapp

Vytvořte aplikaci .NET Core pomocí příkazu dotnet New Web :

dotnet new web

Spusťte aplikaci místně, abyste věděli, jak by měla vypadat při nasazení do Azure:

dotnet run

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

Uvidíte zprávu „Hello World!“, Zpráva 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 v ASP.NET Core v Azure App Service

Nasadit aplikaci do Azure

V tomto kroku nasadíte aplikaci .NET Core pro Azure App Service pomocí místního Gitu. Další informace o tom, jak vytvořit a nasadit aplikace, najdete v tématu Vytvoření webové aplikace v ASP.NET Core v Azure.

Konfigurace místního nasazení Git

V okně terminálu vyberte CTRL + C a zavřete tak webový server. Inicializujte úložiště Git pro projekt .NET Core:

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

Pomocí FTP a místního Gitu můžete nasadit webovou aplikaci Azure pomocí uživatele nasazení. Po nakonfigurování uživatele nasazení ho můžete 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 . Vyberte uživatelské jméno a heslo, které dodržuje tyto pokyny:

  • Uživatelské jméno musí být jedinečné v rámci Azure. Pro místní nabízená oznámení Git nesmí obsahovat symbol symbol @ (@).
  • Heslo musí obsahovat alespoň osm znaků a 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 své uživatelské jméno a heslo, abyste ho mohli použít k nasazení svých webových aplikací.

Vytvoření skupiny prostředků

Skupina prostředků je logický kontejner, do kterého nasazujete prostředky Azure a spravujete je. Vytvořte skupinu prostředků, která bude obsahovat váš Trezor klíčů a webovou aplikaci, pomocí příkazu AZ Group Create :

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

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

Pomocí příkazu Azure CLI AZ AppService Plan Create vytvořte plán App Service . Následující příklad vytvoří plán App Service s názvem myAppServicePlan v FREE cenové úrovni:

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

Po vytvoření plánu App Service se v Azure CLI zobrazí podobné informace jako v následujícím příkladu:

{ 
  "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 App Service.

Důležité

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

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 zobrazí 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 potřebovat později.

Teď nakonfigurujte webovou aplikaci tak, aby se nasadila 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řejdete k nové aplikaci. Nahraďte <your-webapp-name> názvem vaší aplikace.

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

Zobrazí se výchozí webová stránka pro novou webovou aplikaci 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> adresu URL vzdáleného úložiště Git, který jste uložili v části Vytvoření webové aplikace .

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

Pomocí následujícího příkazu nahrajte do vzdáleného úložiště Azure a nasaďte svoji aplikaci. Když vám správce přihlašovacích údajů Git 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í Git .

git push azure main

Spuštění tohoto příkazu může trvat několik minut. Při spuštění se zobrazí podobné informace jako v následujícím příkladu:

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 (nebo aktualizujte) nasazené aplikace:

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

Uvidíte zprávu „Hello World!“, zpráva, kterou jste viděli dříve po navštívení http://localhost:5000 .

Další informace o nasazení webové aplikace pomocí Gitu najdete v tématu nasazení do místního úložiště git Azure App Service

Konfigurace webové aplikace pro připojení k Key Vault

V této části nakonfigurujete webový přístup tak, aby Key Vault a aktualizovali kód aplikace pro načtení tajného klíče z Key Vault.

Vytvoření a přiřazení spravované identity

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

V Azure CLI pro vytvoření identity 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 vaší webové aplikaci udělit oprávnění k získání a výpisu operací v trezoru klíčů, předejte principalId do Azure CLI příkaz AZ Key trezor set-Policy :

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

Zásady přístupu můžete také přiřadit pomocí Azure Portal nebo PowerShellu.

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

V tomto kurzu použijete pro demonstrační účely knihovnu klienta Azure Key Vault tajných klíčů . Můžete také použít Azure Key Vault klientské knihovny certifikátůnebo Azure Key Vault klíčovou knihovnu klienta.

Nainstalovat balíčky

V okně terminálu nainstalujte pro balíčky klientské knihovny .NET a Azure identity klienta Azure Key Vault tajnou klíčovou knihovnu:

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

Aktualizace kódu

Vyhledejte a otevřete soubor Startup. cs v projektu akvwebapp.

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

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

Přidejte následující řádky před app.UseEndpoints voláním, aktualizujte identifikátor URI tak, aby odrážely vaultUri váš Trezor klíčů. Tento kód používá DefaultAzureCredential () k ověření pro Key Vault, které používá token ze spravované identity k ověření. Další informace o ověřování pro Key Vault najdete v příručce pro vývojáře. Kód také používá exponenciální omezení rychlosti pro opakování v případě omezení Key Vault. Další informace o Key Vault omezeních transakcí najdete v tématu pokyny k omezování 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;

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

await context.Response.WriteAsync(secretValue);

Než budete pokračovat k dalšímu kroku, 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ů git:

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

Přejít na dokončenou webovou aplikaci

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

Místo, kde jste si viděli "Hello World!", by se teď měla zobrazit hodnota zobrazeného tajného kódu.

Další kroky