Aracılığıyla paylaş


Kimlik bilgilerini işlemeden uygulamanızdan kaynaklara bağlanma

Yönetilen kimlik desteğine sahip Azure kaynakları, Microsoft Entra kimlik doğrulamasını destekleyen Azure kaynaklarına bağlanmak için her zaman bir yönetilen kimlik belirtme seçeneği sağlar. Yönetilen kimlikler desteği, geliştiricilerin koddaki kimlik bilgilerini yönetmesini gereksiz kılar. Yönetilen kimlikler, bunları destekleyen Azure kaynaklarıyla çalışırken önerilen kimlik doğrulama seçeneğidir. Yönetilen kimliklere genel bir bakış okuyun.

Bu sayfada Bir App Service'in Azure Key Vault, Azure Depolama ve Microsoft SQL Server'a bağlanabilmesi için nasıl yapılandırabileceğiniz gösterilmektedir. Yönetilen kimlikleri destekleyen ve Microsoft Entra kimlik doğrulamasını destekleyen kaynaklara bağlanacak tüm Azure kaynakları için aynı ilkeler kullanılabilir.

Kod örnekleri, bağlantıda kullanılan bir erişim belirteci alma da dahil olmak üzere sizin için birçok adımı otomatik olarak işlediğinden önerilen yöntem olan Azure Identity istemci kitaplığını kullanır.

Yönetilen kimlikler hangi kaynaklara bağlanabilir?

Yönetilen kimlik, Microsoft Entra kimlik doğrulamasını destekleyen herhangi bir kaynağa bağlanabilir. Genel olarak, yönetilen kimliklerin kaynağa bağlanmasına izin vermek için özel bir destek gerekmez.

Bazı kaynaklar Microsoft Entra kimlik doğrulamasını desteklemez veya istemci kitaplıkları belirteçle kimlik doğrulamayı desteklemez. Kodunuzda veya uygulama yapılandırmanızda depolamanıza gerek kalmadan kimlik bilgilerine güvenli bir şekilde erişmek için Yönetilen kimlik kullanma yönergelerimizi görmek için okumaya devam edin.

Yönetilen kimlik oluşturma

İki tür yönetilen kimlik vardır: sistem tarafından atanan ve kullanıcı tarafından atanan. Sistem tarafından atanan kimlikler doğrudan tek bir Azure kaynağına bağlanır. Azure kaynağı silindiğinde kimlik de silinir. Kullanıcı tarafından atanan yönetilen kimlik birden çok Azure kaynağıyla ilişkilendirilebilir ve yaşam döngüsü bu kaynaklardan bağımsızdır.

Çoğu senaryo için kullanıcı tarafından atanan yönetilen kimlik kullanmanızı öneririz. Kullandığınız kaynak kullanıcı tarafından atanan yönetilen kimlikleri desteklemiyorsa, sistem tarafından atanan yönetilen kimliğe sahip olacak şekilde yapılandırmayı öğrenmek için bu kaynak sağlayıcısının belgelerine başvurmalısınız.

Önemli

Yönetilen kimlikleri oluşturmak için kullanılan hesabın, kullanıcı tarafından atanan yeni bir yönetilen kimlik oluşturmak için "Yönetilen Kimlik Katkıda Bulunanı" gibi bir role ihtiyacı vardır.

Tercih ettiğiniz seçeneği kullanarak kullanıcı tarafından atanan bir yönetilen kimlik oluşturun:

Kullanıcı tarafından atanan bir yönetilen kimlik oluşturduktan sonra, yönetilen kimlik oluşturulduğunda döndürülen ve principalId değerlerini not clientId alın. İzinleri eklerken ve clientId uygulamanızın kodunda kullanırsınızprincipalId.

App Service'i kullanıcı tarafından atanan yönetilen kimlikle yapılandırma

Yönetilen kimliği kodunuzda kullanabilmeniz için önce bunu kullanacak App Service'e atamamız gerekir. App Service'i kullanıcı tarafından atanan yönetilen kimliği kullanacak şekilde yapılandırma işlemi, yönetilen kimliğin kaynak tanımlayıcısını uygulama yapılandırmanızda belirtmenizi gerektirir.

Kimliğe izin ekleme

