Autoryzacja w bibliotekach zestawu Azure SDK dla języka Python

Autoryzacja na platformie Azure określa, jakie akcje mogą wykonywać uwierzytelnieni użytkownicy lub usługi w zasobach. W tym artykule opisano sposób implementowania autoryzacji przy użyciu zestawu Azure SDK dla języka Python, obejmującego modele, implementację, rozwiązywanie problemów i najlepsze rozwiązania. Aby uzyskać szczegółową konfigurację uwierzytelniania, zobacz Uwierzytelnianie aplikacji języka Python na platformie Azure.

Wprowadzenie

Uwierzytelnianie (AuthN) weryfikuje tożsamość użytkownika lub usługi, a autoryzacja (AuthZ) definiuje, co może zrobić. Na platformie Azure autoryzacja zapewnia bezpieczny dostęp do zasobów, krytyczny dla ochrony aplikacji i danych. Deweloperzy mogą implementować niezawodną autoryzację za pomocą zestawu Azure SDK dla języka Python, aby kontrolować dostęp w różnych przepływach pracy, od zarządzania zasobami po uzyskiwanie dostępu do danych specyficznych dla usługi.

Modele autoryzacji platformy Azure

Platforma Azure udostępnia wiele mechanizmów autoryzacji do zarządzania dostępem. Zrozumienie tych modeli jest niezbędne do efektywnej kontroli dostępu.

Kontrola dostępu w usłudze Azure Role-Based

Usługa Azure Role-Based Access Control (RBAC) przypisuje role do tożsamości w zakresach, takich jak subskrypcje lub grupy zasobów. Role wbudowane obejmują role Właściciel, Współautor i Czytelnik, a role niestandardowe zezwalają na dostosowane uprawnienia. Po przypisaniu roli w określonym zakresie tożsamość (na przykład użytkownik lub usługa) uzyskuje uprawnienia dla wszystkich zasobów w tym zakresie i jego zakresach podrzędnych. Na przykład przypisanie roli Współautor na poziomie subskrypcji umożliwia zarządzanie wszystkimi zasobami w tej subskrypcji. Zobacz Omówienie zakresu Azure RBAC.

Mechanizmy specyficzne dla usługi

Niektóre usługi platformy Azure oferują unikatowe metody autoryzacji:

  • Azure Storage: używa sygnatur dostępu współdzielonego (SAS) i list kontroli dostępu (ACL) na potrzeby dostępu do danych. ZobaczService-Specific Authorization Notes for Azure Storage ( Uwagi dotyczące autoryzacji dla usługi Azure Storage).
  • Azure Key Vault: zaleca kontrolę dostępu opartą na rolach za pośrednictwem starszych zasad dostępu. Zobacz Uwagi dotyczące autoryzacji specyficzne dla usługi dla Azure Key Vault.
  • Microsoft Graph: stosuje zakresy protokołu OAuth 2.0 i uprawnienia aplikacji. Zobacz Uwagi dotyczące autoryzacji specyficzne dla usługiMicrosoft Graph.

Używanie autoryzacji w zestawie Azure SDK dla języka Python

Zestaw Azure SDK dla języka Python zapewnia wbudowaną obsługę obsługi uwierzytelniania i autoryzacji za pośrednictwem azure-identity pakietu. Klasa DefaultAzureCredential obsługuje różne mechanizmy uwierzytelniania, takie jak tożsamości zarządzane i zasady usługi, które mogą być dostosowane do różnych środowisk.

Przykład: Wyświetlanie listy grup zasobów

W tym przykładzie pokazano, jak zestaw Azure SDK dla języka Python używa poświadczeń (za pośrednictwem DefaultAzureCredential) do uwierzytelniania i jak autoryzacja określa, czy tożsamość może pomyślnie wyświetlić listę grup zasobów. Jeśli tożsamość nie ma roli Czytelnika lub wyższej w zakresie subskrypcji lub grupy zasobów, to wywołanie zwraca błąd 403 Forbidden.

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)

Zastąp <subscription-id> identyfikatorem subskrypcji platformy Azure, który jest zwykle w postaci 00000000-0000-0000-0000-000000000000.

Microsoft Graph z zakresami

Aby uzyskać dostęp do programu Microsoft Graph, użyj oficjalnego zestawu Microsoft Graph SDK dla języka Python, który obsługuje zarówno uprawnienia delegowane, jak i uprawnienia aplikacji.

W tym przykładzie pokazano, jak zestaw SDK używa poświadczeń do żądania tokenu dostępu z wymaganym zakresem https://graph.microsoft.com/.default autoryzacji i uzyskiwaniem dostępu do zasobów programu Microsoft Graph. Tożsamość musi być autoryzowana w identyfikatorze Entra firmy Microsoft z odpowiednimi uprawnieniami aplikacji (takimi jak User.Read.All) w celu pobrania danych użytkownika. W przeciwnym razie żądanie kończy się niepowodzeniem z błędem 403 Zabronione.

