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:
- Přehled služby App Service
- Vytvoření webové aplikace ASP.NET Core ve službě Aplikace Azure Service
- Místní nasazení Gitu do služby Aplikace Azure Service
Požadavky
Pro absolvování tohoto kurzu potřebujete:
- Předplatné Azure. Vytvořte si ho zdarma.
- Sada .NET Core 3.1 SDK (nebo novější)
- Instalace Gitu verze 2.28.0 nebo vyšší.
- Azure CLI nebo Azure PowerShell.
- Azure Key Vault. Trezor klíčů můžete vytvořit pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu.
- Tajný klíč služby Key Vault. Tajný klíč můžete vytvořit pomocí webu Azure Portal, PowerShellu nebo Azure CLI.
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.