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 kódok fokozott biztonságú tárolását. A kódnak azonban hitelesítést kell végeznie ahhoz, hogy Key Vault lekérhesse ő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 adnak az Azure-szolgáltatásoknak az Azure Active Directoryban (Azure AD). Ezzel az identitással hitelesítést végezhet bármely olyan szolgáltatásban, amely támogatja a 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 a Azure App Service. Felügyelt identitással hitelesítheti azure-webalkalmazását egy Azure-kulcstartóval az Azure Key Vault titkos ügyfélkódtárral a .NET-hez és az Azure CLI-hez. Ugyanezek az alapelvek érvényesek, ha a választott fejlesztési nyelvet, Azure PowerShell és/vagy a Azure Portal 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:
- Az App Service áttekintése
- ASP.NET Core-webalkalmazás létrehozása Azure App Service
- Helyi Git-üzembe helyezés a Azure App Service
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 Azure PowerShell.
- Azure Key Vault. Kulcstartót az Azure Portal, az Azure CLI-vel vagy Azure PowerShell hozhat létre.
- Egy Key Vault titok. 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 Azure App Service, kihagyhatja 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 nevű akvwebapp
könyvtárat, és hozza létre az aktuális könyvtárat:
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 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 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. 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, használhatja az összes Azure-beli üzembe helyezéshez. A fiókszintű üzembe helyezés 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 ki 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. A helyi Git-leküldések esetében nem tudja tartalmazni az at jelszimbólumot (@).
- A jelszónak legalább nyolc karakter hosszúnak kell lennie, és a következő három elem közü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 jeleníti meg: null
. 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 a használatával ü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
Hozzon létre egy App Service csomagot az Azure CLI az appservice plan create paranccsal. Az alábbi példa létrehoz egy nevű App Service csomagot myAppServicePlan
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
Hozzon létre egy Azure-webalkalmazást 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 elemet 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 Git-távoli URL-címe megjelenik a deploymentLocalGitUrl
tulajdonságban, a 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>
a elemet 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 a elemet <deploymentLocalGitUrl-from-create-step>
a Webalkalmazás létrehozása szakaszban mentett Git-távoli 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 az Azure-távoli leküldéshez. Amikor a Git Credential Manager 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. Miközben 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 felkeresésekor látotthttp://localhost:5000
.
A webalkalmazás Git használatával történő üzembe helyezésével kapcsolatos további információkért lásd: Helyi Git üzembe helyezés a Azure App Service
A webalkalmazás konfigurálása Key Vault
Ebben a szakaszban konfigurálja a webes hozzáférést a Key Vault és frissíti az alkalmazáskódot, hogy lekérjen egy titkos kulcsot Key Vault.
Felügyelt identitás létrehozása és hozzárendelése
Ebben az oktatóanyagban felügyelt identitással hitelesítjük a 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 kulcstartón végzett műveletek lekérésére és listázására , adja át a principalId
parancsot az Azure CLI az keyvault set-policy parancsnak:
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él-kódtárat vagy az Azure Key Vault kulcsfontosságú ü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 .NET 5.0-s vagy korábbi verziójához tartozó 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, hogy tükrözze a vaultUri
kulcstartót. Ez a kód a DefaultAzureCredential() függvényt használja a Key Vault hitelesítéséhez, amely a felügyelt identitás jogkivonatát 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 visszalépést is használ az újrapróbálkozásokhoz, ha Key Vault szabályozva van. A Key Vault tranzakciós korlátokról további információt az Azure Key Vault szabályozási útmutatóban talál.
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 verzió
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);
Mielőtt továbblép a következő lépésre, 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 megjelenik a titkos kód értéke.