App Service'inizi kullanıcı tarafından atanan yönetilen kimliği kullanacak şekilde yapılandırdıktan sonra, kimlik için gerekli izinleri verin. Bu senaryoda, Azure Depolama ile etkileşime geçmek için bu kimliği kullanıyoruz, bu nedenle kaynağa kullanıcı tarafından atanan yönetilen kimlik izinlerini vermek için Azure Rol Tabanlı Erişim Denetimi (RBAC) sistemini kullanmanız gerekir.

Önemli

Rol atamaları eklemek için hedef kaynak için "Kullanıcı Erişim Yöneticisi" veya "Sahip" gibi bir role ihtiyacınız olacaktır. Uygulamanın çalışması için gereken en düşük ayrıcalığı sağladığından emin olun.

Erişmek istediğiniz tüm kaynaklar için kimlik izinleri vermeniz gerekir. Örneğin, Key Vault'a erişmek için bir belirteç isterseniz, uygulamanızın veya işlevinizin yönetilen kimliğini içeren bir erişim ilkesi de eklemeniz gerekir. Aksi takdirde, geçerli bir belirteç kullansanız bile Key Vault'a yaptığınız çağrılar reddedilir. Aynı durum Azure SQL Veritabanı için de geçerlidir. Microsoft Entra belirteçlerini destekleyen kaynaklar hakkında daha fazla bilgi edinmek için bkz. Microsoft Entra kimlik doğrulamasını destekleyen Azure hizmetleri.

Kodunuzda yönetilen kimlikleri kullanma

Yukarıda açıklanan adımları tamamladıktan sonra, App Service'inizin Azure kaynağı izinleri olan bir yönetilen kimliği vardır. Kodunuzun kimlik bilgilerini kodunuzda depolamak yerine Azure kaynaklarıyla etkileşimde bulunurken kullanabileceği bir erişim belirteci almak için yönetilen kimliği kullanabilirsiniz.

Tercih ettiğiniz programlama dili için Azure Kimlik kitaplığını kullanmanızı öneririz. Kitaplık sizin için erişim belirteçleri alarak hedef kaynaklara bağlanmayı kolaylaştırır.

Azure Kimlik kitaplıkları hakkında daha fazla bilgiyi aşağıda bulabilirsiniz:

Geliştirme ortamınızda Azure Kimlik kitaplığını kullanma

Azure Kimlik kitaplıklarının her birinin bir DefaultAzureCredential türü vardır. DefaultAzureCredential ortam değişkenleri veya etkileşimli oturum açma dahil olmak üzere birden çok mekanizma aracılığıyla otomatik olarak kimlik doğrulaması yapmaya çalışır. Kimlik bilgisi türü, kendi kimlik bilgilerinizi kullanarak geliştirme ortamınızda kullanılabilir. Yönetilen kimlik kullanarak üretim Azure ortamınızda da kullanılabilir. Uygulamanızı dağıtırken kod değişikliği gerekmez.

Kullanıcı tarafından atanan yönetilen kimlikler kullanıyorsanız, kimliğin istemci kimliğini parametre olarak geçirerek kimlik doğrulaması yapmak istediğiniz kullanıcı tarafından atanan yönetilen kimliği de açıkça belirtmeniz gerekir. Azure portalında kimliğe göz atarak istemci kimliğini alabilirsiniz.

Azure Depolama'da Blob'a erişme

using Azure.Identity;
using Azure.Storage.Blobs;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);                        

var blobServiceClient1 = new BlobServiceClient(new Uri("<URI of Storage account>"), credential);
BlobContainerClient containerClient1 = blobServiceClient1.GetBlobContainerClient("<name of blob>");
BlobClient blobClient1 = containerClient1.GetBlobClient("<name of file>");

if (blobClient1.Exists())
{
    var downloadedBlob = blobClient1.Download();
    string blobContents = downloadedBlob.Value.Content.ToString();                
}

Azure Key Vault'ta depolanan gizli diziye erişme

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

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};
var credential = new DefaultAzureCredential(credentialOptions);        

var client = new SecretClient(
    new Uri("https://<your-unique-key-vault-name>.vault.azure.net/"),
    credential);
    
KeyVaultSecret secret = client.GetSecret("<my secret>");
string secretValue = secret.Value;

