Python için Azure SDK kitaplıklarında yetkilendirme

Azure'da yetkilendirme, kimliği doğrulanmış kullanıcıların veya hizmetlerin kaynaklarda gerçekleştirebileceği eylemleri belirler. Bu makalede, Python için Azure SDK'sını kullanarak modelleri, uygulamayı, sorun gidermeyi ve en iyi yöntemleri kapsayan yetkilendirmenin nasıl uygulanacakları açıklanır. Ayrıntılı kimlik doğrulaması kurulumu için Bkz. Azure'da Python uygulamalarının kimliğini doğrulama.

Giriş

Kimlik doğrulaması (AuthN), bir kullanıcı veya hizmetin kimliğini doğrularken yetkilendirme (AuthZ) yapabileceklerini tanımlar. Azure'da yetkilendirme, uygulamaları ve verileri korumak için kritik öneme sahip olan kaynaklara güvenli erişim sağlar. Geliştiriciler, kaynakları yönetmekten hizmete özgü verilere erişmeye kadar çeşitli iş akışlarında erişimi denetlemek için Python için Azure SDK ile güçlü yetkilendirme uygulayabilir.

Azure yetkilendirme modelleri

Azure, erişimi yönetmek için birden çok yetkilendirme mekanizması sağlar. Bu modellerin anlaşılması, etkin erişim denetimi için gereklidir.

Azure Role-Based Erişim Denetimi

Azure Role-Based Erişim Denetimi (RBAC), abonelikler veya kaynak grupları gibi kapsamlarda kimliklere roller atar. Yerleşik roller Sahip, Katkıda Bulunan ve Okuyucu rollerini içerirken, özel roller özel izinlere izin verir. Belirli bir kapsamda rol atadığınızda, kimlik (kullanıcı veya hizmet gibi) bu kapsamdaki tüm kaynaklar ve alt kapsamları için izinler alır. Örneğin, Katkıda Bulunan rolünü abonelik düzeyinde atamak, bu abonelikteki tüm kaynakların yönetilmesine olanak tanır. Bkz. Azure RBAC kapsamını anlama.

Hizmete özgü mekanizmalar

Bazı Azure hizmetleri benzersiz yetkilendirme yöntemleri sunar:

  • Azure Depolama: Veri erişimi için Paylaşılan Erişim İmzaları (SAS) ve Erişim Denetim Listeleri (ACL) kullanır. Bkz. Hizmete Özel Yetkilendirme Notları için Azure Depolama.
  • Azure Key Vault: RBAC'i eski erişim ilkeleri yerine önerir. Bkz. Azure Key Vault için Service-Specific Yetkilendirme Notları.
  • Microsoft Graph: OAuth 2.0 kapsamlarını ve uygulama izinlerini devreye alır. Bkz. Microsoft Graph için Hizmete Özel Yetkilendirme Notları.

Python için Azure SDK'da yetkilendirmeyi kullanma

Python için Azure SDK, paket aracılığıyla azure-identity kimlik doğrulaması ve yetkilendirmeyi işlemek için yerleşik destek sağlar. sınıfı DefaultAzureCredential , yönetilen kimlikler ve hizmet sorumluları gibi farklı ortamlara uyum sağlayan çeşitli kimlik doğrulama mekanizmalarını destekler.

Örnek: Kaynak gruplarını listeleme

Bu örnekte Python için Azure SDK'sının kimlik doğrulaması için kimlik bilgilerini (aracılığıyla DefaultAzureCredential) nasıl kullandığı ve kimlik doğrulamasının kimliğin kaynak gruplarını başarıyla listeleyip listeleyemeyeceğini nasıl belirlediği gösterilir. Kimlikte abonelik veya kaynak grubu kapsamında Okuyucu veya daha yüksek bir rol yoksa, bu çağrı 403 Yasak hatası döndürür.

from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient

credential = DefaultAzureCredential()
client = ResourceManagementClient(credential, "<subscription-id>")
resource_groups = client.resource_groups.list()
for rg in resource_groups:
    print(rg.name)

değerini, genellikle biçiminde <subscription-id>olan Azure abonelik kimliğiniz ile değiştirin00000000-0000-0000-0000-000000000000.

Microsoft Graph ve kapsamlar

Microsoft Graph'a erişmek için hem temsilci hem de uygulama izinlerini destekleyen resmi Python için Microsoft Graph SDK'sını kullanın.

Bu örnekte, SDK'nın gerekli yetkilendirme kapsamına https://graph.microsoft.com/.default sahip bir erişim belirteci istemek ve Microsoft Graph kaynaklarına erişmek için kimlik bilgilerini nasıl kullandığı gösterilmektedir. Kimlik, kullanıcı verilerini almak için uygun uygulama izinleriyle (örneğin User.Read.All) Microsoft Entra ID'de yetkilendirilmelidir; aksi takdirde istek 403 Forbidden ile başarısız olur.

Önemli

Uygulamanızın veya kimliğinizin User.Read.All Microsoft Entra Id'de verilen veya diğer gerekli izinlere sahip olduğundan emin olun.

from azure.identity import DefaultAzureCredential
from msgraph.core import GraphClient

credential = DefaultAzureCredential()
client = GraphClient(credential=credential, scopes=["https://graph.microsoft.com/.default"])

