Aracılığıyla paylaş


C++ için Azure SDK'sını kullanarak Azure hizmetlerinde C++ uygulamalarının kimliğini doğrulama

Bir uygulamanın Azure Depolama, Azure Key Vault veya Azure Mesajlaşma hizmetleri gibi bir Azure kaynağına erişmesi gerektiğinde, uygulamanın Kimliğinin Azure'da doğrulanması gerekir. Azure'a dağıtılan, şirket içinde dağıtılan veya yerel geliştirici iş istasyonunda geliştirme aşamasında olan tüm uygulamalar için bu gereksinim geçerlidir. Bu makalede, C++ için Azure SDK'sını kullandığınızda Azure'da bir uygulamanın kimliğini doğrulamak için önerilen yaklaşımlar açıklanmaktadır.

Azure kaynaklarında kimlik doğrulaması yaparken uygulamalarınız için bağlantı dizeleri yerine belirteç tabanlı kimlik doğrulaması kullanın. C++ için Azure Identity istemci kitaplığı, belirteç tabanlı kimlik doğrulamasını destekleyen sınıflar sağlar. Bu sınıflar, uygulamanın yerel geliştirme aşamasında, Azure'a dağıtıldığında veya şirket içi bir sunucuya dağıtıldığında uygulamaların Azure kaynaklarında sorunsuz bir şekilde kimlik doğrulaması yapmalarına olanak sağlar.

Bir uygulamanın Azure kaynaklarında kimlik doğrulaması yapmak için kullandığı belirteç tabanlı kimlik doğrulaması türü, uygulamanın çalıştırıldığı yere bağlıdır. Belirteç tabanlı kimlik doğrulaması türleri aşağıdaki diyagramda gösterilmiştir.

Çalıştığı yere bağlı olarak bir uygulama için önerilen belirteç tabanlı kimlik doğrulama stratejilerini gösteren diyagram.

  • Yerel geliştirme sırasında bir geliştirici bir uygulama çalıştırdığında: Uygulama, yerel geliştirme için bir uygulama hizmet sorumlusu veya geliştiricinin Azure kimlik bilgilerini kullanarak Azure'da kimlik doğrulaması yapar. Bu seçenekler, yerel geliştirmesırasında kimlik doğrulaması bölümünde açıklanmıştır.
  • Bir uygulama Azure'da barındırıldığında: Uygulama yönetilen kimlik kullanarak Azure kaynaklarında kimlik doğrulaması yapar. Bu seçenek,sunucu ortamlarında kimlik doğrulaması bölümünde açıklanmıştır.
  • Bir uygulama şirket içinde barındırıldığında ve dağıtıldığında: Uygulama, uygulama hizmet sorumlusu kullanarak Azure kaynaklarında kimlik doğrulaması yapar. Bu seçenek,sunucu ortamlarında kimlik doğrulaması bölümünde açıklanmıştır.

DefaultAzureCredential

Azure Identity istemci kitaplığı tarafından sağlanan DefaultAzureCredential sınıfı, uygulamaların çalıştırıldığı ortama bağlı olarak farklı kimlik doğrulama yöntemleri kullanmasına olanak tanır. Bu şekilde uygulamalar yerel geliştirmeden test ortamlarına, kod değişikliği olmadan üretime yükseltilebilir.

Her ortam için uygun kimlik doğrulama yöntemini yapılandırıp DefaultAzureCredential bu kimlik doğrulama yöntemini otomatik olarak algılar ve kullanırsınız. DefaultAzureCredential kullanımı, farklı ortamlarda farklı kimlik doğrulama yöntemlerini kullanmak için koşullu mantığı veya özellik bayraklarını el ile kodlamak yerine tercih edilir.

sınıfını DefaultAzureCredential kullanma hakkındaki ayrıntılar, Bir uygulamada DefaultAzureCredential kullanma bölümünde açıklanmıştır.

Belirteç tabanlı kimlik doğrulamasının avantajları

