Şirket içinde barındırılan .NET uygulamalarından Azure kaynaklarında kimlik doğrulaması

Azure dışında barındırılan uygulamalar (örneğin şirket içi veya üçüncü taraf veri merkezinde), Azure kaynaklarına erişirken Azure'da kimlik doğrulaması yapmak için bir uygulama hizmet sorumlusu kullanmalıdır. Uygulama hizmeti sorumlusu nesneleri, Azure'da uygulama kayıt işlemi kullanılarak oluşturulur. Uygulama hizmet sorumlusu oluşturulduğunda, uygulamanız için bir istemci kimliği ve istemci gizli dizisi oluşturulur. İstemci kimliği, istemci gizli anahtarı ve kiracı kimliğiniz daha sonra ortam değişkenlerinde depolanır, böylece uygulamanızın çalışma zamanında Azure'da kimliğini doğrulamak için .NET için Azure SDK'sı tarafından kullanılabilir.

Uygulamanın barındırılacağı her ortam için farklı bir uygulama kaydı oluşturulmalıdır. Bu, her hizmet sorumlusu için ortama özgü kaynak izinlerinin yapılandırılmasına olanak tanır ve bir ortama dağıtılan bir uygulamanın başka bir ortamın parçası olan Azure kaynaklarıyla konuşmadığından emin olun.

1 - Uygulamayı Azure'a kaydetme

Bir uygulama Azure portalı veya Azure CLI kullanılarak Azure'a kaydedilebilir.

Azure portalında oturum açın ve şu adımları izleyin.

Yönergeler Ekran görüntüsü
Azure portalında:
  1. Azure portalının üst kısmındaki arama çubuğuna uygulama kayıtlarını girin.
  2. Arama çubuğunun altında görüntülenen menünün Hizmetler başlığı altında Uygulama kayıtları etiketli öğeyi seçin.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
Uygulama kayıtları sayfasında + Yeni kayıt'ı seçin. A screenshot showing the location of the New registration button in the App registrations page.
Uygulamayı kaydet sayfasında formu aşağıdaki gibi doldurun.
  1. Ad → Azure'da uygulama kaydı için bir ad girin. Bu adın, uygulama kaydının için olduğu uygulama adını ve ortamı (test, üretim) içermesi önerilir.
  2. Desteklenen hesap türleri yalnızca bu kuruluş dizinindeki Hesaplar →.
Uygulamanızı kaydetmek ve uygulama hizmet sorumlusunu oluşturmak için Kaydet'i seçin.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
Uygulamanızın Uygulama kaydı sayfasında:
  1. Uygulama (istemci) kimliği → Bu, uygulamanın yerel geliştirme sırasında Azure'a erişmek için kullanacağı uygulama kimliğidir. Bu değeri bir metin düzenleyicisinde geçici bir konuma kopyalayın; bunun için sonraki bir adımda ihtiyacınız olacaktır.
  2. Dizin (kiracı) kimliği → Bu değer, Azure'da kimlik doğrulaması yaparken uygulamanız tarafından da gerekli olacaktır. Bu değeri bir metin düzenleyicisinde geçici bir konuma kopyalayın, gelecekteki bir adımda da gerekli olacaktır.
  3. İstemci kimlik bilgileri → Uygulamanızın Azure'da kimlik doğrulaması yapıp Azure hizmetlerini kullanabilmesi için önce uygulamanın istemci kimlik bilgilerini ayarlamanız gerekir. Uygulamanızın kimlik bilgilerini eklemek için Sertifika veya gizli dizi ekle'yi seçin.
A screenshot of the App registration page after the app registration has been completed. This screenshot shows the location of the application ID and tenant ID which will be needed in a future step. It also shows the location of the link to use to add an application secret for the app.
Sertifikalar ve gizli diziler sayfasında + Yeni istemci gizli dizisi'ni seçin. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
İstemci gizli dizisi ekle iletişim kutusu sayfanın sağ tarafından açılır. Bu iletişim kutusunda:
  1. Açıklama → Geçerli değerini girin.
  2. Süresi doluyor → 24 aylık bir değer seçin.
Gizli diziyi eklemek için Ekle'yi seçin.

