Aracılığıyla paylaş


Birden çok Azure uygulaması ve hizmeti arasında parolasız bağlantılar yapılandırma

Uygulamalar genellikle aynı anda birden çok Azure hizmeti arasında güvenli bağlantılar gerektirir. Örneğin, bir kurumsal Azure Uygulaması Service örneği birkaç farklı depolama hesabına, bir Azure SQL veritabanı örneğine, bir service bus'a ve daha fazlasına bağlanabilir.

Yönetilen kimlikler , Azure kaynakları arasındaki güvenli ve parolasız bağlantılar için önerilen kimlik doğrulama seçeneğidir. Bu görevlerin çoğu Azure tarafından dahili olarak ele alındığından, geliştiricilerin yönetilen kimlikler için birçok farklı gizli diziyi el ile izlemesi ve yönetmesi gerekmez. Bu öğreticide, yönetilen kimlikleri ve Azure Identity istemci kitaplığını kullanarak birden çok hizmet arasındaki bağlantıları yönetme adımları açıklanmaktadır.

Yönetilen kimlik türlerini karşılaştırma

Azure aşağıdaki yönetilen kimlik türlerini sağlar:

  • Sistem tarafından atanan yönetilen kimlikler doğrudan tek bir Azure kaynağına bağlanır. Bir hizmette sistem tarafından atanan yönetilen kimliği etkinleştirdiğinizde, Azure bağlı bir kimlik oluşturur ve bu kimlik için yönetim görevlerini dahili olarak işler. Azure kaynağı silindiğinde kimlik de silinir.
  • Kullanıcı tarafından atanan yönetilen kimlikler , bir yönetici tarafından oluşturulan ve bir veya daha fazla Azure kaynağıyla ilişkilendirilebilen bağımsız kimliklerdir. Kimliğin yaşam döngüsü bu kaynaklardan bağımsızdır.

En iyi yöntemler ve sistem tarafından atanan kimlikler ile kullanıcı tarafından atanan kimliklerin ne zaman kullanılacağı hakkında daha fazla bilgi edinmek için en iyi yöntem önerilerini okuyabilirsiniz.

DefaultAzureCredential'i keşfedin

Yönetilen kimlikler genellikle uygulama kodunuzda istemci kitaplığından Azure.Identity çağrılan DefaultAzureCredential bir sınıf aracılığıyla uygulanır. DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve hangilerinin çalışma zamanında kullanılması gerektiğini otomatik olarak belirler. Bu yaklaşım hakkında daha fazla bilgiyi DefaultAzureCredential genel bakış sayfasından okuyabilirsiniz.

Azure'da barındırılan bir uygulamayı birden çok Azure hizmetine Bağlan

Mevcut bir uygulamayı parolasız bağlantılar kullanarak birden çok Azure hizmetine ve veritabanına bağlamakla görevlendirildiniz. Aşağıdaki adımlar Azure Spring Apps, Sanal Makineler, Container Apps ve AKS gibi diğer Azure barındırma ortamları için de geçerli olsa da, uygulama Azure Uygulaması Hizmetinde barındırılan bir ASP.NET Core Web API'dir.

Bu öğretici aşağıdaki mimariler için geçerlidir, ancak en düşük yapılandırma değişiklikleriyle diğer birçok senaryoya da uyarlanabilir.

Diagram showing the user assigned identity relationships.

Aşağıdaki adımlarda, bir uygulamanın sistem tarafından atanan yönetilen kimliği kullanacak şekilde ve yerel geliştirme hesabınızın birden çok Azure Hizmetine bağlanacak şekilde nasıl yapılandırılması gösterilmektedir.

Sistem tarafından atanan yönetilen kimlik oluşturma

  1. Azure portalında, diğer hizmetlere bağlanmak istediğiniz barındırılan uygulamaya gidin.

  2. Hizmete genel bakış sayfasında Kimlik'i seçin.

  3. Hizmet için sistem tarafından atanan yönetilen kimliği etkinleştirmek için Durum ayarını Açık olarak değiştirin.

    Screenshot showing how to assign a system assigned managed identity.

