Aracılığıyla paylaş


Spring Cloud Azure kimlik doğrulaması

Bu makalede tüm Spring Cloud Azure kimlik doğrulama yöntemleri açıklanmaktadır.

Microsoft Entra Id ile kimlik doğrulaması ve yetkilendirme

Microsoft Entra Id ile Azure rol tabanlı erişim denetimini (Azure RBAC) kullanarak bir kullanıcı veya uygulama hizmet sorumlusu olabilecek bir güvenlik sorumlusuna izin vekleyebilirsiniz. Bir güvenlik sorumlusu (kullanıcı veya uygulama) bir Event Hubs kaynağı gibi bir Azure kaynağına erişmeye çalıştığında istek yetkilendirilmelidir. Microsoft Entra Id ile kaynağa erişim iki adımlı bir işlemdir:

  1. İlk olarak, güvenlik sorumlusunun kimliği doğrulanır ve bir OAuth 2.0 belirteci döndürülür.
  2. Ardından belirteç, belirtilen kaynağa erişim yetkisi vermek için Azure hizmetine yapılan bir isteğin parçası olarak geçirilir.

Kimlik bilgisi türleri

Spring Cloud Azure, kimlik doğrulaması için DefaultAzureCredential, WorkloadIdentityCredential, ManagedIdentityCredential, ClientSecretCredential, AzureCliCredentialvb. gibi farklı kimlik bilgileri türlerini yapılandırmanızı sağlar.

DefaultAzureCredential

DefaultAzureCredential, uygulamanın Azure Bulut'ta çalıştırılması amaçlandığı çoğu senaryo için uygundur çünkü aşağıdaki kimlik bilgilerini birleştirir:

  • Dağıtıldığında kimlik doğrulaması yapmak için yaygın olarak kullanılan kimlik bilgileri.
  • Geliştirme ortamında kimlik doğrulaması yapmak için kullanılan kimlik bilgileri.

Not

DefaultAzureCredential, makul varsayılan davranışlara sahip yaygın senaryoları işleyerek Azure SDK'sını kullanmaya başlamayı kolaylaştırmaya yöneliktir. Daha fazla denetim istiyorsanız veya varsayılan ayarlar senaryonuzu desteklemiyorsa, diğer kimlik bilgileri türlerini kullanmanız gerekir.

DefaultAzureCredential sırayla aşağıdaki mekanizmalar aracılığıyla kimlik doğrulaması yapmaya çalışır:

'DefaultAzureCredential' için kimlik doğrulama mekanizmasını gösteren Diyagramı.

  • Ortam - DefaultAzureCredential ortam değişkenleri aracılığıyla belirtilen hesap bilgilerini okumaya çalışır ve kimlik doğrulaması için kullanır.
  • Yönetilen Kimlik - Uygulama Yönetilen Kimlik etkin bir Azure konağına dağıtıldıysa DefaultAzureCredential bu hesapla kimlik doğrulaması yapmaya çalışır.
  • İş Yükü Kimliği - Uygulama bir sanal makinelere (VM) dağıtılırsa DefaultAzureCredential bu hesapla kimlik doğrulaması yapmaya çalışır.
  • Paylaşılan Belirteç Önbelleği - Visual Studio aracılığıyla kimlik doğrulaması aldıysanız DefaultAzureCredential bu hesapla kimlik doğrulaması yapmaya çalışır.
  • IntelliJ - Azure Toolkit for IntelliJ aracılığıyla kimlik doğrulaması yaparsanız DefaultAzureCredential bu hesapla kimlik doğrulaması yapmaya çalışır.
  • Azure CLI - Azure CLI az login komutuyla bir hesabın kimliğini doğruladıysanız DefaultAzureCredential bu hesapla kimlik doğrulaması yapmaya çalışır.
  • Azure PowerShell - Azure PowerShell aracılığıyla kimlik doğrulaması yaparsanız DefaultAzureCredential bu hesapla kimlik doğrulaması yapmaya çalışır.
  • Azure Geliştirici CLI'sı - Azure Geliştirici CLI'sı aracılığıyla kimlik doğrulaması aldıysanız DefaultAzureCredential bu hesapla kimlik doğrulaması yapmaya çalışır.

