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ğlanmasına izin verilen 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.

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 olduğu 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.

1 - 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 Uygulaması Hizmeti'ni kullanarak bir Django uygulaması barındırılıyorsa, 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 belirli komutlar aşağıda gösterilmiştir.

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

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

{
  "principalId": "99999999-9999-9999-9999-999999999999",
  "tenantId": "33333333-3333-3333-3333-333333333333",
  "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.

2 - Yönetilen kimliğe rol atama

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.

Azure'da az role assignment create komutu kullanılarak yönetilen kimliğe bir rol atanır. Atanan için, 1. adımda kopyaladığınız öğesini kullanın principalId .

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

Hizmet sorumlusunun atanabileceği 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, kimliği olan abonelikteki msdocs-python-sdk-auth-example kaynak grubundaki tüm depolama hesaplarındaki Azure Depolama blob kapsayıcılarına ve verilerine okuma, yazma ve silme kimliğine 99999999-9999-9999-9999-999999999999 sahip 11111111-1111-1111-1111-111111111111yönetilen kimliğe izin vermek için aşağıdaki komutu kullanarak uygulama hizmet sorumlusunu Depolama Blob Veri Katkıda Bulunanı rolüne atayabilirsiniz.

az role assignment create --assignee 99999999-9999-9999-9999-999999999999 \
    --scope /subscriptions/11111111-1111-1111-1111-111111111111/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.

3 - Uygulamanızda DefaultAzureCredential uygulama

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

  1. , ve AZURE_CLIENT_SECRET veya veya AZURE_CLIENT_CERTIFICATE_PATH (isteğe bağlı) AZURE_CLIENT_CERTIFICATE_PASSWORDortam değişkenleri AZURE_CLIENT_IDAZURE_TENANT_IDtarafından tanımlanan hizmet sorumlusunun ortamını denetleyin.
  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 parametresinde managed_identity_client_id istemci kimliğini belirterek geçirebilirsiniz.
  3. AZURE_CLIENT_ID Kullanıcı tarafından atanan yönetilen kimliğin istemci kimliği için ortam değişkenini denetleyin.
  4. Azure kaynağı etkinse sistem tarafından atanan yönetilen kimliği kullanın.

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

Bu makalede, bir Azure Uygulaması Hizmeti web uygulaması için sistem tarafından atanan yönetilen kimliği kullanıyoruz, bu nedenle ortamda yönetilen kimlik yapılandırmamız veya bunu parametre olarak geçirmemiz gerekmez. 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 şunları yapmak istersiniz:

  1. sınıfını DefaultAzureCredential modülden içeri aktarın azure.identity .
  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 bilgileri kullanılı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.