Öğretici: Key Vault'u .NET'teki bir Azure web uygulamasına bağlamak için yönetilen kimlik kullanma
Azure Key Vault , kimlik bilgilerini ve diğer gizli dizileri daha fazla güvenlikle depolamak için bir yol sağlar. Ancak kodunuzun bunları almak için Key Vault'ta kimlik doğrulaması yapması gerekir. Azure kaynakları için yönetilen kimlikler, Azure hizmetlerine Microsoft Entra Id'de otomatik olarak yönetilen bir kimlik vererek bu sorunu çözmeye yardımcı olur. Kodunuzda kimlik bilgilerini görüntülemek zorunda kalmadan Key Vault dahil olmak üzere Microsoft Entra kimlik doğrulamasını destekleyen herhangi bir hizmette kimlik doğrulaması yapmak için bu kimliği kullanabilirsiniz.
Bu öğreticide Azure web uygulaması oluşturacak ve Azure Uygulaması Hizmeti'ne dağıtacaksınız. .NET ve Azure CLI için Azure Key Vault gizli istemci kitaplığını kullanarak Azure anahtar kasasıyla Azure web uygulamanızın kimliğini doğrulamak için yönetilen kimlik kullanacaksınız. İstediğiniz geliştirme dilini, Azure PowerShell'i ve/veya Azure portalını kullandığınızda da aynı temel ilkeler geçerlidir.
Bu öğreticide sunulan Azure Uygulaması hizmet web uygulamaları ve dağıtımı hakkında daha fazla bilgi için bkz:
- App Service’e genel bakış
- Azure Uygulaması Hizmetinde ASP.NET Core web uygulaması oluşturma
- Azure Uygulaması Hizmetine yerel Git dağıtımı
Önkoşullar
Bu öğreticiyi tamamlamak için aşağıdakiler gerekir:
- Azure aboneliği. Ücretsiz bir tane oluşturun.
- .NET Core 3.1 SDK 'sı (veya üstü).
- 2.28.0 veya üzeri bir Git yüklemesi.
- Azure CLI veya Azure PowerShell.
- Azure Key Vault. Azure portalını, Azure CLI'yı veya Azure PowerShell'i kullanarak anahtar kasası oluşturabilirsiniz.
- Key Vault gizli dizisi. Azure portalını, PowerShell'i veya Azure CLI'yı kullanarak gizli dizi oluşturabilirsiniz.
Web uygulamanızı Azure Uygulaması Hizmeti'nde zaten dağıttıysanız, bir anahtar kasasına web uygulaması erişimini yapılandırmayı atlayabilir ve web uygulaması kodu bölümlerini değiştirebilirsiniz.
.NET Core uygulaması oluşturma
Bu adımda yerel .NET Core projesini ayarlayacaksınız.
Makinenizdeki bir terminal penceresinde adlı akvwebapp
bir dizin oluşturun ve bunu geçerli dizin yapın:
mkdir akvwebapp
cd akvwebapp
dotnet new web komutunu kullanarak bir .NET Core uygulaması oluşturun:
dotnet new web
Uygulamayı Azure'a dağıtırken nasıl görünmesi gerektiğini öğrenmek için yerel olarak çalıştırın:
dotnet run
Web tarayıcısında konumundaki http://localhost:5000
uygulamaya gidin.
Sayfada görüntülenen örnek uygulamadan "Merhaba Dünya!" iletisini görürsünüz.
Azure için web uygulamaları oluşturma hakkında daha fazla bilgi için bkz. Azure Uygulaması Hizmetinde ASP.NET Core web uygulaması oluşturma
Uygulamayı Azure’da dağıtma
Bu adımda yerel Git kullanarak .NET Core uygulamanızı Azure Uygulaması Hizmetine dağıtacaksınız. Uygulama oluşturma ve dağıtma hakkında daha fazla bilgi için bkz . Azure'da ASP.NET Core web uygulaması oluşturma.
Yerel Git dağıtımını yapılandırma
Web sunucusunu kapatmak için terminal penceresinde Ctrl+C tuşlarına basın. .NET Core projesi için bir Git deposu başlatın:
git init --initial-branch=main
git add .
git commit -m "first commit"
Dağıtım kullanıcısını kullanarak Azure web uygulaması dağıtmak için FTP ve yerel Git kullanabilirsiniz. Dağıtım kullanıcınızı yapılandırdıktan sonra, bunu tüm Azure dağıtımlarınız için kullanabilirsiniz. Hesap düzeyinde dağıtım kullanıcı adınız ve parolanız Azure aboneliği kimlik bilgilerinizden farklıdır.
Dağıtım kullanıcısını yapılandırmak için az webapp deployment user set komutunu çalıştırın. Bu yönergelere uygun bir kullanıcı adı ve parola seçin:
- Kullanıcı adı Azure içinde benzersiz olmalıdır. Yerel Git gönderimleri için at işareti simgesini (@) içeremez.
- Parola en az sekiz karakter uzunluğunda olmalı ve şu üç öğeden ikisini içermelidir: harfler, sayılar ve simgeler.
az webapp deployment user set --user-name "<username>" --password "<password>"
JSON çıktısı parolayı olarak null
gösterir. Hata 'Conflict'. Details: 409
alırsanız kullanıcı adını değiştirin. 'Bad Request'. Details: 400
hatası alırsanız daha güçlü bir parola kullanın.
Web uygulamalarınızı dağıtmak için kullanabilmeniz için kullanıcı adınızı ve parolanızı kaydedin.
Kaynak grubu oluşturma
Kaynak grubu, Azure kaynaklarını dağıtıp yönettiğiniz mantıksal bir kapsayıcıdır. az group create komutunu kullanarak hem anahtar kasanızı hem de web uygulamanızı içerecek bir kaynak grubu oluşturun :
az group create --name "myResourceGroup" -l "EastUS"
App Service planı oluşturma
Azure CLI az appservice plan create komutunu kullanarak bir App Service planı oluşturun. Aşağıdaki örnek, fiyatlandırma katmanında FREE
adlı myAppServicePlan
bir App Service planı oluşturur:
az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE
App Service planı oluşturulduğunda, Azure CLI burada gördüğünüze benzer bilgiler görüntüler:
{ "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 }
Daha fazla bilgi için bkz. Azure'da App Service planı yönetme.
Web uygulaması oluşturma
App Service planında myAppServicePlan
bir Azure web uygulaması oluşturun.
Önemli
Anahtar kasası gibi Azure web uygulamasının da benzersiz bir adı olmalıdır. değerini aşağıdaki örneklerde web uygulamanızın adıyla değiştirin <your-webapp-name>
.
az webapp create --resource-group "myResourceGroup" --plan "myAppServicePlan" --name "<your-webapp-name>" --deployment-local-git
Web uygulaması oluşturulduğunda, Azure CLI burada gördüğünüze benzer bir çıktı gösterir:
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. > }
Git uzak öğesinin URL'si özelliğinde deploymentLocalGitUrl
biçiminde https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git
gösterilir. Bu URL'yi kaydedin. Buna daha sonra ihtiyacınız olacak.
Şimdi web uygulamanızı daldan main
dağıtılacak şekilde yapılandırın:
az webapp config appsettings set -g MyResourceGroup --name "<your-webapp-name>" --settings deployment_branch=main
Aşağıdaki komutu kullanarak yeni uygulamanıza gidin. değerini uygulama adınız ile değiştirin <your-webapp-name>
.
https://<your-webapp-name>.azurewebsites.net
Yeni bir Azure web uygulaması için varsayılan web sayfasını görürsünüz.
Yerel uygulamanızı dağıtma
Yerel terminal penceresine dönüp yerel Git deponuza bir Azure uzak deposu ekleyin. Aşağıdaki komutta değerini, Web uygulaması oluşturma bölümünde kaydettiğiniz Git uzak öğesinin URL'si ile değiştirin<deploymentLocalGitUrl-from-create-step>
.
git remote add azure <deploymentLocalGitUrl-from-create-step>
Uygulamanızı dağıtmak üzere Azure uzak sunucusuna göndermek için aşağıdaki komutu kullanın. Git Kimlik Bilgileri Yöneticisi sizden kimlik bilgilerini istendiğinde, Yerel Git dağıtımını yapılandırma bölümünde oluşturduğunuz kimlik bilgilerini kullanın.
git push azure main
Bu komutun çalıştırılması birkaç dakika sürebilir. Çalışırken, burada gördüğünüze benzer bilgiler görüntüler:
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
Web tarayıcınızı kullanarak dağıtılan uygulamaya gidin (veya yenileyin):
http://<your-webapp-name>.azurewebsites.net
daha önce ziyaret http://localhost:5000
ettiğinizde gördüğünüz "Merhaba Dünya!" iletisini görürsünüz.
Git kullanarak web uygulaması dağıtma hakkında daha fazla bilgi için bkz. Azure Uygulaması Hizmetine Yerel Git dağıtımı
Web uygulamasını Key Vault'a bağlanacak şekilde yapılandırma
Bu bölümde Key Vault'a web erişimini yapılandıracak ve uygulama kodunuzu Key Vault'tan gizli dizi alacak şekilde güncelleştireceksiniz.
Yönetilen kimlik oluşturma ve bu kimliğe erişim atama
Bu öğreticide, Key Vault'ta kimlik doğrulaması yapmak için yönetilen kimliği kullanacağız. Yönetilen kimlik, uygulama kimlik bilgilerini otomatik olarak yönetir.
Azure CLI'da uygulamanın kimliğini oluşturmak için az webapp-identity assign komutunu çalıştırın:
az webapp identity assign --name "<your-webapp-name>" --resource-group "myResourceGroup"
Komut şu JSON parçacığını döndürür:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
Rol Tabanlı Erişim Denetimi (RBAC) aracılığıyla uygulamanıza anahtar kasanıza izin vermek için az role assignment create Azure CLI komutunu kullanarak bir rol atayın.
az role assignment create --role "Key Vault Secrets User" --assignee "<app-id>" --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<your-unique-keyvault-name>"
, <subscription-id>
ve <resource-group-name>
<your-unique-keyvault-name>
değerlerini gerçek değerlerinizle değiştirin<app-id>
. <app-id>
, Microsoft Entra'da kayıtlı uygulamanızın Uygulama (istemci) kimliğidir.
Uygulamayı anahtar kasanıza erişecek şekilde değiştirme
Bu öğreticide, tanıtım amacıyla Azure Key Vault gizli istemci kitaplığını kullanacaksınız. Azure Key Vault sertifika istemci kitaplığını veya Azure Key Vault anahtar istemci kitaplığını da kullanabilirsiniz.
Paketleri yükleme
Terminal penceresinden .NET ve Azure Identity istemci kitaplığı paketleri için Azure Key Vault gizli istemci kitaplığını yükleyin:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
Kodu güncelleştirme
akvwebapp projenizde .NET 5.0 veya önceki sürümleri için Startup.cs dosyasını veya .NET 6.0 için Program.cs dosyasını bulun ve açın.
Üst bilgisine şu satırları ekleyin:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
Çağrıdan (.NET 5.0 veya öncesi) veya app.MapGet
çağrısından (.NET 6.0) önce app.UseEndpoints
aşağıdaki satırları ekleyin ve URI'yi anahtar kasanızı yansıtacak şekilde vaultUri
güncelleştirin. Bu kod , Key Vault'ta kimlik doğrulaması yapmak için DefaultAzureCredential() kullanır ve kimlik doğrulaması için yönetilen kimlikten bir belirteç kullanır. Key Vault'ta kimlik doğrulaması hakkında daha fazla bilgi için bkz . Geliştirici Kılavuzu. Kod ayrıca Key Vault'un kısıtlanma olasılığına karşı yeniden denemeler için üstel geri alma kullanır. Key Vault işlem sınırları hakkında daha fazla bilgi için bkz . Azure Key Vault azaltma kılavuzu.
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 veya öncesi
Satırı şu şekilde await context.Response.WriteAsync("Hello World!");
görünecek şekilde güncelleştirin:
await context.Response.WriteAsync(secretValue);
.NET 6.0
Satırı şu şekilde app.MapGet("/", () => "Hello World!");
görünecek şekilde güncelleştirin:
app.MapGet("/", () => secretValue);
Sonraki adıma geçmeden önce değişikliklerinizi kaydettiğinizden emin olun.
Web uygulamanızı yeniden dağıtma
Kodunuzu güncelleştirdiğinize göre, şu Git komutlarını kullanarak kodu Azure'a yeniden dağıtabilirsiniz:
git add .
git commit -m "Updated web app to access my key vault"
git push azure main
Tamamlanmış web uygulamanıza gidin
http://<your-webapp-name>.azurewebsites.net
"Merhaba Dünya!" ifadesini görmeden önce gizli dizinizin değerinin görüntülendiğini görmeniz gerekir.
Sonraki adımlar
- .NET'te bir sanal makineye dağıtılan uygulamalarla Azure Key Vault kullanma
- Azure kaynakları için yönetilen kimlikler hakkında daha fazla bilgi edinin
- Geliştirici Kılavuzu'nu görüntüleme
- Anahtar kasasına güvenli erişim