Aracılığıyla paylaş


Python için Azure SDK ile Azure'da barındırılan uygulamaların Azure kaynaklarına kimliğini doğrulama

Azure'da bir uygulamayı Azure Uygulaması Hizmeti, Azure Sanal Makineler veya Azure Container Instances gibi hizmetleri kullanarak barındırdığınızda, azure kaynaklarına yönelik bir uygulamanın kimliğini doğrulamak için önerilen yaklaşım yönetilen kimliktir.

Yönetilen kimlik, gizli anahtar veya başka bir uygulama gizli dizisi kullanmaya gerek kalmadan diğer Azure kaynaklarına bağlanabilecek şekilde uygulamanız için bir kimlik sağlar. Azure, uygulamanızın kimliğini ve bağlanabileceği kaynakları dahili olarak bilir. Azure, uygulama gizli dizilerini yönetmek zorunda kalmadan uygulamanın diğer Azure kaynaklarına bağlanmasına izin vermek üzere otomatik olarak Microsoft Entra belirteçlerini almak için bu bilgileri kullanır.

Not

Azure Kubernetes Service (AKS) üzerinde çalışan uygulamalar, Azure kaynaklarıyla kimlik doğrulaması yapmak için bir iş yükü kimliği kullanabilir. AKS'de iş yükü kimliği, yönetilen kimlik ile Kubernetes hizmet hesabı arasındaki güven ilişkisini temsil eder. AKS'ye dağıtılan bir uygulama böyle bir ilişkide Kubernetes hizmet hesabıyla yapılandırılırsa, DefaultAzureCredential yönetilen kimliği kullanarak uygulamanın Kimliğini Azure'da doğrular. İş yükü kimliği kullanarak kimlik doğrulaması, Azure Kubernetes Service ile Microsoft Entra İş Yükü Kimliği kullanma bölümünde ele alınmaktadır. İş yükü kimliğini yapılandırma adımları için bkz . Azure Kubernetes Service (AKS) kümesinde iş yükü kimliğini dağıtma ve yapılandırma.

Yönetilen kimlik türleri

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

  • Sistem tarafından atanan yönetilen kimlikler - Bu tür yönetilen kimlikler tarafından sağlanır ve doğrudan bir Azure kaynağına bağlanır. Bir Azure kaynağında yönetilen kimliği etkinleştirdiğinizde, bu kaynak için sistem tarafından atanan bir yönetilen kimlik alırsınız. Sistem tarafından atanan yönetilen kimlik, ilişkili Azure kaynağının yaşam döngüsüne bağlıdır. Kaynak silindiğinde Azure sizin için kimliği otomatik olarak siler. Tek yapmanız gereken kodunuzu barındıran Azure kaynağı için yönetilen kimliği etkinleştirmek olduğundan, bu yaklaşım en kolay yönetilen kimlik türüdür.
  • Kullanıcı tarafından atanan yönetilen kimlikler - Yönetilen kimliği tek başına Azure kaynağı olarak da oluşturabilirsiniz. Bu yaklaşım en sık çözümünüzde aynı kimliği ve aynı izinleri paylaşması gereken birden çok Azure kaynağı üzerinde çalışan birden çok iş yükü olduğunda kullanılır. Örneğin, çözümünüzde aynı Azure kaynakları kümesine erişmesi gereken birden çok App Service ve sanal makine örneğinde çalışan bileşenler varsa, bu kaynaklar arasında kullanılan kullanıcı tarafından atanan yönetilen kimlik mantıklıdır.

Bu makale, bir uygulama için sistem tarafından atanan yönetilen kimliği etkinleştirme ve kullanma adımlarını kapsar. Kullanıcı tarafından atanan yönetilen kimlik kullanmanız gerekiyorsa, kullanıcı tarafından atanan yönetilen kimliğin nasıl oluşturulacağını görmek için Kullanıcı tarafından atanan yönetilen kimlikleri yönetme makalesine bakın.

Uygulamayı barındıran Azure kaynağında yönetilen kimliği etkinleştirme

İlk adım, uygulamanızı barındıran Azure kaynağında yönetilen kimliği etkinleştirmektir. Örneğin, Azure App Service'i kullanarak bir Django uygulaması barındıracaksanız, uygulamanızı barındıran App Service web uygulaması için yönetilen kimliği etkinleştirmeniz gerekir. Uygulamanızı barındırmak için bir sanal makine kullanıyorsanız VM'nizin yönetilen kimliği kullanmasını sağlayabilirsiniz.

Yönetilen kimliğin Azure portalı veya Azure CLI kullanarak Bir Azure kaynağı için kullanılmasını etkinleştirebilirsiniz.

Azure CLI komutları Azure Cloud Shell'de veya Azure CLI yüklü bir iş istasyonunda çalıştırılabilir.

Bir Azure kaynağı için yönetilen kimliği etkinleştirmek için kullanılan Azure CLI komutları biçimindedir az <command-group> identity --resource-group <resource-group-name> --name <resource-name>. Popüler Azure hizmetleri için aşağıdaki komutlara bakın.

az webapp identity assign --resource-group <resource-group-name> --name <web-app-name>

Çıkış aşağıdaki gibi görünür.

{
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned",
  "userAssignedIdentities": null
}