ÖNEMLİ: Gizli dizinin son kullanma tarihinden önce takviminizde bir anımsatıcı ayarlayın. Bu şekilde, bu gizli dizi sona ermeden önce yeni bir gizli dizi ekleyebilir ve uygulamalarınızı güncelleştirebilir ve uygulamanızda hizmet kesintisini önleyebilirsiniz.
A screenshot showing the page where a new client secret is added for the application service principal created by the app registration process.
Sertifikalar ve gizli diziler sayfasında, istemci gizli dizisinin değeri gösterilir.

Bu değeri bir metin düzenleyicisinde geçici bir konuma kopyalayın; bunun için sonraki bir adımda ihtiyacınız olacaktır.

ÖNEMLİ: Bu değeri yalnızca bu kez görürsünüz. Bu sayfadan ayrıldıktan veya sayfayı yeniledikten sonra bu değeri bir daha göremezsiniz. Bu istemci gizli dizisini geçersiz kılınmadan başka bir istemci gizli dizisi ekleyebilirsiniz, ancak bu değeri bir daha görmezsiniz.
A screenshot showing the page with the generated client secret.

2 - Uygulama hizmet sorumlusuna rol atama

Ardından, uygulamanızın hangi kaynaklar üzerinde hangi rollere (izinlere) ihtiyacı olduğunu belirlemeniz ve bu rolleri uygulamanıza atamanız gerekir. Rollere kaynak, kaynak grubu veya abonelik kapsamında bir rol atanabilir. Bu örnekte, çoğu uygulama tüm Azure kaynaklarını tek bir kaynak grubunda gruplandırdığından kaynak grubu kapsamında hizmet sorumlusu için rollerin nasıl atanacağı gösterilir.

Yönergeler Ekran görüntüsü
Azure portalının üst kısmındaki arama kutusunu kullanarak kaynak grubu adını arayarak uygulamanızın kaynak grubunu bulun.

İletişim kutusundaki Kaynak Grupları başlığının altındaki kaynak grubu adını seçerek kaynak grubunuza gidin.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
Kaynak grubunun sayfasında sol taraftaki menüden Erişim denetimi (IAM) öğesini seçin. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
Erişim denetimi (IAM) sayfasında:
  1. Rol atamaları sekmesini seçin.
  2. Üst menüden + Ekle'yi seçin ve ardından açılan menüden Rol ataması ekle'yi seçin.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
Rol ataması ekle sayfasında, kaynak grubu için atanabilecek tüm roller listelenir.
  1. Listeyi daha yönetilebilir bir boyuta filtrelemek için arama kutusunu kullanın. Bu örnekte, Depolama Blob rolleri için filtreleme gösterilmektedir.
  2. Atamak istediğiniz rolü seçin.
Sonraki ekrana gitmek için İleri'yi seçin.
A screenshot showing how to filter and select role assignments to be added to the resource group.
Sonraki Rol ataması ekle sayfası, rolü hangi kullanıcıya atayabileceğinizi belirtmenize olanak tanır.
  1. Erişim ata altında Kullanıcı, grup veya hizmet sorumlusu'natıklayın.
  2. Üyeler'in altında + Üyeleri seç'i seçin
Azure portalının sağ tarafında bir iletişim kutusu açılır.
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
Üye seç iletişim kutusunda:
  1. Seç metin kutusu, aboneliğinizdeki kullanıcı ve grupların listesini filtrelemek için kullanılabilir. Gerekirse, uygulamanın listeyi filtrelemesi için oluşturduğunuz hizmet sorumlusunun ilk birkaç karakterini yazın.
  2. Uygulamanızla ilişkili hizmet sorumlusunu seçin.
Devam etmek için iletişim kutusunun alt kısmındaki Seç'i seçin.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
Hizmet sorumlusu artık Rol ataması ekle ekranında seçili olarak gösterilir.

Son sayfaya gitmek için Gözden geçir + ata'yı seçin ve ardından işlemi tamamlamak için Gözden geçir + yeniden ata'yı seçin.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

3 - Uygulama için ortam değişkenlerini yapılandırma

nesnesi çalışma DefaultAzureCredential zamanında bir dizi ortam değişkeninde hizmet sorumlusu kimlik bilgilerini arar. Araçlarınıza ve ortamınıza bağlı olarak .NET ile çalışırken ortam değişkenlerini yapılandırmanın birden çok yolu vardır.

