Öğ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:

Ön koşullar

Bu öğreticiyi tamamlamak için aşağıdakiler gerekir:

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:5000uygulamaya 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 nullgö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>.gitgö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:5000ettiğ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 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"
}

Web uygulamanıza anahtar kasanızda alma ve listeleme işlemleri yapma izni vermek için azure CLI az keyvault set-policy komutuna geçirinprincipalId:

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

Azure portalını veya PowerShell'i kullanarak da erişim ilkeleri atayabilirsiniz.

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