Öğretici: .NET 'teki bir Azure Web uygulamasına Key Vault bağlamak için yönetilen bir kimlik kullanın

Azure Key Vault , artırılmış güvenlik ile kimlik bilgilerini ve diğer gizli dizileri depolamanın bir yolunu sağlar. Ancak kodunuzun bunları alabilmesi için Key Vault kimlik doğrulaması gerekir. Azure kaynakları Için Yönetilen kimlikler , azure hizmetlerine Azure Active Directory (Azure AD) içinde otomatik olarak yönetilen bir kimlik vererek bu sorunu çözmeye yardımcı olur. Kodunuzda kimlik bilgilerini görüntülemesi gerekmeden Key Vault dahil olmak üzere Azure AD kimlik doğrulamasını destekleyen herhangi bir hizmette kimlik doğrulaması yapmak için bu kimliği kullanabilirsiniz.

Bu öğreticide, Azure App Serviceiçin Azure Web uygulaması oluşturup dağıtacaksınız. .NET için Azure Key Vault gizli istemci kitaplığı ve Azure CLIkullanarak Azure Anahtar Kasası ile Azure Web uygulamanızın kimliğini doğrulamak için yönetilen bir kimlik kullanacaksınız. Tercih ettiğiniz geliştirme dilini, Azure PowerShell ve/veya Azure portal kullandığınızda aynı temel ilkeler geçerlidir.

Bu öğreticide sunulan Azure App Service Web uygulamaları ve dağıtımı hakkında daha fazla bilgi için bkz.:

Önkoşullar

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

Zaten Azure App Service Web uygulamanız dağıtılmışsa, bir Anahtar Kasası için Web uygulaması erişimini yapılandırma ve Web uygulaması kod bölümlerini değiştirme aşamasına geçebilirsiniz.

.NET Core uygulaması oluşturma

Bu adımda, yerel .NET Core projesini ayarlayacaksınız.

Makinenizde bir Terminal penceresinde adlı bir dizin oluşturun akvwebapp ve 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 bakacağınızı öğrenmek için uygulamayı yerel olarak çalıştırın:

dotnet run

Bir Web tarayıcısında, konumundaki uygulamaya gidin http://localhost:5000 .

Uygulamanızdan "Merhaba Dünya!" sayfada görünen örnek uygulamadaki ileti.

Azure için Web uygulamaları oluşturma hakkında daha fazla bilgi için bkz. Azure App Service ASP.NET Core Web uygulaması oluşturma

Uygulamayı Azure’da dağıtma

Bu adımda, .NET Core uygulamanızı yerel Git kullanarak Azure App Service dağıtacaksınız. Uygulamaları 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

Terminal penceresinde, CTRL + C ' yi seçerek Web sunucusunu kapatın. .NET Core projesi için bir git deposu başlatın:

git init --initial-branch=main
git add .
git commit -m "first commit"

Bir Azure Web uygulamasını bir dağıtım kullanıcısı kullanarak DAĞıTMAK için FTP ve yerel git ' i kullanabilirsiniz. Dağıtım kullanıcısını yapılandırdıktan sonra 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ı.

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 simgesine (@) sahip olamaz.
  • Parola en az sekiz karakter uzunluğunda olmalı ve şu üç öğeden ikisini içermelidir: harfler, rakamlar ve semboller.
az webapp deployment user set --user-name "<username>" --password "<password>"

JSON çıktısı parolayı olarak gösterir null . Bir 'Conflict'. Details: 409 hata 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.

Kullanıcı adınızı ve parolanızı, Web uygulamalarınızı dağıtmak için kullanabilmek üzere kaydedin.

Kaynak grubu oluşturma

Kaynak grubu, Azure kaynaklarını dağıttığınız ve 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 CLı az appservice plan Create komutunu kullanarak bir App Service planı oluşturun. Aşağıdaki örnek myAppServicePlan , fiyatlandırma katmanında adlı bir App Service planı oluşturur FREE :

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

App Service planı oluşturulduğunda Azure CLı, burada gördüklerinize 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 bir Azure Web uygulaması oluşturun myAppServicePlan .

Önemli

Bir anahtar kasası gibi, bir Azure Web uygulamasının benzersiz bir adı olmalıdır. <your-webapp-name>Aşağıdaki örneklerde Web uygulamanızın adıyla değiştirin.

