Oktatóanyag: A Key Vault és egy Azure-webalkalmazás összekapcsolása felügyelt identitással a .NET-ben

Az Azure Key Vault lehetővé teszi a hitelesítő adatok és egyéb titkos kulcsok fokozott biztonságú tárolását. A kódnak azonban hitelesítenie kell a Key Vaultban a lekérésükhöz. Az Azure-erőforrások felügyelt identitásai segítenek megoldani ezt a problémát azáltal, hogy automatikusan felügyelt identitást adnak az Azure-szolgáltatásoknak a Microsoft Entra-azonosítóban. Ezzel az identitással hitelesítést végezhet bármely olyan szolgáltatásban, amely támogatja a Microsoft Entra-hitelesítést, beleértve a Key Vaultot is, anélkül, hogy hitelesítő adatokat kellene megjelenítenie a kódban.

Ebben az oktatóanyagban Azure-webalkalmazást fog létrehozni és üzembe helyezni Azure-alkalmazás Szolgáltatásban. Felügyelt identitással hitelesítheti azure-webalkalmazását egy Azure Key Vaulttal az Azure Key Vault titkos ügyfélkódtárával a .NET-hez és az Azure CLI-hez. Ugyanezek az alapelvek érvényesek, ha a választott fejlesztési nyelvet, az Azure PowerShellt és/vagy az Azure Portalt használja.

Az oktatóanyagban bemutatott Azure-alkalmazás szolgáltatás webalkalmazásaival és üzembe helyezésével kapcsolatos további információkért lásd:

Előfeltételek

Az oktatóanyag elvégzéséhez a következőkre lesz szüksége:

Ha már üzembe helyezte a webalkalmazást a Azure-alkalmazás Szolgáltatásban, kihagyhatja a webalkalmazás hozzáférésének konfigurálását egy kulcstartóhoz, és módosíthatja a webalkalmazás kódszakaszait.

.NET Core-alkalmazás létrehozása

Ebben a lépésben beállítja a helyi .NET Core-projektet.

A gép terminálablakában hozzon létre egy névvel ellátott akvwebapp könyvtárat, és állítsa az aktuális könyvtárba:

mkdir akvwebapp
cd akvwebapp

Hozzon létre egy .NET Core-alkalmazást az új dotnet webparancs használatával:

dotnet new web

Futtassa az alkalmazást helyileg, hogy tudja, hogyan kell kinéznie, amikor üzembe helyezi az Azure-ban:

dotnet run

Egy webböngészőben nyissa meg az alkalmazást a következő címen http://localhost:5000: .

A lapon megjelenő mintaalkalmazás ""Helló világ!" alkalmazás!" üzenete jelenik meg.

További információ az Azure-beli webalkalmazások létrehozásáról: ASP.NET Core-webalkalmazás létrehozása Azure-alkalmazás Szolgáltatásban

Az alkalmazás üzembe helyezése az Azure-ban

Ebben a lépésben a .NET Core-alkalmazást a helyi Git használatával fogja üzembe helyezni Azure-alkalmazás Szolgáltatásban. További információ az alkalmazások létrehozásáról és üzembe helyezéséről: ASP.NET Core-webalkalmazás létrehozása az Azure-ban.

A helyi Git-telepítés konfigurálása

A terminálablakban válassza a Ctrl+C billentyűkombinációt a webkiszolgáló bezárásához. Git-adattár inicializálása a .NET Core-projekthez:

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

Az FTP és a helyi Git használatával üzembe helyezhet egy Azure-webalkalmazást egy üzembehelyezési felhasználó használatával. Miután konfigurálta az üzembehelyezési felhasználót, az összes Azure-beli üzembe helyezéshez használhatja. A fiókszintű üzembehelyezési felhasználóneve és jelszava eltér az Azure-előfizetés hitelesítő adataitól.

Az üzembehelyezési felhasználó konfigurálásához futtassa az az webapp deployment user set parancsot. Válasszon egy felhasználónevet és jelszót, amely megfelel az alábbi irányelveknek:

  • A felhasználónévnek egyedinek kell lennie az Azure-on belül. Helyi Git-leküldések esetén nem tudja tartalmazni az at sign szimbólumot (@).
  • A jelszónak legalább nyolc karakter hosszúnak kell lennie, és a következő három elemből kettőnek kell lennie: betűk, számok és szimbólumok.
az webapp deployment user set --user-name "<username>" --password "<password>"

A JSON-kimenet a jelszót a következőként nulljeleníti meg: . Ha hibaüzenetet 'Conflict'. Details: 409 kap, módosítsa a felhasználónevet. 'Bad Request'. Details: 400 hibaüzenet esetén használjon erősebb jelszót.

Jegyezze fel a felhasználónevet és a jelszót, hogy ezzel üzembe helyezhesse a webalkalmazásokat.

Erőforráscsoport létrehozása

Az erőforráscsoport egy logikai tároló, amelyben üzembe helyezheti és kezelheti az Azure-erőforrásokat. Hozzon létre egy erőforráscsoportot, amely tartalmazza a kulcstartót és a webalkalmazást is az az group create paranccsal:

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

App Service-csomag létrehozása

App Service-csomag létrehozása az Azure CLI az appservice plan create paranccsal. Az alábbi példa létrehoz egy App Service-csomagot myAppServicePlan a FREE tarifacsomagban:

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

Az App Service-csomag létrehozásakor az Azure CLI az itt láthatóhoz hasonló információkat jelenít meg:

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