Bahşiş

Güvenlik sorumlusunun Azure kaynağına erişmek için yeterli izne sahip olduğundan emin olun. Daha fazla bilgi için bkz. Microsoft Entra ID ile erişimi yetkilendirme.

Not

Spring Cloud Azure AutoConfigure 4.1.0'dan bu yana Azure Identity tarafından oluşturulan tüm iş parçacıklarını yönetmek için ThreadPoolTaskExecutor adlı bir springCloudAzureCredentialTaskExecutor çekirdeği kaydetmeniz gerekir. Bu iş parçacığı havuzu tarafından yönetilen her iş parçacığının adı az-identity-ön ekindedir. Bu ThreadPoolTaskExecutor fasulye, Spring Boot tarafından sağlanan Executor fasulyeden bağımsızdır.

Yönetilen kimlikler

Yaygın bir zorluk, çözüm oluşturan farklı bileşenler arasındaki iletişimin güvenliğini sağlamak için kullanılan gizli dizilerin ve kimlik bilgilerinin yönetimidir. Yönetilen kimlikler, kimlik bilgilerini yönetme gereksinimini ortadan kaldırır. Yönetilen kimlikler, Microsoft Entra kimlik doğrulamasını destekleyen kaynaklara bağlanırken uygulamaların kullanması için bir kimlik sağlar. Uygulamalar, Microsoft Entra belirteçlerini almak için yönetilen kimliği kullanabilir. Örneğin bir uygulama, kimlik bilgilerini güvenli bir şekilde depolayabileceğiniz veya depolama hesaplarına erişebileceğiniz Azure Key Vault gibi kaynaklara erişmek için yönetilen kimlik kullanabilir.

Uygulamanızda bağlantı dizesi veya anahtar kullanmak yerine yönetilen kimlik kullanılmasını öneririz çünkü bu daha güvenlidir ve gizli dizileri ve kimlik bilgilerini yönetme zahmetini azaltır. Bu durumda, DefaultAzureCredential yerel olarak depolanan hesap bilgilerini kullanarak yerel olarak geliştirme, ardından uygulamayı Azure Bulut'a dağıtma ve yönetilen kimlik kullanma senaryosuna daha iyi hizmet verebilir.

Yönetilen kimlik türleri

İki tür yönetilen kimlik vardır:

  • Sistem tarafından atanan - Bazı Azure hizmetleri, yönetilen kimliği doğrudan bir hizmet örneğinde etkinleştirmenize olanak tanır. Sistem tarafından atanan yönetilen kimliği etkinleştirdiğinizde, Microsoft Entra'da bu hizmet örneğinin yaşam döngüsüne bağlı bir kimlik oluşturulur. Bu nedenle, kaynak silindiğinde Azure sizin için kimliği otomatik olarak siler. Tasarım gereği, yalnızca bu Azure kaynağı Microsoft Entra Id'den belirteç istemek için bu kimliği kullanabilir.
  • Kullanıcı tarafından atanan - Yönetilen kimliği tek başına Azure kaynağı olarak da oluşturabilirsiniz. Kullanıcı tarafından atanan bir yönetilen kimlik oluşturabilir ve bunu bir Azure hizmetinin bir veya daha fazla örneğine atayabilirsiniz. Kullanıcı tarafından atanan yönetilen kimlikler ile kimlik, onu kullanan kaynaklardan ayrı olarak yönetilir.

Not

Kullanıcı tarafından atanan yönetilen kimliği kullanırken, spring.cloud.azure.credential.client-id veya spring.cloud.azure.<azure-service>.credential.client-idaracılığıyla istemci kimliğini belirtebilirsiniz. Sistem tarafından atanan bir yönetilen kimlik kullanıyorsanız kimlik bilgisi yapılandırmasına ihtiyacınız yoktur.

Bahşiş

Azure kaynağına erişmek için güvenlik sorumlusunun yeterli izne sahip olduğundan emin olun. Daha fazla bilgi için bkz. Microsoft Entra ID ile erişimi yetkilendirme.

