Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Autorisierung in Azure bestimmt, welche Aktionen authentifizierte Benutzer oder Dienste für Ressourcen ausführen können. In diesem Artikel wird beschrieben, wie Sie die Autorisierung mithilfe des Azure SDK für Python implementieren, modelle, Implementierung, Problembehandlung und bewährte Methoden abdecken. Ausführliches Authentifizierungssetup finden Sie unter Authentifizieren von Python-Apps bei Azure.
Einleitung
Die Authentifizierung (AuthN) überprüft die Identität eines Benutzers oder Diensts, während die Autorisierung (AuthZ) definiert, was sie tun können. In Azure stellt die Autorisierung sicheren Zugriff auf Ressourcen sicher, entscheidend für den Schutz von Anwendungen und Daten. Entwickler können eine robuste Autorisierung mit dem Azure SDK für Python implementieren, um den Zugriff in verschiedenen Workflows zu steuern, von der Verwaltung von Ressourcen bis hin zum Zugriff auf dienstspezifische Daten.
Azure-Autorisierungsmodelle
Azure bietet mehrere Autorisierungsmechanismen zum Verwalten des Zugriffs. Das Verständnis dieser Modelle ist für eine effektive Zugriffssteuerung unerlässlich.
Azure Rollenbasierte Zugriffssteuerung
Azure Role-Based Access Control (RBAC) weist Identitäten in Bereichen wie Abonnements oder Ressourcengruppen Rollen zu. Integrierte Rollen umfassen Besitzer, Mitwirkender und Leser, während benutzerdefinierte Rollen maßgeschneiderte Berechtigungen zulassen. Wenn Sie eine Rolle in einem bestimmten Bereich zuweisen, erhält die Identität (z. B. ein Benutzer oder Dienst) Berechtigungen für alle Ressourcen innerhalb dieses Bereichs und seiner untergeordneten Bereiche. Beispielsweise ermöglicht das Zuweisen der Rolle "Mitwirkender" auf Abonnementebene die Verwaltung aller Ressourcen in diesem Abonnement. Siehe "Grundlegendes zum Umfang von Azure RBAC".
Dienstspezifische Mechanismen
Einige Azure-Dienste bieten eindeutige Autorisierungsmethoden:
- Azure Storage: Verwendet Shared Access Signatures (SAS) und Zugriffssteuerungslisten (Access Control Lists, ACLs) für den Datenzugriff. Siehe Service-Specific Autorisierungshinweise für Azure Storage.
- Azure Key Vault: Empfiehlt RBAC gegenüber älteren Zugriffsrichtlinien. Siehe Service-Specific Autorisierungsnotizen für Azure Key Vault.
- Microsoft Graph: Verwendet OAuth 2.0-Bereiche und Anwendungsberechtigungen. Siehe Service-Specific Autorisierungshinweise für Microsoft Graph.
Verwenden der Autorisierung im Azure SDK für Python
Das Azure SDK für Python bietet integrierte Unterstützung für die Behandlung von Authentifizierung und Autorisierung über das azure-identity Paket. Die DefaultAzureCredential Klasse unterstützt verschiedene Authentifizierungsmechanismen, z. B. verwaltete Identitäten und Dienstprinzipale, die sich an verschiedene Umgebungen anpassen.
Beispiel: Ressourcengruppen auflisten
In diesem Beispiel wird gezeigt, wie das Azure SDK für Python eine Anmeldeinformationen (via DefaultAzureCredential) zur Authentifizierung verwendet und wie die Autorisierung bestimmt, ob die Identität Ressourcengruppen erfolgreich auflisten kann. Wenn für die Identität die Rolle "Leser" oder eine höhere Rolle im Abonnement- oder Ressourcengruppenbereich fehlt, gibt dieser Aufruf den Fehler "403 Verboten" zurück.
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)
Ersetzen Sie <subscription-id> durch Ihre Azure-Abonnement-ID, die in der Regel im Format von 00000000-0000-0000-0000-000000000000 ist.
Microsoft Graph mit Bereichen
Um auf Microsoft Graph zuzugreifen, verwenden Sie das offizielle Microsoft Graph SDK für Python, das delegierte und Anwendungsberechtigungen unterstützt.
In diesem Beispiel wird veranschaulicht, wie das SDK eine Anmeldeinformation verwendet, um ein Zugriffstoken mit dem erforderlichen Autorisierungsbereich https://graph.microsoft.com/.default anzufordern und auf Microsoft Graph-Ressourcen zuzugreifen. Die Identität muss in Microsoft Entra ID mit den entsprechenden Anwendungsberechtigungen (z. B. User.Read.All) autorisiert werden, um Benutzerdaten abzurufen. Andernfalls schlägt die Anforderung mit einem 403 Forbidden fehl.
Von Bedeutung
Stellen Sie sicher, dass Ihrer App oder Identität die User.Read.All oder andere erforderliche Berechtigungen in Microsoft Entra ID erteilt wurden.
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"])
Erfahren Sie mehr über dieses SDK im offiziellen Build Python-Apps mit Microsoft Graph-Tutorial.
Diagnostizieren von Autorisierungsfehlern
Autorisierungsprobleme verursachen häufig HTTP 403 Verbotene Fehler, die auf unzureichende Berechtigungen hinweisen. So diagnostizieren Sie diese Probleme:
Überprüfen Sie Fehlermeldungen: Überprüfen Sie die Antwort auf Details zu fehlenden Berechtigungen.
Protokollierung aktivieren: Verwenden Sie Python Protokollierung, um Anforderungen und Antworten zu prüfen.
import logging logging.basicConfig(level=logging.DEBUG)Überprüfen Sie den Zugriff: Verwenden Sie Azure CLI oder das Azure Portal, um Rollenzuweisungen zu überprüfen.
az role assignment list --assignee <principal-id> --scope <scope>Ersetzen Sie
<principal-id>mit der Objekt-ID Ihres Benutzers, Dienstprinzipals oder der verwalteten Identität. Ersetzen Sie<scope>durch einen Azure-Ressourcenbereich, wie z. B. eine Abonnement-ID, einen Ressourcengruppennamen oder eine Ressource. Siehe Arbeiten mit Bereichen.
Arbeiten mit Bereichen
Häufig müssen Sie einen Bereich angeben, z. B. im folgenden Beispiel:
az role assignment list \
--assignee <principal-id> \
--scope <scope>
Hier sind einige gängige Bereichsformate:
| Bereichsebene | Beispielwert |
|---|---|
| Subscription | /subscriptions/<subscription-id> |
| Ressourcengruppe | /subscriptions/<subscription-id>/resourceGroups/<resource-group-name> |
| Ressourcenname | /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name> |
So können Sie beispielsweise alle Rollenzuweisungen für eine verwaltete Identität auf Ressourcengruppenebene auflisten:
az role assignment list \
--assignee 12345678-90ab-cdef-1234-567890abcdef \
--scope /subscriptions/<subscription-id>/resourceGroups/my-resource-group
Oder auf Abonnementebene:
az role assignment list \
--assignee 12345678-90ab-cdef-1234-567890abcdef \
--scope /subscriptions/<subscription-id>
Um die Objekt-ID (<principal-id>) eines Benutzers oder einer verwalteten Identität abzurufen, verwenden Sie Folgendes:
az ad user show --id <user-email> --query id
az identity show --name <identity-name> --resource-group <rg-name> --query principalId
Verwalten des Zugriffs
Verwalten des Zugriffs über Rollenzuweisungen mithilfe von:
Azure Portal: Hinzufügen von Rollen über das Zugriffssteuerungsmenü (IAM)
Azure CLI:
az role assignment create --assignee <principal-id> --role <role-name> --scope <scope>Ersetzen Sie
<principal-id>mit der Objekt-ID Ihres Benutzers, Dienstprinzipals oder der verwalteten Identität. Ersetzen Sie<scope>durch einen Azure-Ressourcenbereich, wie z. B. eine Abonnement-ID, einen Ressourcengruppennamen oder einen Ressourcennamen. Siehe Arbeiten mit Bereichen.ARM-Vorlagen: Wird für die deklarative Verwaltung verwendet.
Weisen Sie bei verwalteten Identitäten der Identität, die Ressourcen wie virtuellen Computern zugeordnet ist, Rollen zu. Verwenden Sie das Feature "Zugriff überprüfen" des Azure Portals oder die Azure CLI, um effektive Berechtigungen zu überprüfen.
Dienstspezifische Autorisierungsnotizen
Im Abschnitt "Dienstspezifische Mechanismen" haben Sie gelernt, dass einige Azure Dienste eindeutige Autorisierungsmethoden bieten. Dieser Abschnitt enthält weitere Details für jeden der drei erwähnten Azure-Dienste.
Azure Storage
- RBAC: Verwaltet Steuerungsebenenvorgänge.
- SAS und ACLs: Steuern des Datenebenenzugriffs, wobei die Microsoft Entra-Authentifizierung ebenfalls unterstützt wird.
Beispiel: Zugreifen auf Blobs mit 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)
Ersetzen Sie den <account-name> Namen Ihres Azure Storage-Kontos.
Azure Key Vault (ein Dienst zur sicheren Verwaltung kryptografischer Schlüssel)
Verwenden Sie RBAC anstelle von Legacyzugriffsrichtlinien zur Konsistenz. Zugriffsrichtlinien werden weiterhin unterstützt, aber nicht bevorzugt.
Beispiel: Abrufen eines Geheimnisses
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)
Ersetzen Sie <vault-name> durch den Namen Ihrer Key Vault-Ressource.
Microsoft Graph
Verwendet OAuth 2.0-Bereiche für delegierte Berechtigungen und Anwendungsberechtigungen für Daemon-Apps. Geben Sie Bereiche an, wie im vorherigen Beispiel gezeigt.
Bewährte Methoden
- Geringste Berechtigung: Weisen Sie nur erforderliche Berechtigungen zu, z. B. "Reader" anstelle von "Mitwirkender".
- Bevorzugen Sie RBAC: Insbesondere für Key Vault, für einheitliche Zugriffssteuerung.
- Verwaltete Identitäten verwenden: Vermeiden Sie die Verwaltung von Anmeldeinformationen im Code.
- Einschränken von Graph-Berechtigungen: Fordern Sie bestimmte Bereiche an, um Risiken zu minimieren.