Her bağlı hizmet için yönetilen kimliğe rol atama

  1. Kimliğinize erişim izni vermek istediğiniz depolama hesabının genel bakış sayfasına gidin.

  2. Depolama hesabı gezintisinden Erişim Denetimi (IAM) öğesini seçin.

  3. + Ekle'yi ve ardından Rol ataması ekle'yi seçin.

    Screenshot showing how to assign a system-assigned identity.

  4. Rol arama kutusunda, blob verilerinde okuma ve yazma işlemleri gerçekleştirme izinleri veren Depolama Blob Veri Katkıda Bulunanı'nı arayın. Kullanım örneğiniz için uygun olan rolü atayabilirsiniz. Listeden blob veri katkıda bulunanı Depolama seçin ve İleri'yi seçin.

  5. Rol ataması ekle ekranında, Erişim ata seçeneği içinYönetilen kimlik'i seçin. Ardından +Üye seç'i seçin.

  6. Açılır öğede, uygulama hizmetinizin adını girerek oluşturduğunuz yönetilen kimliği arayın. Sistem tarafından atanan kimliği seçin ve açılır menüyü kapatmak için Seç'i seçin.

    Screenshot showing how to select a system-assigned identity.

  7. Rol atamasını tamamlamak için Gözden geçir ve ata'yı seçene kadar birkaç kez İleri'yi seçin.

  8. Bağlanmak istediğiniz diğer hizmetler için bu işlemi yineleyin.

Yerel geliştirmeyle ilgili dikkat edilmesi gerekenler

Ayrıca, yönetilen kimliğinize roller atadığınız gibi bir kullanıcı hesabına roller atayarak yerel geliştirme için Azure kaynaklarına erişimi etkinleştirebilirsiniz.

  1. Yönetilen kimliğinize Depolama Blob Veri Katkıda Bulunanı rolünü atadıktan sonra, Erişim ata'nın altında bu kez Kullanıcı, grup veya hizmet sorumlusu'na tıklayın. Açılır menüyü yeniden açmak için + Üye seç'i seçin.

  2. E-posta adresine veya adına göre erişim vermek istediğiniz user@domain hesabını veya Microsoft Entra güvenlik grubunu arayın ve seçin. Bu, Visual Studio veya Azure CLI gibi yerel geliştirme araçlarınızda oturum açmak için kullandığınız hesapla aynı olmalıdır.

Not

Birden çok geliştiricisi olan bir ekip üzerinde çalışıyorsanız, bu rolleri bir Microsoft Entra güvenlik grubuna da atayabilirsiniz. Ardından, uygulamayı yerel olarak geliştirmek için erişmesi gereken herhangi bir geliştiriciyi bu grubun içine yerleştirebilirsiniz.

Uygulama kodunu uygulama

Projenizin içine NuGet paketine Azure.Identity bir başvuru ekleyin. Bu kitaplık, uygulamak DefaultAzureCredentialiçin gerekli tüm varlıkları içerir. Uygulamanızla ilgili diğer Tüm Azure kitaplıklarını da ekleyebilirsiniz. Bu örnekte, Azure.Storage.Blobs Blob Depolama ve Key Vault'a bağlanmak için ve Azure.KeyVault.Keys paketleri eklenir.

dotnet add package Azure.Identity
dotnet add package Azure.Storage.Blobs
dotnet add package Azure.KeyVault.Keys

Dosyanızın Program.cs en üstüne aşağıdaki using deyimlerini ekleyin:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Security.KeyVault.Keys;

Proje kodunuzun Program.cs dosyasında, uygulamanızın bağlanacağı gerekli hizmetlerin örneklerini oluşturun. Aşağıdaki örnekler, karşılık gelen SDK sınıflarını kullanarak Blob Depolama ve service bus'a bağlanır.

var blobServiceClient = new BlobServiceClient(
    new Uri("https://<your-storage-account>.blob.core.windows.net"),
    new DefaultAzureCredential(credOptions));

var serviceBusClient = new ServiceBusClient("<your-namespace>", new DefaultAzureCredential());
var sender = serviceBusClient.CreateSender("producttracking");

Bu uygulama kodu yerel olarak çalıştırıldığında, DefaultAzureCredential kullanılabilir ilk kimlik bilgileri için bir kimlik bilgisi zincirinde arama yapacaktır. Managed_Identity_Client_ID yerel olarak null ise, yerel Azure CLI veya Visual Studio oturum açma bilgilerinizden kimlik bilgilerini otomatik olarak kullanır. Bu işlem hakkında daha fazla bilgiyi Azure Kimlik kitaplığına genel bakış sayfasından okuyabilirsiniz.