Hangi yaklaşımı seçerseniz seçin, bir hizmet sorumlusuyla çalışırken aşağıdaki ortam değişkenlerini yapılandırmanız gerekir.

  • AZURE_CLIENT_ID Uygulama kimliği değerini →.
  • AZURE_TENANT_ID kiracı kimliği değerini →.
  • AZURE_CLIENT_SECRET → Uygulama için oluşturulan parola/kimlik bilgisi.

Uygulamanız IIS'de barındırılıyorsa, uygulamalar arasındaki ayarları yalıtmak için uygulama havuzu başına ortam değişkenleri ayarlamanız önerilir.

appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_ID',value='00000000-0000-0000-0000-000000000000']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_TENANT_ID',value='11111111-1111-1111-1111-111111111111']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_SECRET',value='=abcdefghijklmnopqrstuvwxyz']" /commit:apphost

Bu ayarları doğrudan dosyanın içindeki applicationHost.config öğesini kullanarak applicationPools da yapılandırabilirsiniz.

<applicationPools>
   <add name="CorePool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic">
      <environmentVariables>
         <add name="ASPNETCORE_ENVIRONMENT" value="Development" />
         <add name="AZURE_CLIENT_ID" value="00000000-0000-0000-0000-000000000000" />
         <add name="AZURE_TENANT_ID" value="11111111-1111-1111-1111-111111111111" />
         <add name="AZURE_CLIENT_SECRET" value="=abcdefghijklmnopqrstuvwxyz" />
      </environmentVariables>
   </add>
</applicationPools>

4 - Uygulamada DefaultAzureCredential uygulama

DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında kullanılan kimlik doğrulama yöntemini belirler. Bu şekilde uygulamanız, ortama özgü kod uygulamadan farklı ortamlarda farklı kimlik doğrulama yöntemleri kullanabilir.

Kimlik bilgilerinin arandığı DefaultAzureCredential sıra ve konumlar DefaultAzureCredential konumunda bulunur.

uygulamasını uygulamak DefaultAzureCredentialiçin önce ve isteğe bağlı olarak Microsoft.Extensions.Azure paketlerini uygulamanıza ekleyinAzure.Identity. Bunu komut satırını veya NuGet Paket Yöneticisi kullanarak yapabilirsiniz.

Uygulama projesi dizininde tercihinize göre bir terminal ortamı açın ve aşağıdaki komutu girin.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Azure hizmetlerine genellikle SDK'dan karşılık gelen istemci sınıfları kullanılarak erişilir. Bu sınıflar ve kendi özel hizmetleriniz, uygulamanıza bağımlılık ekleme yoluyla erişilebilmeleri için dosyaya kaydedilmelidir Program.cs . Program.csiçinde, ve hizmetinizi DefaultAzureCredentialdoğru şekilde ayarlamak için aşağıdaki adımları izleyin.

  1. Azure.Identity ve Microsoft.Extensions.Azure ad alanlarını using deyimine ekleyin.
  2. İlgili yardımcı yöntemleri kullanarak Azure hizmetini kaydedin.
  3. yöntemine nesnesinin DefaultAzureCredential bir örneğini UseCredential geçirin.

Bunun bir örneği aşağıdaki kod kesiminde gösterilmiştir.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

Alternatif olarak, aşağıda görüldüğü gibi ek Azure kayıt yöntemlerinin yardımı olmadan hizmetlerinizde daha doğrudan kullanabilirsiniz DefaultAzureCredential .

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Yukarıdaki kod yerel geliştirme sırasında yerel iş istasyonunuzda çalıştırıldığında, yerel geliştirme sırasında uygulamanın Kimliğini Azure kaynaklarına doğrulamak için kullanılabilen bir geliştirici kimlik bilgileri kümesi için bir uygulama hizmet sorumlusunun veya Visual Studio, VS Code, Azure CLI veya Azure PowerShell'in ortam değişkenlerine bakar.

Azure'a dağıtıldığında bu kod uygulamanızın kimliğini diğer Azure kaynaklarda da doğrulayabilir. DefaultAzureCredential diğer hizmetlerde otomatik olarak kimlik doğrulaması yapmak için ortam ayarlarını ve yönetilen kimlik yapılandırmalarını alabilir.