További információ: App Service-csomag kezelése az Azure-ban.

Webalkalmazás létrehozása

Azure-webalkalmazás létrehozása az myAppServicePlan App Service-csomagban.

Fontos

A kulcstartókhoz hasonlóan az Azure-webalkalmazásoknak is egyedi névvel kell rendelkezniük. Cserélje le <your-webapp-name> a webalkalmazás nevét az alábbi példákban.

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

A webalkalmazás létrehozásakor az Azure CLI az itt láthatóhoz hasonló kimenetet jelenít meg:

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

A Git remote URL-címe megjelenik a deploymentLocalGitUrl tulajdonságban, formátumban https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git. Mentse ezt az URL-címet. Erre később még szüksége lesz.

Most konfigurálja a webalkalmazást az ágból való main üzembe helyezésre:

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

Nyissa meg az új alkalmazást az alábbi paranccsal. Cserélje le <your-webapp-name> az alkalmazás nevét.

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

Megjelenik egy új Azure-webalkalmazás alapértelmezett weblapja.

A helyi alkalmazás üzembe helyezése

A helyi terminálablakba visszatérve adjon hozzá egy távoli Azure-mappát a helyi Git-adattárhoz. Az alábbi parancsban cserélje le <deploymentLocalGitUrl-from-create-step> a Webalkalmazás létrehozása szakaszban mentett Git-távoli url-címét.

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

Az alábbi paranccsal leküldheti a távoli Azure-ba az alkalmazás üzembe helyezéséhez. Amikor a Git Credential Manager hitelesítő adatokat kér, használja a helyi Git üzembehelyezési szakaszában létrehozott hitelesítő adatokat.

git push azure main

A parancs futtatása eltarthat néhány percig. Amíg fut, az itt láthatóhoz hasonló információkat jelenít meg:

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

Nyissa meg (vagy frissítse) az üzembe helyezett alkalmazást a webböngésző használatával:

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

Ekkor megjelenik a ""Helló világ!" alkalmazás!" üzenet, amelyet korábban a látogatása http://localhost:5000során látott.

További információ a webalkalmazás Git használatával történő üzembe helyezéséről: Helyi Git-üzembe helyezés Azure-alkalmazás szolgáltatásban

A webalkalmazás konfigurálása a Key Vaulthoz való csatlakozáshoz

Ebben a szakaszban konfigurálja a Key Vault webes hozzáférését, és frissíti az alkalmazás kódját, hogy lekérjen egy titkos kulcsot a Key Vaultból.

Felügyelt identitás létrehozása és hozzárendelése

Ebben az oktatóanyagban felügyelt identitást használunk a Key Vaultban való hitelesítéshez. A felügyelt identitás automatikusan kezeli az alkalmazás hitelesítő adatait.

Az Azure CLI-ben az alkalmazás identitásának létrehozásához futtassa az az webapp-identity assign parancsot:

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

A parancs a következő JSON-kódrészletet adja vissza:

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

Ha engedélyt szeretne adni a webalkalmazásnak a kulcstartón végzett műveletek lekérésére és listázására , adja át az principalId Azure CLI az keyvault set-policy parancsot:

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

Hozzáférési szabályzatokat az Azure Portalon vagy a PowerShellben is hozzárendelhet.

Az alkalmazás módosítása a kulcstartó eléréséhez

Ebben az oktatóanyagban az Azure Key Vault titkos ügyfélkódtárát fogja használni bemutató célokra. Használhatja az Azure Key Vault tanúsítvány ügyfélkódtárát vagy az Azure Key Vault kulcs ügyfélkódtárát is.

A csomagok telepítése

A terminálablakból telepítse az Azure Key Vault titkos ügyfélkódtárát .NET- és Azure Identity-ügyfélkódtár-csomagokhoz:

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

A kód frissítése

Keresse meg és nyissa meg a .NET 5.0-s vagy korábbi verziójához készült Startup.cs fájlt, vagy a .NET 6.0 program.cs fájlját az akvwebapp projektben.

Adja hozzá ezeket a sorokat a fejléchez:

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

Adja hozzá a következő sorokat a app.UseEndpoints hívás (.NET 5.0 vagy korábbi) vagy app.MapGet a hívás (.NET 6.0) előtt, és frissítse az URI-t a vaultUri kulcstartónak megfelelően. Ez a kód DefaultAzureCredential() használatával hitelesíti a Key Vaultot, amely egy felügyelt identitásból származó tokent használ a hitelesítéshez. A Key Vaultba való hitelesítésről további információt a fejlesztői útmutatóban talál. A kód exponenciális visszalépést is használ az újrapróbálkozáshoz, ha a Key Vault szabályozása folyamatban van. A Key Vault tranzakciós korlátaival kapcsolatos további információkért tekintse meg az Azure Key Vault szabályozási útmutatóját.

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 vagy korábbi

Frissítse a sort await context.Response.WriteAsync("Hello World!"); úgy, hogy az így nézzen ki:

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

Frissítse a sort app.MapGet("/", () => "Hello World!"); úgy, hogy az így nézzen ki:

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

A következő lépés folytatása előtt mindenképpen mentse a módosításokat.

A webalkalmazás újbóli üzembe helyezése

Most, hogy frissítette a kódot, újból üzembe helyezheti az Azure-ban az alábbi Git-parancsokkal:

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

Ugrás a kész webalkalmazásra

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

Ahol a ""Helló világ!" alkalmazás!" szöveg előtt meg kell jelennie a titkos kód értékének.

Következő lépések