Hizmet sorumlularını kullanarak yerel geliştirme sırasında Azure hizmetlerinde .NET uygulamalarının kimliğini doğrulama
Yerel geliştirme sırasında uygulamaların çeşitli Azure hizmetlerine erişmek için Azure'da kimlik doğrulaması yapmaları gerekir. Yerel kimlik doğrulamasına yönelik iki yaygın yaklaşım, geliştirici hesabı veya hizmet sorumlusu kullanmaktır. Bu makalede, uygulama hizmet sorumlusu nasıl kullanılacağı açıklanmaktadır. İlerideki bölümlerde şunları öğrenirsiniz:
- Hizmet sorumlusu oluşturmak için bir uygulamayı Microsoft Entra'ya kaydetme
- İzinleri verimli bir şekilde yönetmek için Microsoft Entra gruplarını kullanma
- Kapsam izinlerine roller atama
- Uygulama kodunuzdan hizmet ilkesi kullanarak kimlik doğrulaması yapma
Ayrılmış uygulama hizmet sorumlularını kullanmak, Azure kaynaklarına erişirken en az ayrıcalık ilkesine uymanızı sağlar. İzinler, geliştirme sırasında uygulamanın belirli gereksinimleriyle sınırlıdır ve diğer uygulamalar veya hizmetler için amaçlanan Azure kaynaklarına yanlışlıkla erişimi önler. Bu yaklaşım, uygulama geliştirme ortamında aşırı ayrıcalıklı olmadığından emin olarak üretime taşındığında karşılaşılan sorunları önlemeye de yardımcı olur.
Yerel bir .NET uygulamasının, geliştiricinin kimlik bilgilerini kullanarak yerel olarak yüklenen geliştirme araçları aracılığıyla Azure'a nasıl bağlandığını gösteren bir diyagram.
Uygulama Azure'a kaydedildiğinde bir uygulama hizmet sorumlusu oluşturulur. Yerel geliştirme için:
- Her geliştiricinin kendi uygulama hizmet sorumlusuna sahip olduğundan emin olmak için uygulama üzerinde çalışan her geliştirici için ayrı bir uygulama kaydı oluşturun ve kimlik bilgilerini paylaşma gereğini önleyin.
- Uygulamanın izinlerini yalnızca gerekli olanlarla sınırlamak için her uygulama için ayrı bir uygulama kaydı oluşturun.
Yerel geliştirme sırasında ortam değişkenleri uygulama hizmeti sorumlusunun kimliğiyle ayarlanır. Azure Kimlik kitaplığı, gerekli Azure kaynaklarında uygulamanın kimliğini doğrulamak için bu ortam değişkenlerini okur.
Uygulamayı Azure'a kaydetme
Uygulama hizmet sorumlusu nesneleri, Azure portalı ya da Azure CLI kullanılarak Azure'da bir uygulama kaydı aracılığıyla oluşturulur.
Azure portalında arama çubuğunu kullanarak Uygulama kayıtları sayfasına gidin.
Uygulama kayıtları sayfasında + Yeni kayıt'ı seçin.
Uygulamayı kaydetme sayfasında:
- Adı alanı için uygulama adını ve hedef ortamı içeren açıklayıcı bir değer girin.
- Desteklenen hesap türleri için yalnızca bu kuruluş dizinindeki hesaplar (Yalnızca Microsoft Müşteri Liderliğinde - Tek kiracı) veya gereksinimlerinize en uygun seçeneğiseçin.
Uygulamanızı kaydetmek ve hizmet sorumlusunu oluşturmak için Kaydet seçin.
Uygulamanızın Uygulama kaydı sayfasında Uygulama (istemci) kimliği ve Dizin (kiracı) kimliği kopyalayın ve bunları uygulama kodu yapılandırmalarınızda daha sonra kullanmak üzere geçici bir konuma yapıştırın.
Uygulamanızın kimlik bilgilerini ayarlamak için Sertifika veya gizli dizi ekle'yi seçin.
Sertifikalar ve gizli anahtarlar sayfasında + Yeni istemci gizli anahtar'ı seçin.
İstemci sırrı ekle panosunda açılan panelde:
- Açıklamaiçin Geçerli değerini girin.
- Süresi Doluyor değeri için varsayılan önerilen 180 gün değerini bırakın.
- Sırrı eklemek için Ekle'yi seçin.
Sertifikalar & gizli anahtarları sayfasında, istemci gizli anahtarının Değer özelliğini gelecekte kullanmak üzere kopyalayın.
Notlar
İstemci gizli anahtarı değeri, uygulama kaydı oluşturulduktan sonra yalnızca bir kez görüntülenir. Bu istemci sırrını geçersiz kılmadan daha fazla istemci sırrı ekleyebilirsiniz; ancak bu değeri yeniden görüntüleyebilmenin bir yolu yoktur.
Yerel geliştirme için Microsoft Entra grubu oluşturma
Rolleri tek tek hizmet sorumlusu nesnelerine atamak yerine yerel geliştirmede uygulamanın ihtiyaç duyduğu rolleri (izinleri) kapsüllemek için bir Microsoft Entra grubu oluşturun. Bu yaklaşım aşağıdaki avantajları sunar:
- Her geliştirici, grup düzeyinde aynı rollere sahiptir.
- Uygulama için yeni bir rol gerekiyorsa, yalnızca uygulamanın grubuna eklenmesi gerekir.
- Ekibe yeni bir geliştirici katılırsa, geliştirici için yeni bir uygulama hizmet sorumlusu oluşturulur ve gruba eklenir ve geliştiricinin uygulama üzerinde çalışmak için doğru izinlere sahip olduğundan emin olun.
Azure portalında Microsoft Entra Id genel bakış sayfasına gidin.
Sol taraftaki menüden Tüm Gruplar öğesini seçin.
Gruplar sayfasında Yeni grupseçin.
Yeni grup sayfasında aşağıdaki form alanlarını doldurun:
- Grup türü: güvenlikseçin.
- Grup adı: Uygulama veya ortam adına başvuru içeren grup için bir ad girin.
- Grup açıklaması: Grubun amacını açıklayan bir açıklama girin.
Gruba üye eklemek için Üyeler'in altında Hiçbir üye seçilmedi bağlantısını seçin.
Açılan açılır panelde, daha önce oluşturduğunuz hizmet sorumlusunu arayın ve filtrelenen sonuçlardan seçin. Seçiminizi onaylamak için panelin alt kısmındaki Seç düğmesini seçin.
Grubu oluşturmak ve Tüm gruplar sayfasına dönmek için Yeni grup sayfasının alt kısmındaki Oluştur'yi seçin. Yeni grubu listede görmüyorsanız, bir dakika bekleyin ve sayfayı yenileyin.
Gruba rol atama
Ardından, uygulamanızın hangi kaynaklar üzerinde hangi rollere (izinlere) ihtiyacı olduğunu belirleyin ve bu rolleri oluşturduğunuz Microsoft Entra grubuna atayın. Gruplara 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 rollerin nasıl atandığı gösterilmektedir.
Azure portalında uygulamanızı içeren kaynak grubunun Genel Bakış sayfasına gidin.
Sol gezinti bölmesinden erişim denetimi (IAM) seçin.
Erişim denetimi (IAM) sayfasında + ekle'yi seçin ve ardından açılan menüden Rol ataması ekle seçin. Rol ataması ekle sayfasında rolleri yapılandırmak ve atamak için çeşitli sekmeler sağlanır.
Rol sekmesinde, atamak istediğiniz rolü bulmak için arama kutusunu kullanın. Rolü seçin ve ardından İleriseçin.
Üyeler sekmesinde:
- değeri için erişim atamak amacıyla, olarak, Kullanıcı, grup veya hizmet sorumlusunu seçin.
- Üyeler değeri için, 'Üyeleri Seç' seçeneğini belirleyerek 'Üyeleri Seç' flyout panelini açın.
- Daha önce oluşturduğunuz Microsoft Entra grubunu arayın ve filtrelenen sonuçlardan seçin. Grubu seçmek ve açılır menü panelini kapatmak için seç'i seçin.
- Gözden Geçir + Ata seçeneğini Üyeler sekmesinin alt kısmında seçin.
Gözden Geçir + ata sekmesinde, sayfanın alt kısmında Gözden Geçir + ata seçin.
Uygulama ortamı değişkenlerini ayarlama
Çalışma zamanında, Azure Identity kitaplığındakiDefaultAzureCredential
, EnvironmentCredential
ve ClientSecretCredential
gibi bazı kimlik bilgileri, ortam değişkenlerinde kurala göre hizmet sorumlusu 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.
Seçtiğiniz yaklaşımdan bağımsız olarak, hizmet sorumlusu için aşağıdaki ortam değişkenlerini yapılandırın:
-
AZURE_CLIENT_ID
: Azure'da kayıtlı uygulamayı tanımlamak için kullanılır. -
AZURE_TENANT_ID
: Microsoft Entra kiracısının kimliği. -
AZURE_CLIENT_SECRET
: Uygulama için oluşturulan gizli kimlik bilgisi.
Visual Studio'da ortam değişkenleri projenizin Properties
klasöründeki launchsettings.json
dosyasında ayarlanabilir. Bu değerler uygulama başlatıldığında otomatik olarak çekilir. Ancak bu yapılandırmalar dağıtım sırasında uygulamanızla birlikte hareket etmediğinden, hedef barındırma ortamınızda ortam değişkenleri ayarlamanız gerekir.
"profiles": {
"SampleProject": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7177;http://localhost:5177",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
}
}
Uygulamanızdan Azure hizmetlerinde kimlik doğrulaması
Azure Kimlik kitaplığı, farklı senaryoları ve Microsoft Entra kimlik doğrulama akışlarını desteklemeye uyarlanmış TokenCredential
uygulamaları çeşitlikimlik bilgileri sağlar. İlerideki adımlarda, yerel olarak ve üretimde hizmet sorumlularıyla çalışırken ClientSecretCredential nasıl kullanılacağı gösterilmektedir.
Kodu uygulama
Azure.Identity paketini ekleyin. ASP.NET Core projesinde Microsoft.Extensions.Azure paketini de yükleyin:
Seçtiğiniz bir terminalde uygulama projesi dizinine gidin ve aşağıdaki komutları çalıştırın:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Azure hizmetlerine çeşitli Azure SDK istemci kitaplıklarından özel istemci sınıfları kullanılarak erişilir. Bu sınıflar ve kendi özel hizmetleriniz, uygulamanızda kullanılabilmesi için bağımlılık ekleme için kayıtlı olmalıdır.
Program.cs
'de, bağımlılık ekleme ve belirteç tabanlı kimlik doğrulaması için bir istemci sınıfı yapılandırmak üzere aşağıdaki adımları tamamlayın:
-
Azure.Identity
veMicrosoft.Extensions.Azure
ad alanlarınıusing
yönergeleri aracılığıyla ekleyin. - İlgili
Add
ön ekli extension method'u kullanarak Azure hizmet istemcisini kaydedin. -
tenantId
,clientId
veclientSecret
ileClientSecretCredential
yapılandırın. -
ClientSecretCredential
örneğiniUseCredential
yöntemine geçirin.
builder.Services.AddAzureClients(clientBuilder =>
{
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new ClientSecretCredential(tenantId, clientId, clientSecret));
});
UseCredential
yönteminin alternatifi, kimlik bilgilerini doğrudan hizmet istemcisine sağlamaktır:
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new ClientSecretCredential(tenantId, clientId, clientSecret)));