Azure SQL Veritabanı erişme

using Azure.Identity;
using Microsoft.Data.SqlClient;

// code omitted for brevity

// Specify the Client ID if using user-assigned managed identities
var clientID = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID");
var credentialOptions = new DefaultAzureCredentialOptions
{
    ManagedIdentityClientId = clientID
};

AccessToken accessToken = await new DefaultAzureCredential(credentialOptions).GetTokenAsync(
    new TokenRequestContext(new string[] { "https://database.windows.net//.default" }));                        

using var connection = new SqlConnection("Server=<DB Server>; Database=<DB Name>;")
{
    AccessToken = accessToken.Token
};
var cmd = new SqlCommand("select top 1 ColumnName from TableName", connection);
await connection.OpenAsync();
SqlDataReader dr = cmd.ExecuteReader();
while(dr.Read())
{
    Console.WriteLine(dr.GetValue(0).ToString());
}
dr.Close();	

Kitaplıklarda Microsoft Entra Id veya belirteç tabanlı kimlik doğrulamasını desteklemeyen kaynaklara bağlanma

Bazı Azure kaynakları henüz Microsoft Entra kimlik doğrulamasını desteklemez veya istemci kitaplıkları belirteçle kimlik doğrulamayı desteklemez. Bu kaynaklar genellikle bir bağlantı dizesi kullanıcı adı ve parola veya erişim anahtarı bekleyen açık kaynak teknolojilerdir.

Kimlik bilgilerinin kodunuzda veya uygulama yapılandırmanızda depolanmasını önlemek için kimlik bilgilerini Azure Key Vault'ta gizli dizi olarak depolayabilirsiniz. Yukarıda görüntülenen örneği kullanarak, yönetilen kimlik kullanarak Azure KeyVault'tan gizli diziyi alabilir ve kimlik bilgilerini bağlantı dizesi geçirebilirsiniz. Bu yaklaşım, kodunuzda veya ortamınızda doğrudan hiçbir kimlik bilgilerinin işlenmesi gerekmeyen bir yaklaşımdır.

Belirteçleri doğrudan işlip işlemediğinize ilişkin yönergeler

Bazı senaryolarda, hedef kaynağa bağlanmak için yerleşik bir yöntem kullanmak yerine yönetilen kimlikler için belirteçleri el ile almak isteyebilirsiniz. Bu senaryolar, kullandığınız programlama dili veya bağlandığınız hedef kaynak için istemci kitaplığı veya Azure'da çalışmayan kaynaklara bağlanmayı içermez. Belirteçleri el ile alırken aşağıdaki yönergeleri sağlarız:

Aldığınız belirteçleri önbelleğe alma

Performans ve güvenilirlik için uygulamanızın belirteçleri yerel bellekte önbelleğe almalarını veya diske kaydetmek istiyorsanız şifrelenmiş olmalarını öneririz. Yönetilen kimlik belirteçleri 24 saat boyunca geçerli olduğundan, yeni belirteçleri düzenli olarak istemenin bir avantajı yoktur çünkü önbelleğe alınmış bir belirteç veren uç noktadan döndürülür. İstek sınırlarını aşarsanız hız sınırına sahip olursunuz ve HTTP 429 hatası alırsınız.

Belirteç aldığınızda belirteç önbelleğinizin süresinin, belirteç oluşturulduğunda döndürülecek olan (veya eşdeğer özellik) 5 dakika önce expires_on dolacak şekilde ayarlayabilirsiniz.

Belirteç denetimi

Uygulamanız bir belirtecin içeriğine güvenmemelidir. Belirtecin içeriği yalnızca erişilen hedef kitleye (hedef kaynak) yöneliktir, belirteci isteyen istemciye yönelik değildir. Belirteç içeriği gelecekte değişebilir veya şifrelenebilir.

Belirteçleri kullanıma sunma veya taşıma

Belirteçler kimlik bilgileri gibi ele alınmalıdır. Bunları kullanıcılara veya diğer hizmetlere göstermeyin; örneğin, günlüğe kaydetme/izleme çözümleri. Hedef kaynakta kimlik doğrulaması yapmak dışında, bunları kullanan kaynak kaynaktan taşınmamalıdır.

Sonraki adımlar