Azure için uygulama oluştururken bağlantı dizelerini kullanmak yerine belirteç tabanlı kimlik doğrulamasını kullanın. Belirteç tabanlı kimlik doğrulaması, bağlantı dizeleriyle kimlik doğrulamasına göre aşağıdaki avantajları sunar:

  • Bu makalede açıklanan belirteç tabanlı kimlik doğrulama yöntemleri, Azure kaynağında uygulamanın ihtiyaç duyduğu belirli izinleri oluşturmanıza olanak sağlar. Bu uygulama, en az ayrıcalıklılık ilkesiniizler. Buna karşılık, bir bağlantı dizesi Azure kaynağına tam haklar verir.
  • Bağlantı dizesi olan herkes veya herhangi bir uygulama Bir Azure kaynağına bağlanabilir, ancak belirteç tabanlı kimlik doğrulama yöntemleri kaynağa erişimi yalnızca kaynağa erişmeyi amaçlanan uygulamalarla kapsama alır.
  • Yönetilen kimlikle depolanacak bir uygulama gizliliği yoktur. Gizliliği ihlal edilebilecek bir bağlantı dizesi veya uygulama gizli dizisi olmadığından uygulama daha güvenlidir.
  • Azure-identity paketi sizin için Microsoft Entra belirteçlerini alır ve yönetir ve belirteç tabanlı kimlik doğrulamasını bağlantı dizesi olarak kullanımı kolay hale getirir.

Bağlantı dizelerinin kullanımını, üretim veya hassas verilere erişmeyen ilk kavram kanıtı uygulamaları veya geliştirme prototipleriyle sınırlayın. Aksi takdirde, Azure Kimlik istemci kitaplığında bulunan belirteç tabanlı kimlik doğrulama sınıfları, Azure kaynaklarında kimlik doğrulaması yaparken her zaman tercih edilir.

Sunucu ortamlarında kimlik doğrulaması

Bir sunucu ortamında barındırırken, her uygulamaya uygulamanın çalıştığı ortam başına benzersiz bir uygulama kimliği atanır. Azure'da bir uygulama kimliği bir hizmet sorumlusu tarafından temsil edilir. Bu özel güvenlik sorumlusu türü, uygulamaları tanımlar ve Azure'da kimlik doğrulaması yapar. Uygulamanız için kullanılacak hizmet sorumlusunun türü, uygulamanızın çalıştığı yere bağlıdır:

Kimlik doğrulama yöntemi Açıklama
Azure'da barındırılan uygulamalar Azure'da barındırılan uygulamalar, bir yönetilen kimlik hizmeti ilkesikullanmalıdır. Yönetilen kimlikler, Azure'da barındırılan bir uygulamanın kimliğini temsil etmek üzere tasarlanmıştır ve yalnızca Azure tarafından barındırılan uygulamalarla kullanılabilir.

Örneğin, Azure App Service'te barındırılan bir Django web uygulamasına yönetilen kimlik atanır. Ardından uygulamaya atanan yönetilen kimlik, uygulamanın diğer Azure hizmetlerinde kimliğini doğrulamak için kullanılır.

Azure Kubernetes Service'te (AKS) çalışan uygulamalar bir İş yükü kimliği kimlik bilgilerini kullanabilir. Bu kimlik bilgisi, AKS hizmet hesabıyla güven ilişkisi olan yönetilen kimliği temel alır.

Azure dışında barındırılan uygulamalar
(örneğin, şirket içi uygulamalar)
Azure hizmetlerine bağlanması gereken Azure dışında barındırılan uygulamalar (örneğin, şirket içi uygulamalar) bir uygulama hizmet sorumlusukullanmalıdır. Uygulama hizmet sorumlusu, Azure'daki uygulamanın kimliğini temsil eder ve uygulama kayıt işlemi aracılığıyla oluşturulur.

Örneğin, Şirket içinde barındırılan ve Azure Blob Depolama'yı kullanan bir Django web uygulaması düşünün. Uygulama kayıt işlemini kullanarak uygulama için bir uygulama hizmet sorumlusu oluşturabilirsiniz. AZURE_CLIENT_ID, AZURE_TENANT_IDve AZURE_CLIENT_SECRET, çalışma zamanında uygulama tarafından okunacak ortam değişkenleri olarak depolanır ve uygulamanın uygulama hizmet sorumlusunu kullanarak Azure'da kimlik doğrulamasına izin verir.

Yerel geliştirme sırasında kimlik doğrulaması

Bir uygulama yerel geliştirme sırasında bir geliştiricinin iş istasyonunda çalıştığında, uygulama tarafından kullanılan tüm Azure hizmetlerinde kimlik doğrulaması yapmalıdır. Yerel geliştirme sırasında Azure'da uygulamaların kimliğini doğrulamak için iki ana strateji vardır:

Kimlik doğrulama yöntemi Açıklama
Yerel geliştirme sırasında kullanılacak özel uygulama hizmet asıl öznelerini oluşturun. Bu yöntemde, yerel geliştirme sırasında kullanılmak üzere uygulama kayıt işlemi kullanılarak ayrılmış uygulama hizmet sorumlusu nesneleri ayarlanır. Hizmet sorumlusunun kimliği daha sonra yerel geliştirmede çalıştırıldığında uygulama tarafından erişilecek ortam değişkenleri olarak depolanır.