response = client.get("/users")
users = response.json().get("value", [])
for user in users:
    print(user["displayName"])

Resmi Microsoft Graph ile Python uygulamaları oluşturma öğreticisinde bu SDK hakkında daha fazla bilgi edinin.

Yetkilendirme hatalarını tanılama

Yetkilendirme sorunları genellikle yetersiz izinleri gösteren HTTP 403 Yasak hatalarına neden olur. Bu sorunları tanılamak için:

  • Hata iletilerini denetleme: Eksik izinlerle ilgili ayrıntılar için yanıtı gözden geçirin.

  • Günlüğü etkinleştirme: İstekleri ve yanıtları incelemek için Python günlüğe kaydetmeyi kullanın.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • Erişimi doğrulama: Rol atamalarını denetlemek için Azure CLI veya Azure portalını kullanın.

    az role assignment list --assignee <principal-id> --scope <scope>
    

    <principal-id> değerini kullanıcınızın, hizmet sorumlunuzun veya yönetilen kimliğinizin nesne kimliğiyle değiştirin. değerini abonelik kimliği, kaynak grubu adı veya kaynak gibi bir Azure kaynak kapsamıyla değiştirin <scope> . Bkz . Kapsamlarla çalışma.

Kapsamlarla çalışma

Genellikle aşağıdaki örnekte olduğu gibi bir kapsam sağlamanız gerekir:

az role assignment list \
    --assignee <principal-id> \
    --scope <scope>

Bazı yaygın kapsam biçimleri şunlardır:

Kapsam Düzeyi Örnek Değer
Subscription /subscriptions/<subscription-id>
Kaynak Grubu /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
Kaynak Adı /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name>

Örneğin, yönetilen kimliğin tüm rol atamalarını kaynak grubu düzeyinde listelemek için:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group

Veya abonelik düzeyinde:

az role assignment list \
  --assignee 12345678-90ab-cdef-1234-567890abcdef \
  --scope /subscriptions/<subscription-id>

Bir kullanıcının veya yönetilen kimliğin nesne kimliğini (<principal-id>) almak için şunu kullanın:

az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId

Erişimi yönet

Aşağıdakini kullanarak rol atamaları aracılığıyla erişimi yönetin:

  • Azure portalı: Erişim denetimi (IAM) hizmet menüsü aracılığıyla rol ekleyin.

  • Azure CLI:

    az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>
    

    <principal-id> değerini kullanıcınızın, hizmet sorumlunuzun veya yönetilen kimliğinizin nesne kimliğiyle değiştirin. değerini abonelik kimliği, kaynak grubu adı veya kaynak adı gibi bir Azure kaynak kapsamıyla değiştirin <scope> . Bkz . Kapsamlarla çalışma.

  • ARM Şablonları: Bildirim temelli yönetim için kullanın.

Yönetilen kimlikler için, sanal makineler gibi kaynaklarla ilişkili kimliğe roller atayın. Etkin izinleri doğrulamak için Azure portalının Erişimi denetle özelliğini veya Azure CLI kullanın.

Hizmete özgü yetkilendirme notları

Hizmete özgü mekanizmalar bölümünde, bazı Azure hizmetlerinin benzersiz yetkilendirme yöntemleri sunduğunu öğrendiniz. Bu bölümde, bahsedilen üç Azure hizmeti için daha fazla ayrıntı sağlanır.

Azure Depolama

  • RBAC: Denetim düzlemi işlemlerini yönetir.
  • SAS ve ACL'ler: Veri düzlemi erişimini kontrol edin, ayrıca Microsoft Entra kimlik doğrulaması da desteklenmektedir.

Örnek: Microsoft Entra Id ile bloblara erişme

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

credential = DefaultAzureCredential()
client = BlobServiceClient(account_url="https://<account-name>.blob.core.windows.net", credential=credential)
containers = client.list_containers()
for container in containers:
    print(container.name)

değerini Azure Depolama hesabınızın adıyla değiştirin <account-name> .

Azure Key Vault

Tutarlılık için eski erişim ilkeleri yerine RBAC kullanın. Erişim ilkeleri hala desteklenir ancak tercih edilmez.

Örnek: Gizli dizi alma

from azure.identity import DefaultAzureCredential
from azure.keyvault.secrets import SecretClient

credential = DefaultAzureCredential()
client = SecretClient(vault_url="https://<vault-name>.vault.azure.net", credential=credential)
secret = client.get_secret("my-secret")
print(secret.value)

"<vault-name>" etiketini Key Vault kaynak adınızla değiştirin.

Microsoft Grafiği

Temsilci izinleri için OAuth 2.0 kapsamlarını ve daemon uygulamaları için uygulama izinlerini kullanır. Önceki örnekte gösterildiği gibi kapsamları belirtin.

En iyi yöntemler

  • En düşük ayrıcalık: Katkıda Bulunan yerine Okuyucu gibi yalnızca gerekli izinleri atayın.
  • RBAC'yi tercih edin: Özellikle Key Vault için, birleşik erişim denetimi için.
  • Yönetilen Kimlikleri Kullanma: Kodda kimlik bilgilerini yönetmekten kaçının.
  • Graf izinlerini sınırla: Riskleri en aza indirmek için belirli kapsamlar isteyin.

Sonraki Adımlar