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:
- Přehled služby App Service
- Vytvoření webové aplikace v ASP.NET Core v Azure App Service
- Místní nasazení Gitu pro Azure App 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 novější.
- Rozhraní příkazového řádku Azure nebo Azure PowerShell.
- Azure Key Vault. Trezor klíčů můžete vytvořit pomocí Azure Portal, rozhraní příkazového řádku Azurenebo Azure PowerShell.
- Key Vault tajný klíč. Tajný klíč můžete vytvořit pomocí Azure Portal, PowerShellunebo rozhraní příkazového řádku Azure CLI.
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.