Ważne

Upewnij się, że aplikacja lub tożsamość ma User.Read.All lub inne wymagane uprawnienia przyznane w identyfikatorze Entra firmy Microsoft.

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"])

Dowiedz się więcej o tym zestawie SDK w oficjalnym samouczku Tworzenie aplikacji języka Python za pomocą programu Microsoft Graph .

Diagnozowanie błędów autoryzacji

Problemy z autoryzacją często powodują błędy HTTP 403 Zabronione, które wskazują na niewystarczające uprawnienia. Aby zdiagnozować te problemy:

  • Sprawdź komunikaty o błędach: Przejrzyj odpowiedź, aby uzyskać szczegółowe informacje na temat brakujących uprawnień.

  • Włącz rejestrowanie: użyj rejestrowania Python, aby sprawdzić żądania i odpowiedzi.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • Weryfikowanie dostępu: użyj Azure CLI lub portalu Azure, aby sprawdzić przypisania ról.

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

    Zastąp <principal-id> za pomocą identyfikatora obiektu użytkownika, jednostki usługi, lub tożsamości zarządzanej. Zastąp <scope> ciąg zakresem zasobów platformy Azure, takim jak identyfikator subskrypcji, nazwa grupy zasobów lub zasób. Zobacz Praca z zakresami.

Praca z zakresami

Często musisz podać zakres, na przykład w poniższym przykładzie:

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

Oto kilka typowych formatów zakresu:

Poziom zakresu Przykładowa wartość
Subscription /subscriptions/<subscription-id>
Grupa zasobów /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
Nazwa zasobu /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name>

Aby na przykład wyświetlić listę wszystkich przypisań ról dla tożsamości zarządzanej na poziomie grupy zasobów:

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

Lub na poziomie subskrypcji:

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

Aby pobrać identyfikator obiektu (<principal-id>) użytkownika lub tożsamości zarządzanej, użyj:

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

Zarządzaj dostępem

Zarządzanie dostępem za pomocą przypisań ról przy użyciu:

  • Portal Azure: Dodaj role za pomocą menu usługi Kontrola dostępu (IAM).

  • Interfejs wiersza polecenia platformy Azure:

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

    Zastąp <principal-id> za pomocą identyfikatora obiektu użytkownika, jednostki usługi, lub tożsamości zarządzanej. Zastąp <scope> zakresem zasobów platformy Azure, takim jak identyfikator subskrypcji, nazwa grupy lub zasobu. Zobacz Praca z zakresami.

  • Szablony ARM: służą do deklaratywnego zarządzania.

W przypadku tożsamości zarządzanych przypisz role do tożsamości skojarzonej z zasobami, takimi jak maszyny wirtualne. Użyj funkcji Sprawdź dostęp w portalu Azure lub Azure CLI, aby zweryfikować skuteczne uprawnienia.

Uwagi dotyczące autoryzacji specyficzne dla usługi

W sekcji Mechanizmy specyficzne dla usługi przedstawiono, że niektóre usługi Azure oferują unikatowe metody autoryzacji. Ta sekcja zawiera więcej szczegółów dla każdej z trzech wymienionych usług platformy Azure.

Azure Storage

  • RBAC: zarządza operacjami w płaszczyźnie sterowania.
  • SAS i listy ACL: kontrola dostępu do płaszczyzny danych, z równoczesną obsługą uwierzytelniania przez Microsoft Entra.

Przykład: uzyskiwanie dostępu do obiektów blob przy użyciu Microsoft Entra ID

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)

Zastąp <account-name> ciąg nazwą konta usługi Azure Storage.

Azure Key Vault

Użyj mechanizmu RBAC zamiast starszych zasad kontroli dostępu dla zachowania spójności. Zasady dostępu są nadal obsługiwane, ale nie są preferowane.

Przykład: pobierz sekret

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)

Zastąp <vault-name> nazwą zasobu Key Vault.

Microsoft Graph

Używa zakresów OAuth 2.0 dla delegowanych uprawnień i uprawnień aplikacji dla aplikacji demona. Określ zakresy, jak pokazano we wcześniejszym przykładzie.

Najlepsze rozwiązania

  • Najniższy poziom uprawnień: przypisz tylko niezbędne uprawnienia, takie jak Czytelnik zamiast Współautor.
  • Preferuj RBAC: szczególnie w przypadku usługi Key Vault dla ujednolicenia kontroli dostępu.
  • Użyj tożsamości zarządzanych: unikaj zarządzania poświadczeniami w kodzie.
  • Ogranicz uprawnienia programu Graph: żądaj określonych zakresów, aby zminimalizować ryzyko.

Dalsze kroki