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:
- App Service overview
- ASP.NET Core-webalkalmazás létrehozása a Azure-alkalmazás Service-ben
- Helyi Git-üzembe helyezés a Azure-alkalmazás szolgáltatásban
Előfeltételek
Az oktatóanyag elvégzéséhez a következőkre lesz szüksége:
- Azure-előfizetés. Hozzon létre egyet ingyen.
- A .NET Core 3.1 SDK (vagy újabb).
- A 2.28.0-s vagy újabb verzióJú Git-telepítés .
- Az Azure CLI vagy az Azure PowerShell.
- Azure Key Vault. Kulcstartót az Azure Portal, az Azure CLI vagy az Azure PowerShell használatával hozhat létre.
- Egy Key Vault-titkos kulcs. Titkos kulcsokat az Azure Portal, a PowerShell vagy az Azure CLI használatával hozhat létre.
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 null
jelení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:5000
sorá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.