Yönetilen kimlik hakkında daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?.

Diğer kimlik bilgisi türleri

DefaultAzureCredentialtarafından sağlanandan daha fazla denetim istiyorsanız veya varsayılan ayarlar senaryonuzu desteklemiyorsa, diğer kimlik bilgileri türlerini kullanmanız gerekir.

Microsoft Entra Kimliği ile kimlik doğrulaması

Uygulamaları Microsoft Entra kimlik doğrulamasını destekleyen kaynaklara bağlamak için, spring.cloud.azure.credential veya spring.cloud.azure.<azure-service>.credential ön ekiyle aşağıdaki yapılandırmaları ayarlayabilirsiniz

Aşağıdaki tabloda kimlik doğrulama özellikleri listelenir:

Mülk Açıklama
istemci kimliği Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak istemci kimliği.
gizli dizi Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak istemci gizli dizisi.
istemci-sertifika-yolu Azure ile hizmet sorumlusu kimlik doğrulaması gerçekleştirirken kullanılacak PEM sertifika dosyasının yolu.
istemci-sertifika-parola Sertifika dosyasının parolası.
kullanıcı adı Azure ile kullanıcı adı/parola kimlik doğrulaması gerçekleştirirken kullanılacak kullanıcı adı.
parola Azure ile kullanıcı adı/parola kimlik doğrulaması gerçekleştirirken kullanılacak parola.
yönetilen kimlik etkin Yönetilen kimliğin etkinleştirilip etkinleştirilmeyileceği.
belirteç-kimlik bilgisi-fasulye adı Azure ile kimlik doğrulaması yaparken kullanılacak TokenCredential türündeki fasulye adı.

Bahşiş

Tüm Spring Cloud Azure yapılandırma özelliklerinin listesi için bkz. Spring Cloud Azure yapılandırma özellikleri.

Uygulama, kullanılabilir bir kimlik bilgilerini bulmak için çeşitli yerlerde arar. Her Azure SDK istemci oluşturucu fabrikası, özellik TokenCredential belirtilirse önce token-credential-bean-name türünde bir özel fasulye benimser ve hiçbir kimlik bilgisi özelliği yapılandırılmamışsa DefaultAzureCredential kullanmaya geri döner.

Özelleştirilmiş bir TokenCredential çekirdeği kullanarak kimlik doğrulaması

Aşağıdaki örnekte, kimlik doğrulamasını yapmak için özel bir TokenCredential çekirdeğinin nasıl tanımlanacağı gösterilmektedir:

@Bean
TokenCredential myTokenCredential() {
    // Your concrete TokenCredential instance
}
spring.cloud.azure:
  credential:
    token-credential-bean-name: myTokenCredential

Sistem tarafından atanan yönetilen kimliği kullanarak kimlik doğrulaması

Aşağıdaki örnekte, sistem tarafından atanan yönetilen kimliği kullanarak kimlik doğrulamasının nasıl yapılacağını gösterilmektedir:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true

Kullanıcı tarafından atanan yönetilen kimliği kullanarak kimlik doğrulaması

Aşağıdaki örnekte, kullanıcı tarafından atanan yönetilen kimlik kullanılarak kimlik doğrulamasının nasıl yapılacağını gösterilmektedir:

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
    client-id: ${AZURE_CLIENT_ID}

İstemci gizli anahtarıyla hizmet sorumlusu kullanarak kimlik doğrulaması yapma

Aşağıdaki örnekte, istemci gizli dizisiyle hizmet sorumlusu kullanarak kimlik doğrulamasının nasıl yapılacağını gösterilmektedir:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-secret: ${AZURE_CLIENT_SECRET}
  profile:
    tenant-id: <tenant>

Not

tenant-id için izin verilen değerler şunlardır: common, organizations, consumersveya kiracı kimliği. Bu değerler hakkında daha fazla bilgi için, Hata AADSTS50020 - Kimlik sağlayıcısından kullanıcı hesabı kiracımevcut değil bölümünün Yanlış uç nokta kullanıldı (kişisel ve kuruluş hesapları) bölümüne bakın. Tek kiracılı uygulamanızı dönüştürme hakkında bilgi için bkz. Tek kiracılı uygulamayı Microsoft Entra IDüzerinde çok kiracılıya dönüştürme.