Uygulama Azure'a dağıtıldığında, DefaultAzureCredential değişkeni app service ortamından otomatik olarak alır Managed_Identity_Client_ID . Bu değer, uygulamanızla yönetilen bir kimlik ilişkilendirildiğinde kullanılabilir hale gelir.

Bu genel işlem, uygulamanızın herhangi bir kod değişikliğine gerek kalmadan yerel olarak ve Azure'da güvenli bir şekilde çalışmasını sağlar.

Birden çok yönetilen kimlik kullanarak birden çok uygulama Bağlan

Önceki örnekteki tüm uygulamalar aynı hizmet erişim gereksinimlerini paylaşsa da, gerçek ortamlar genellikle daha incedir. Birden çok uygulamanın tümünün aynı depolama hesaplarına bağlandığı, ancak uygulamalardan ikisinin de farklı hizmetlere veya veritabanlarına eriştiği bir senaryo düşünün.

Diagram showing multiple user-assigned managed identities.

Bu kurulumu kodunuzda yapılandırmak için, uygulamanızın her depolama hesabına veya veritabanına bağlanmak için ayrı hizmetler kaydettiğinizden emin olun. yapılandırırken DefaultAzureCredentialher hizmet için doğru yönetilen kimlik istemci kimliklerini çektiğinden emin olun. Aşağıdaki kod örneği aşağıdaki hizmet bağlantılarını yapılandırıyor:

  • Paylaşılan kullanıcı tarafından atanan yönetilen kimliği kullanarak depolama hesaplarını ayırmak için iki bağlantı
  • İkinci bir paylaşılan kullanıcı tarafından atanan yönetilen kimlik kullanılarak Azure Cosmos DB ve Azure SQL hizmetlerine bağlantı
// Get the first user-assigned managed identity ID to connect to shared storage
const clientIdStorage = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID_Storage");

// First blob storage client that using a managed identity
BlobServiceClient blobServiceClient = new BlobServiceClient(
    new Uri("https://<receipt-storage-account>.blob.core.windows.net"),
    new DefaultAzureCredential()
    {
        ManagedIdentityClientId = clientIDstorage
    });

// Second blob storage client that using a managed identity
BlobServiceClient blobServiceClient2 = new BlobServiceClient(
    new Uri("https://<contract-storage-account>.blob.core.windows.net"),
    new DefaultAzureCredential()
    {
        ManagedIdentityClientId = clientIDstorage
    });


// Get the second user-assigned managed identity ID to connect to shared databases
var clientIDdatabases = Environment.GetEnvironmentVariable("Managed_Identity_Client_ID_Databases");

// Create an Azure Cosmos DB client
CosmosClient client = new CosmosClient(
    accountEndpoint: Environment.GetEnvironmentVariable("COSMOS_ENDPOINT", EnvironmentVariableTarget.Process),
    new DefaultAzureCredential()
    {
        ManagedIdentityClientId = clientIDdatabases
    });

// Open a connection to Azure SQL using a managed identity
string ConnectionString1 = @"Server=<azure-sql-hostname>.database.windows.net; User Id=ClientIDOfTheManagedIdentity; Authentication=Active Directory Default; Database=<database-name>";

using (SqlConnection conn = new SqlConnection(ConnectionString1))
{
    conn.Open();
}

Ayrıca, kullanıcı tarafından atanan yönetilen kimliğin yanı sıra sistem tarafından atanan yönetilen kimliği aynı anda bir kaynakla ilişkilendirebilirsiniz. Bu, tüm uygulamaların aynı paylaşılan hizmetlere erişmesi gereken ancak uygulamalardan birinin de ek bir hizmete çok özel bir bağımlılığı olduğu senaryolarda yararlı olabilir. Sistem tarafından atanan bir kimlik kullanmak, uygulama silindiğinde söz konusu uygulamaya bağlı kimliğin silinmesini de sağlar ve bu da ortamınızı temiz tutmaya yardımcı olabilir.

Diagram showing user-assigned and system-assigned managed identities.

Bu tür senaryolar, kimlikler için en iyi yöntem önerilerinde daha ayrıntılı bir şekilde incelenir.

Sonraki adımlar

Bu öğreticide, bir uygulamayı parolasız bağlantılara geçirmeyi öğrendiniz. Bu makalede ele alınan kavramları daha ayrıntılı incelemek için aşağıdaki kaynakları okuyabilirsiniz: