Oktatóanyag: Felügyelt identitás használata Key Vault azure-webalkalmazáshoz való csatlakoztatásához 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 magát, hogy Key Vault lekérje őket. 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 biztosítanak az Azure-szolgáltatásoknak a Azure Active Directory (Azure AD) szolgáltatásban. Ezzel az identitással hitelesítést végezhet bármely olyan szolgáltatásban, amely támogatja az Azure AD-hitelesítést, beleértve a Key Vault 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 App Service. Felügyelt identitással hitelesítheti azure-webalkalmazását egy Azure-kulcstartóval az Azure Key Vault .NET-hez és az Azure CLI-hez készült titkos ügyfélkódtár használatával. Ugyanezek az alapelvek érvényesek a választott fejlesztési nyelv, a Azure PowerShell és/vagy a Azure Portal használatakor is.

Az oktatóanyagban bemutatott Azure-alkalmazás szolgáltatás-webalkalmazásokkal és üzembe helyezéssel 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 telepítette a webalkalmazást a Azure App Service, átugorhatja a webalkalmazás kulcstartóhoz való hozzáférésének konfigurálását, é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 könyvtárat, akvwebapp és állítsa be az aktuális könyvtárba:

mkdir akvwebapp
cd akvwebapp

Hozzon létre egy .NET Core-alkalmazást a dotnet új webes parancsá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: .

Az oldalon megjelenik a ""Helló világ!" alkalmazás!" üzenet a mintaalkalmazásból.

További információ az Azure-beli webalkalmazások létrehozásáról: ASP.NET Core-webalkalmazás létrehozása Azure App Service

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

Ebben a lépésben a helyi Git használatával fogja üzembe helyezni a .NET Core-alkalmazást Azure App Service. Az alkalmazások létrehozásával és üzembe helyezésével kapcsolatos további információkért lásd: ASP.NET Core-webalkalmazás létrehozása az Azure-ban.

A git helyi üzembe helyezésének konfigurálása

A terminálablakban a Ctrl+C billentyűkombinációval zárja be a webkiszolgálót. 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 üzembe helyezési felhasználóval. Miután konfigurálta az üzembe helyezési felhasználót, használhatja az összes Azure-beli üzemelő példányhoz. A fiókszintű üzembe helyezés felhasználóneve és jelszava eltér az Azure-előfizetés hitelesítő adataitól.

Az üzembe helyezési felhasználó konfigurálásához futtassa az az webapp deployment user set parancsot. Válasszon olyan 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 tartalmazhatja az at jel (@) szimbólumot.
  • A jelszónak legalább nyolc karakter hosszúságúnak kell lennie, és tartalmaznia kell a következő három elem közül kettőt: betűket, számokat és szimbólumokat.
az webapp deployment user set --user-name "<username>" --password "<password>"

A JSON-kimenet a jelszót a következőképpen 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ónevét és a jelszavát, hogy felhasználhassa a webalkalmazások üzembe helyezéséhez.

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

Hozzon létre egy App Service-csomagot az Azure CLI az appservice plan create parancsával. Az alábbi példa egy App Service csomagot myAppServicePlan hoz létre a FREE tarifacsomagban:

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

A 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 a 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ére 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 távoli Git URL-címe megjelenik a deploymentLocalGitUrl tulajdonságban, a következő 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 történő 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ére.

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. A következő parancsban cserélje le <deploymentLocalGitUrl-from-create-step> a webalkalmazás létrehozása szakaszban mentett Távoli Git URL-címére.

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

Az alkalmazás üzembe helyezéséhez használja a következő parancsot a távoli Azure-ba való leküldéshez. Amikor a Git Hitelesítőadat-kezelő hitelesítő adatokat kér, használja a Helyi Git-telepítés konfigurálása szakaszban létrehozott hitelesítő adatokat.

git push azure main

A parancs futtatása eltarthat néhány percig. A futtatás közben 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ővel:

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 a Azure App Service

A webalkalmazás konfigurálása a Key Vault

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

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

Ebben az oktatóanyagban felügyelt identitással fogunk hitelesítést végezni Key Vault. 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 key vaulton végzett műveletek lekérésére és listázására , adja át az principalId Azure CLI az keyvault set-policy parancsának:

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

Hozzáférési szabályzatokat a Azure Portal vagy a PowerShell használatával 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árat 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árat is.

A csomagok telepítése

A terminálablakból telepítse az Azure Key Vault titkos ügyfélkódtárat .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 Startup.cs fájlt az akvwebapp projektben.

Adja hozzá a következő 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 előtt, és frissítse az URI-t úgy, hogy az tükrözze a vaultUri kulcstartót. Ez a kód DefaultAzureCredential() használatával hitelesíti magát a Key Vault, amely a felügyelt identitásból származó jogkivonatot használja a hitelesítéshez. A Key Vault hitelesítésével kapcsolatos további információkért tekintse meg a fejlesztői útmutatót. A kód exponenciális visszatartást is használ az újrapróbálkozásokhoz, ha Key Vault szabályozva van. A Key Vault tranzakciós korlátokkal kapcsolatos további információkért lásd 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;

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

await context.Response.WriteAsync(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