İstemci sertifikasıyla hizmet sorumlusu kullanarak kimlik doğrulaması yapma

Aşağıdaki örnekte, istemci PFX sertifikasıyla hizmet sorumlusu kullanarak kimlik doğrulaması yapma adımları gösterilmektedir:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
    client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
  profile:
    tenant-id: <tenant>

Not

tenant-id için izin verilen değerler şunlardır: common, organizations, consumersveya kiracı kimliği. Bu değerler hakkında daha fazla bilgi için, Hata AADSTS50020 - Kimlik sağlayıcısından kullanıcı hesabı kiracımevcut değil bölümünün Yanlış uç nokta kullanıldı (kişisel ve kuruluş hesapları) bölümüne bakın. Tek kiracılı uygulamanızı dönüştürme hakkında bilgi için bkz. Tek kiracılı uygulamayı Microsoft Entra IDüzerinde çok kiracılıya dönüştürme.

Aşağıdaki örnekte, istemci PEM sertifikasıyla hizmet sorumlusu kullanarak kimlik doğrulaması yapma adımları gösterilmektedir:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
  profile:
    tenant-id: <tenant>

Not

tenant-id için izin verilen değerler şunlardır: common, organizations, consumersveya kiracı kimliği. Bu değerler hakkında daha fazla bilgi için, Hata AADSTS50020 - Kimlik sağlayıcısından kullanıcı hesabı kiracımevcut değil bölümünün Yanlış uç nokta kullanıldı (kişisel ve kuruluş hesapları) bölümüne bakın. Tek kiracılı uygulamanızı dönüştürme hakkında bilgi için bkz. Tek kiracılı uygulamayı Microsoft Entra IDüzerinde çok kiracılıya dönüştürme.

Kullanıcı kimlik bilgilerini kullanarak kimlik doğrulaması

Aşağıdaki örnekte, kullanıcı kimlik bilgilerini kullanarak kimlik doğrulamasının nasıl yapılacağını gösterilmektedir:

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    username: ${AZURE_USER_USERNAME}
    password: ${AZURE_USER_PASSWORD}

Diğerlerinden farklı bir kimlik bilgisi kullanarak hizmetin kimliğini doğrulama

Aşağıdaki örnekte farklı bir hizmet sorumlusu kullanarak Key Vault ile kimlik doğrulaması gerçekleştirme adımları gösterilmektedir. Bu örnekte, uygulama iki kimlik bilgisi ile yapılandırılır: bir sistem tarafından atanan yönetilen kimlik ve bir hizmet sorumlusu. Key Vault Gizli Anahtarı istemcisi hizmet sorumlusunu kullanır, ancak diğer bileşenler bunun yerine yönetilen kimlik kullanır.

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
  keyvault.secret:
    credential:
      client-id: ${AZURE_CLIENT_ID}
      client-secret: ${AZURE_CLIENT_SECRET}
    profile:
      tenant-id: <tenant>

Not

tenant-id için izin verilen değerler şunlardır: common, organizations, consumersveya kiracı kimliği. Bu değerler hakkında daha fazla bilgi için, Hata AADSTS50020 - Kimlik sağlayıcısından kullanıcı hesabı kiracımevcut değil bölümünün Yanlış uç nokta kullanıldı (kişisel ve kuruluş hesapları) bölümüne bakın. Tek kiracılı uygulamanızı dönüştürme hakkında bilgi için bkz. Tek kiracılı uygulamayı Microsoft Entra IDüzerinde çok kiracılıya dönüştürme.

Microsoft Entra Kimliği ile erişimi yetkilendirme

Yetkilendirme adımı için güvenlik sorumlusuna bir veya daha fazla Azure rolü atanmalıdır. Güvenlik sorumlusuna atanan roller, sorumlunun sahip olduğu izinleri belirler.