Bu yöntem, yerel geliştirme sırasında geliştiriciler tarafından kullanılan hizmet sorumlusu nesnelerine uygulama için gereken belirli kaynak izinlerini atamanızı sağlar. Bu uygulama, uygulamanın yalnızca ihtiyaç duyduğu belirli kaynaklara erişmesini sağlar ve uygulamanın üretimde sahip olacağı izinleri çoğaltır.

Bu yaklaşımın dezavantajı, bir uygulama üzerinde çalışan her geliştirici için ayrı hizmet sorumlusu nesneleri oluşturma gereksinimidir.

Yerel geliştirme sırasında geliştiricinin kimlik bilgilerini kullanarak uygulamanın Kimliğini Azure'da doğrular. Bu yöntemde bir geliştiricinin yerel iş istasyonunda Azure CLI, Azure PowerShell veya Azure Developer CLI'dan Azure'da oturum açması gerekir. Daha sonra uygulama, geliştiricinin kimlik bilgilerine kimlik bilgisi deposundan erişebilir ve bu kimlik bilgilerini kullanarak uygulamadan Azure kaynaklarına erişebilir.

Bir geliştiricinin yalnızca yukarıda belirtilen geliştirici araçlarından biri aracılığıyla Azure hesabında oturum açması gerektiğinden, bu yöntem daha kolay kurulum avantajına sahiptir. Bu yaklaşımın dezavantajı, geliştirici hesabının büyük olasılıkla uygulama için gerekenden daha fazla izine sahip olmasıdır. Sonuç olarak, uygulama üretim ortamında sahip olacağı izinleri doğru bir şekilde yansıtmaz.

Uygulamada DefaultAzureCredential kullanma

DefaultAzureCredential, Microsoft Entra ID'de kimlik doğrulaması yapmak için özenle hazırlanmış ve sıralı bir mekanizma dizisidir. Her kimlik doğrulama mekanizması , TokenCredential protokolunu uygulayan ve kimlik bilgisi olarak bilinen bir sınıftır. Çalışma zamanında, DefaultAzureCredential ilk kimlik bilgisini kullanarak kimlik doğrulamayı dener. Bu kimlik bilgisi bir erişim belirteci alamazsa, bir erişim belirteci başarıyla alınana kadar dizideki bir sonraki kimlik bilgisi denenir ve bu şekilde devam edilir. Bu şekilde, uygulamanız ortama özgü kod yazmadan farklı ortamlarda farklı kimlik bilgilerini kullanabilir.

DefaultAzureCredential öğesini C++ uygulamanızda kullanmak için, vcpkg kullanarak uygulamanıza azure-identity-cpp paketini ekleyin.

vcpkg add port azure-identity-cpp

Ardından, CMake dosyanıza aşağıdakileri ekleyin:

find_package(azure-identity-cpp CONFIG REQUIRED)
target_link_libraries(<your project name> PRIVATE Azure::azure-identity)

Azure hizmetlerine çeşitli Azure SDK istemci kitaplıklarından özel istemci sınıfları kullanılarak erişilir. Aşağıdaki kod örneğinde, bir DefaultAzureCredential nesnenin örneğini oluşturma ve bir Azure SDK istemci sınıfıyla kullanma adımları gösterilmektedir. Bu durumda, Azure KeyVault Gizli Anahtarlarına erişmek için kullanılan bir SecretClient nesnedir.

#include <azure/identity.hpp>
#include <azure/keyvault/secrets.hpp>

int main(){
  
  auto const keyVaultUrl = std::getenv("AZURE_KEYVAULT_URL");
  auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>();

  
  Azure::Security::KeyVault::Secrets::SecretClient secretClient(keyVaultUrl, credential);
}

Yukarıdaki kod yerel geliştirme iş istasyonunuzda çalıştırıldığında, bir uygulama hizmet sorumlusunun ortam değişkenlerini veya bir dizi geliştirici kimlik bilgisi için Azure CLI gibi yerel olarak yüklenen geliştirici araçlarını arar. Her iki yaklaşım da yerel geliştirme sırasında azure kaynaklarında uygulamanın kimliğini doğrulamak için kullanılabilir.

Azure'a dağıtıldığında, aynı kod uygulamanızın kimliğini Azure kaynaklarda da doğrulayabilir. DefaultAzureCredential, Azure hizmetlerinde otomatik olarak kimlik doğrulaması yapmak için ortam ayarlarını ve yönetilen kimlik yapılandırmalarını alabilir.