Share via


Kimlik bilgilerini işlemeden uygulamanızdan kaynaklara Bağlan

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.

Bu makalede, çoğu senaryo için önerilen kullanıcı tarafından atanan yönetilen kimliğin nasıl oluşturulacağı ve yapılandırılacağı açıklanmaktadır. 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.

Kullanıcı tarafından atanan yönetilen kimlik oluşturma

Dekont

Kullanıcı tarafından atanan yeni bir yönetilen kimlik oluşturmak için "Yönetilen Kimlik Katkıda Bulunanı" gibi bir role ihtiyacınız olacaktır.

  1. Portalın üst kısmındaki arama çubuğundan "Yönetilen Kimlikler" için arama yapın ve eşleşen sonucu seçin.

Screenshot of searching for managed identities in the portal.

  1. "Oluştur" düğmesini seçin.

Screenshot showing a managed identity create button in the portal.

  1. Abonelik ve Kaynak grubunu seçin ve Yönetilen kimlik için bir ad girin.

Screenshot showing a managed identity create screen in the portal.

  1. Doğrulama testini çalıştırmak için "Gözden geçir + oluştur" seçeneğini belirleyin ve ardından "Oluştur" düğmesini seçin.

  2. Kimlik oluşturulduğunda bir onay ekranı görüntülenir.

Screenshot showing a managed identity confirmation screen after creation in the portal.

Artık bir Azure kaynak kaynağıyla ilişkilendirilebilen bir kimliğiniz var. Kullanıcı tarafından atanan yönetilen kimlikleri yönetme hakkında daha fazla bilgi edinin..

Kaynak kaynağınızı kullanıcı tarafından atanan yönetilen kimliği kullanacak şekilde yapılandırma

Azure kaynağınızı Portal aracılığıyla yönetilen bir kimliğe sahip olacak şekilde yapılandırmak için bu adımları izleyin. Komut Satırı Arabirimi, PowerShell veya ARM şablonunu kullanarak kaynağın kimliğini yapılandırmayı öğrenmek için belirli kaynak türü belgelerine bakın.

Dekont

Azure kaynağını sistem tarafından atanan bir kimliğe sahip olacak şekilde yapılandırmak için "Yazma" izinlerine sahip olmanız gerekir. Kullanıcı tarafından atanan bir kimliği bir Azure kaynağıyla ilişkilendirmek için "Yönetilen Kimlik operatörü" gibi bir role ihtiyacınız olacaktır.

  1. Portalın üst kısmındaki arama çubuğunu kullanarak kaynağı bulma

Screenshot showing a resource being searched for in the portal.

  1. Gezintide Kimlik bağlantısını seçin

Screenshot showing the link to the identity screen for a resource in the portal.

  1. "Kullanıcı tarafından atanan" sekmesini seçin

  2. "Ekle" düğmesini seçin

Screenshot showing a user-assigned identity screen in the portal.

  1. Daha önce oluşturduğunuz kullanıcı tarafından atanan kimliği seçin ve "Ekle" seçeneğini belirleyin

Screenshot showing a user-assigned identity being selected in the portal.

  1. Kimlik kaynakla ilişkilendirilecek ve liste güncelleştirilecektir.

Screenshot showing a user-assigned identity has been associated with the Azure resource in the portal.

Kaynak kaynağınız artık hedef kaynaklara bağlanmak için kullanabileceği kullanıcı tarafından atanan bir kimliğe sahip.

Kimliğe izin ekleme

Dekont

Rol atamaları eklemek için hedef kaynak için "Kullanıcı Erişimi Yönetici istrator" 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.

App Service'inizin yönetilen bir kimliği olduğundan, kimliğe doğru izinleri vermeniz gerekir. Bu kimliği Azure Depolama ile etkileşimde bulunurken Azure Rol Tabanlı Erişim Denetimi (RBAC) sistemini kullanacaksınız.

  1. Portalın üst kısmındaki arama çubuğunu kullanarak bağlanmak istediğiniz kaynağı bulun
  2. Sol gezinti bölmesinde "Erişim Denetimi (IAM)" bağlantısını seçin.

Screenshot showing a resource summary screen in the portal.

  1. Ekranın üst kısmındaki "Ekle" düğmesini ve ardından "Rol ataması ekle" seçeneğini belirleyin.

Screenshot showing the add role assignment navigation in the portal.

  1. Rollerin listesi görüntülenir. "Görünüm" bağlantısını seçerek bir rolün sahip olduğu belirli izinleri görebilirsiniz. Kimliğe vermek istediğiniz rolü seçin ve "İleri" düğmesini seçin.

Screenshot showing a role being selected in the portal.

  1. Rolün kimlere verilmesi gerektiğini seçmeniz istenir. "Yönetilen kimlik" seçeneğini ve ardından "Üye ekle" bağlantısını seçin.

Screenshot showing the identity type being selected in the portal.

  1. Sağ tarafta yönetilen kimliğin türüne göre arama yapabileceğiniz bir bağlam bölmesi görüntülenir. "Yönetilen kimlik" seçeneğinden "Kullanıcı tarafından atanan yönetilen kimlik" seçeneğini belirleyin.

Screenshot showing managed identity being selected in the portal.

  1. Daha önce oluşturduğunuz kimliği ve "Seç" düğmesini seçin. Bağlam bölmesi kapatılır ve kimlik listeye eklenir.

Screenshot showing an identity being added to a resource in the portal.

  1. Rol atamasının özetini görüntülemek için "Gözden geçir + ata" düğmesini ve ardından onaylamak için bir kez daha seçin.
  2. "Rol atamaları" seçeneğini belirlediğinizde kaynak için rol atamalarının listesi görüntülenir.

Screenshot showing the role assignment has been added in the portal.

Yönetilen kimliğiniz artık Azure hedef kaynağına erişmek için doğru izinlere sahip. Azure Rol Tabanlı Erişim Denetimi hakkında daha fazla bilgi edinin.

Kodunuzda yönetilen kimliği kullanma

App Service'inizin artık izinlere sahip bir yönetilen kimliği var. Kimlik bilgilerini kodunuzda depolamak yerine, hedef kaynaklarla etkileşime geçmek için kodunuzdaki yönetilen kimliği kullanabilirsiniz.

Önerilen yöntem, tercih ettiğiniz programlama dili için Azure Kimlik kitaplığını kullanmaktır. Desteklenen diller .NET, Java, JavaScript, Python, Go ve C++ dillerini içerir. Kitaplık sizin için erişim belirteçleri alarak hedef kaynaklara bağlanmayı kolaylaştırır.

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

C++ kitaplığı dışında, Azure Kimlik kitaplıkları bir DefaultAzureCredential türü destekler. 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. Portalda kimliğe göz atarak istemci kimliğini alabilirsiniz.

Screenshot showing the client ID for the managed identity in the portal.

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

Azure Depolama'de 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 Kimliğini veya belirteç tabanlı kimlik doğrulamasını desteklemeyen kaynaklara Bağlan

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