az webapp create --resource-group "myResourceGroup" --plan "myAppServicePlan" --name "<your-webapp-name>" --deployment-local-git

Web uygulaması oluşturulduğunda Azure CLı, burada gördüklerinize 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 Remote 'in URL 'SI, deploymentLocalGitUrl özelliğinde, biçiminde gösterilir https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git . Bu URL 'YI kaydedin. Buna daha sonra ihtiyacınız olacak.

Şimdi Web uygulamanızı daldan dağıtılacak şekilde yapılandırın main :

 az webapp config appsettings set -g MyResourceGroup --name "<your-webapp-name>" --settings deployment_branch=main

Aşağıdaki komutu kullanarak yeni uygulamanıza gidin. <your-webapp-name>Uygulamanızın adıyla değiştirin.

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, ' yi, <deploymentLocalGitUrl-from-create-step> Web uygulaması oluşturma bölümünde kaydettiğiniz GIT uzak öğesinin URL 'siyle değiştirin.

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

Uygulamanızı dağıtmak için Azure uzak uygulamasına göndermek üzere aşağıdaki komutu kullanın. Git kimlik bilgileri Yöneticisi kimlik bilgilerini sizden isterse, 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ışma sırasında, burada gördüklerinize 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 uygulamayı (veya yenilemeyi) (veya yenilemeyin) gidin:

http://<your-webapp-name>.azurewebsites.net

Uygulamanızdan "Merhaba Dünya!" daha önce ziyaret ettiğinizde gördüğünüz ileti http://localhost:5000 .

Git kullanarak Web uygulaması dağıtma hakkında daha fazla bilgi için bkz. Yerel git dağıtımı Azure App Service

Web uygulamasını Key Vault bağlanacak şekilde yapılandırma

Bu bölümde, Key Vault bir gizli dizi almak için Key Vault ve uygulama kodunuzu güncelleştirmek üzere Web erişimini yapılandıracaksınız.

Yönetilen kimlik oluşturma ve atama

Bu öğreticide, Key Vault kimlik doğrulaması için yönetilen kimlik kullanacağız. Yönetilen kimlik, uygulama kimlik bilgilerini otomatik olarak yönetir.

Azure CLı '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 bu JSON kod 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ıza yönelik Get ve Listeleme işlemlerine Izin vermek için, principalId Azure CLI az keykasası Set-Policy komutunu geçirin:

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

Ayrıca, Azure Portal veya PowerShellkullanarak erişim ilkeleri de atayabilirsiniz.

Anahtar kasanıza erişmek için uygulamayı değiştirin

Bu öğreticide, tanıtım amacıyla Azure Key Vault gizli istemci kitaplığı kullanacaksınız. Azure Key Vault sertifikası istemci kitaplığı'nı veya Azure Key Vault anahtar istemci kitaplığı' nı da kullanabilirsiniz.

Paketleri yükler

Terminal penceresinde, .NET ve Azure Identity istemci kitaplığı paketleri için Azure Key Vault gizli istemci Kitaplığı ' nı yükledikten sonra:

dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets

Kodu güncelleştirme

The. cs dosyasını akvwebapp projenizde bulun ve açın.

Bu satırları üstbilgiye ekleyin:

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;

Çağrıdan önce aşağıdaki satırları ekleyin app.UseEndpoints , URI 'yi anahtar kasasının yansıtacak şekilde güncelleyerek vaultUri . Bu kod, kimlik doğrulaması için yönetilen kimliğin bir belirtecini kullanan Key Vault kimlik doğrulaması yapmak için DefaultAzureCredential () kullanır. Key Vault kimlik doğrulaması hakkında daha fazla bilgi için bkz. Geliştirici Kılavuzu. Kod, Key Vault kısıtlanmakta olması durumunda yeniden denemeler için üstel geri alma kullanır. Key Vault işlem limitleri 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;

Satırı aşağıdaki await context.Response.WriteAsync("Hello World!"); satıra benzeymek üzere güncelleştirin:

await context.Response.WriteAsync(secretValue);

Sonraki adıma geçmeden önce değişikliklerinizi kaydettiğinizden emin olun.

Web uygulamanızı yeniden dağıtma

Artık kodunuzu güncelleştirmiş olduğunuza göre, şu git komutlarını kullanarak 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!" öğesini gördüğünüz, artık gizli anahtar değerinin görüntülendiğini görmeniz gerekir.

Sonraki adımlar