Bahşiş

Tüm Azure yerleşik rollerinin listesi için bkz.Azure yerleşik rolleri.

Aşağıdaki tabloda Spring Cloud Azure'da desteklenen Azure hizmetlerine erişimi yetkilendirmeye yönelik Azure yerleşik rolleri listelenmektedir:

Rol Açıklama
uygulama yapılandırma veri sahibi Uygulama Yapılandırması verilerine tam erişime izin verir.
uygulama yapılandırma veri okuyucu Uygulama Yapılandırması verilerine okuma erişimine izin verir.
Azure Event Hubs Veri Sahibi Azure Event Hubs kaynaklarına tam erişim sağlar.
Azure Event Hubs Veri Alıcısı Azure Event Hubs kaynaklarına erişim izni verir.
Azure Event Hubs Veri Göndereni Azure Event Hubs kaynaklarına erişim göndermeye izin verir.
Azure Service Bus Veri Sahibi Azure Service Bus kaynaklarına tam erişim sağlar.
Azure Service Bus Veri Alıcısı Azure Service Bus kaynaklarına erişim izni verir.
Azure Service Bus Veri Göndereni Azure Service Bus kaynaklarına erişim göndermeye izin verir.
depolama blobu veri sahibi POSIX erişim denetimi atama dahil olmak üzere Azure Depolama blob kapsayıcılarına ve verilerine tam erişim sağlar.
depolama blobu veri okuyucu Azure Depolama kapsayıcılarını ve bloblarını okuyun ve listeleyin.
depolama kuyruğu veri okuyucu Azure Depolama kuyruklarını ve kuyruk iletilerini okuyun ve listeleyin.
Redis Cache Katkıda Bulunanı Redis önbelleklerini yönetme.

Not

Event Hubs, Service Bus ve Depolama Kuyruğu için bağlantı dizelerini veya Redis için Cache'in özelliklerini almak için Spring Cloud Azure Resource Manager'ı kullanırken, ContributorAzure yerleşik rolünü atayın. Redis için Azure Cache özeldir ve Redis özelliklerini almak için Redis Cache Contributor rolünü de atayabilirsiniz.

Not

Key Vault erişim ilkesi, belirli bir güvenlik sorumlusuna (kullanıcı, uygulama veya kullanıcı grubu) Key Vault gizli dizileri, anahtarları ve sertifikaları üzerinde farklı işlemler gerçekleştirip gerçekleştiremeyeceğini belirler. Erişim ilkelerini Azure portalını, Azure CLI'yı veya Azure PowerShell'i kullanarak atayabilirsiniz. Daha fazla bilgi için bkz. Key Vault erişim ilkesi atama.

Önemli

Azure Cosmos DB iki yerleşik rol tanımını kullanıma sunar: Cosmos DB Built-in Data Reader ve Cosmos DB Built-in Data Contributor. Ancak rol yönetimi için Azure portal desteği henüz sağlanmamıştır. İzin modeli, rol tanımları ve rol ataması hakkında daha fazla bilgi için bkz. Azure Cosmos DB hesabınız için Microsoft Entra Id ile rol tabanlı erişim denetimini yapılandırma.

SAS belirteçlerini kullanarak kimlik doğrulaması

Paylaşılan Erişim İmzası (SAS) ile kimlik doğrulaması için hizmetleri de yapılandırabilirsiniz. spring.cloud.azure.<azure-service>.sas-token yapılandırılan özelliktir. Örneğin, Depolama Blobu hizmetinde kimlik doğrulaması yapmak için spring.cloud.azure.storage.blob.sas-token kullanın.

Bağlantı dizelerini kullanarak kimlik doğrulaması

Bazı Azure hizmetleri bağlantı bilgilerini ve kimlik bilgilerini sağlamak için bağlantı dizesini destekler. Bağlantı dizesini kullanarak bu Azure hizmetlerine bağlanmak için spring.cloud.azure.<azure-service>.connection-stringyapılandırın. Örneğin, event hubs hizmetine bağlanmak için spring.cloud.azure.eventhubs.connection-string yapılandırın.