principalId Değer, yönetilen kimliğin benzersiz kimliğidir. Sonraki adımda bu değerlere ihtiyaç duyacağınız için bu çıkışın bir kopyasını saklayın.

Yönetilen kimliğe roller atayın

Ardından, uygulamanızın hangi rollere (izinlere) ihtiyacı olduğunu belirlemeniz ve yönetilen kimliği Azure'daki bu rollere atamanız gerekir. Yönetilen kimliğe kaynak, kaynak grubu veya abonelik kapsamında roller atanabilir. Bu örnekte, çoğu uygulama tüm Azure kaynaklarını tek bir kaynak grubunda gruplandırdığından kaynak grubu kapsamında rollerin nasıl atandığı gösterilmektedir.

az role assignment create komutu yönetilen kimliğe rol atar. Atanan kişiye, 1. adımda kopyaladığınız principalId 'yi kullanın.

az role assignment create --assignee <managedIdentityprincipalId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 

Hizmet sorumlusuna atanabilecek rol adlarını almak için az role definition list komutunu kullanın.

az role definition list \
    --query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
    --output table

Örneğin, aaaaaaaa-bbbb-cccc-1111-222222222222 kimliğine sahip yönetilen kimliği ile, kimlik numarası olan abonelikteki aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e kaynak grubundaki tüm depolama hesaplarındaki Azure Depolama blob kapsayıcılarına ve verilerine okuma, yazma ve silme izni vermek için, uygulama hizmet sorumlusunu aşağıdaki komutu kullanarak Depolama Blobu Veri Katkıda Bulunanı rolüne atayabilirsiniz.

az role assignment create --assignee aaaaaaaa-bbbb-cccc-1111-222222222222 \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Azure CLI kullanarak kaynak veya abonelik düzeyinde izin atama hakkında bilgi için Azure CLI kullanarak Azure rolleri atama makalesine bakın.

Uygulamanızda DefaultAzureCredential'i devreye alın

Kodunuz Azure'da çalıştırıldığında ve yönetilen kimlik uygulamanızı barındıran Azure kaynağında etkinleştirildiğinde, DefaultAzureCredential aşağıdaki sırayla kullanılacak kimlik bilgilerini belirler:

  1. Hizmet sorumlusunun ortamını, AZURE_CLIENT_ID, AZURE_TENANT_ID ve AZURE_CLIENT_SECRET veya AZURE_CLIENT_CERTIFICATE_PATH ile (isteğe bağlı) AZURE_CLIENT_CERTIFICATE_PASSWORD ortam değişkenleri tarafından tanımlandığı şekilde kontrol edin.
  2. Kullanıcı tarafından atanan yönetilen kimlik için anahtar sözcük parametrelerini denetleyin. Kullanıcı tarafından atanan yönetilen kimliği, managed_identity_client_id parametresine istemci kimliğini belirterek geçirebilirsiniz.
  3. Kullanıcı tarafından atanan yönetilen kimliğin istemci kimliği için AZURE_CLIENT_ID ortam değişkenini kontrol edin.
  4. Azure kaynağında yönetilen kimlik etkinleştirildiyse sistem tarafından atanan yönetilen kimliği kullanın.

anahtar sözcük parametresini exclude_managed_identity_credentialayarlayarak yönetilen kimlikleri True kimlik bilgilerinin dışında tutabilirsiniz.

Bu makalede, Azure App Service web uygulaması için sistem tarafından atanan yönetilen kimlik kullanılır. Bu yaklaşımı kullanarak ortamda yönetilen kimlik yapılandırmasına veya bunu parametre olarak geçirme gerekliliğine ihtiyaç duymazsınız. Aşağıdaki adımlarda nasıl kullanılacağı gösterilmektedir DefaultAzureCredential.

İlk olarak paketi uygulamanıza ekleyin azure.identity .

pip install azure-identity

Ardından, uygulamanızda bir Azure SDK istemci nesnesi oluşturan tüm Python kodları için:

  1. DefaultAzureCredential sınıfını azure.identity modülünden içeri aktarın.
  2. Bir DefaultAzureCredential nesne oluşturun.
  3. DefaultAzureCredential Nesnesini Azure SDK istemci nesnesi oluşturucusna geçirin.

Aşağıdaki kod kesiminde bu adımlara bir örnek gösterilmiştir.

from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient

# Acquire a credential object
token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=token_credential)

Python için Azure SDK kimlik doğrulamasına genel bakış makalesinde açıklandığı gibi, DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında kullanılan kimlik doğrulama yöntemini belirler. Bu yaklaşımın avantajı, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda farklı kimlik doğrulama yöntemleri kullanabilmesidir. Yerel geliştirme sırasında iş istasyonunuzda yukarıdaki kod çalıştırıldığında, DefaultAzureCredential ortam ayarları tarafından belirlenen bir uygulama hizmet sorumlusu veya diğer Azure kaynaklarıyla kimlik doğrulaması yapmak için geliştirici aracı kimlik bilgilerini kullanır. Bu nedenle, hem yerel geliştirme sırasında hem de Azure'a dağıtıldığında uygulamanızın Kimliğini Azure kaynaklarına doğrulamak için aynı kod kullanılabilir.