Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.