Autorisation dans les bibliothèques du Kit de développement logiciel (SDK) Azure pour Python

L’autorisation dans Azure détermine les actions que les utilisateurs ou services authentifiés peuvent effectuer sur les ressources. Cet article explique comment implémenter l’autorisation à l’aide du Kit de développement logiciel (SDK) Azure pour Python, couvrant les modèles, l’implémentation, la résolution des problèmes et les meilleures pratiques. Pour obtenir une configuration détaillée de l’authentification, reportez-vous à l’authentification des applications Python sur Azure.

Présentation

L’authentification (AuthN) vérifie l’identité d’un utilisateur ou d’un service, tandis que l’autorisation (AuthZ) définit ce qu’ils peuvent faire. Dans Azure, l’autorisation garantit un accès sécurisé aux ressources, critique pour la protection des applications et des données. Les développeurs peuvent implémenter une autorisation robuste avec le Kit de développement logiciel (SDK) Azure pour Python pour contrôler l’accès dans différents flux de travail, de la gestion des ressources à l’accès aux données spécifiques au service.

Modèles d’autorisation Azure

Azure fournit plusieurs mécanismes d’autorisation pour gérer l’accès. La compréhension de ces modèles est essentielle pour un contrôle d’accès efficace.

Contrôle d’accès basé sur les rôles Azure

Azure Role-Based Access Control (RBAC) attribue des rôles à des identités dans des étendues telles que des abonnements ou des groupes de ressources. Les rôles intégrés incluent propriétaire, contributeur et lecteur, tandis que les rôles personnalisés autorisent des autorisations personnalisées. Lorsque vous attribuez un rôle à une étendue spécifique, l’identité (comme un utilisateur ou un service) obtient des autorisations pour toutes les ressources dans cette étendue et ses sous-étendues. Par exemple, l’attribution du rôle Contributeur au niveau de l’abonnement permet la gestion de toutes les ressources de cet abonnement. Consultez Comprendre l’étendue du RBAC Azure.

Mécanismes spécifiques au service

Certains services Azure offrent des méthodes d’autorisation uniques :

  • Stockage Azure : utilise des signatures d’accès partagé (SAP) et des listes de contrôle d’accès (ACL) pour l’accès aux données. Consultez notes d’autorisation spécifiques au service pour stockage Azure.
  • Azure Key Vault : recommande RBAC sur les stratégies d’accès héritées. Consultez Service-Specific notes d’autorisation pour Azure Key Vault.
  • Microsoft Graph : utilise des étendues OAuth 2.0 et des autorisations d’application. Consultez Notes d’autorisation spécifiques au service pour Microsoft Graph.

Utiliser l’autorisation dans le Kit de développement logiciel (SDK) Azure pour Python

Le Kit de développement logiciel (SDK) Azure pour Python fournit une prise en charge intégrée de la gestion de l’authentification et de l’autorisation via le azure-identity package. La DefaultAzureCredential classe prend en charge différents mécanismes d’authentification, tels que les identités managées et les principaux de service, en s’adaptant à différents environnements.

Exemple : Répertorier les groupes de ressources

Cet exemple montre comment le Kit de développement logiciel (SDK) Azure pour Python utilise des informations d’identification (via DefaultAzureCredential) pour s’authentifier et comment l’autorisation détermine si l’identité peut répertorier correctement les groupes de ressources. Si l'identité ne dispose pas du rôle Lecteur ou d'un rôle supérieur sur l'étendue de l'abonnement ou du groupe de ressources, cet appel retourne une erreur 403 d'accès interdit.

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)

Remplacez <subscription-id> par votre ID d’abonnement Azure, généralement sous la forme .00000000-0000-0000-0000-000000000000

Microsoft Graph avec des étendues

Pour accéder à Microsoft Graph, utilisez le Kit de développement logiciel (SDK) Microsoft Graph officiel pour Python, qui prend en charge les autorisations déléguées et d’application.

Cet exemple montre comment le Kit de développement logiciel (SDK) utilise des informations d’identification pour demander un jeton d’accès avec l’étendue https://graph.microsoft.com/.default d’autorisation requise et accéder aux ressources Microsoft Graph. L’identité doit être autorisée dans Microsoft Entra ID avec les autorisations d’application appropriées (par exemple User.Read.All) pour récupérer les données utilisateur ; sinon, la demande échoue avec une autorisation 403 Interdit.

Important

Assurez-vous que votre application ou identité dispose de l'autorisation User.Read.All ou d'autres autorisations requises octroyées dans l'ID Microsoft Entra.

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

En savoir plus sur ce SDK dans le didacticiel Build Python officiel avec Microsoft Graph .

Diagnostiquer les erreurs d’autorisation

Les problèmes d’autorisation provoquent souvent des erreurs HTTP 403 Interdits, ce qui indique des autorisations insuffisantes. Pour diagnostiquer ces problèmes :

  • Vérifier les messages d’erreur : passez en revue la réponse pour plus d’informations sur les autorisations manquantes.

  • Activer la journalisation : utilisez Python journalisation pour inspecter les demandes et les réponses.

    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • Vérifier l’accès : utilisez Azure CLI ou le portail Azure pour vérifier les attributions de rôles.

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

    Remplacez <principal-id> par l’ID d’objet de votre utilisateur, de votre principal de service ou de votre identité managée. Remplacez <scope> par une étendue de ressource Azure, telle qu’un ID d’abonnement, un nom de groupe de ressources ou une ressource. Voir Utiliser des étendues.

Utiliser des étendues

Souvent, vous devez fournir une étendue, comme dans l’exemple suivant :

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

Voici quelques formats d’étendue courants :

Niveau d’étendue Exemple de valeur
Subscription /subscriptions/<subscription-id>
Groupe de ressources /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>
Nom de la ressource /subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/<provider-namespace>/<resource-type>/<resource-name>

Par exemple, pour répertorier toutes les attributions de rôles pour une identité managée au niveau du groupe de ressources :

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

Ou au niveau de l’abonnement :

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

Pour récupérer l’ID d’objet (<principal-id>) d’un utilisateur ou d’une identité managée, utilisez :

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

Gérer l’accès

Gérez l’accès via les attributions de rôles à l’aide de :

  • Azure portail : ajoutez des rôles via le menu de service contrôle d’accès (IAM).

  • Azure CLI :

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

    Remplacez <principal-id> par l’ID d’objet de votre utilisateur, de votre principal de service ou de votre identité managée. Remplacez <scope> par une étendue de ressource Azure, telle qu’un ID d’abonnement, un nom de groupe de ressources ou un nom de ressource. Voir Utiliser des étendues.

  • Modèles ARM : Utilisation pour la gestion déclarative.

Pour les identités managées, attribuez des rôles à l’identité associée aux ressources telles que les machines virtuelles. Utilisez la fonctionnalité Vérifier l'accès au portail Azure ou la Azure CLI pour vérifier les autorisations effectives.

Notes d’autorisation spécifiques au service

Dans la section Mécanismes spécifiques au service, vous avez appris que certains services Azure offrent des méthodes d’autorisation uniques. Cette section fournit plus de détails pour chacun des trois services Azure mentionnés.

stockage Azure

  • RBAC : gère les opérations du plan de contrôle.
  • SAP et ACL : Contrôler l’accès au plan de données, avec l’authentification Microsoft Entra également prise en charge.

Exemple : Accéder aux objets blob avec l’ID Microsoft Entra

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)

Remplacez par <account-name> le nom de votre compte stockage Azure.

Azure Key Vault

Utilisez RBAC au lieu des stratégies d’accès héritées pour la cohérence. Les stratégies d’accès sont toujours prises en charge, mais pas par défaut.

Exemple : Récupérer un secret

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)

Remplacez par <vault-name> le nom de votre ressource Key Vault.

Microsoft Graph

Utilise des étendues OAuth 2.0 pour les autorisations déléguées et les autorisations d’application pour les applications démon. Spécifiez des étendues comme indiqué dans l’exemple précédent.

Meilleures pratiques

  • Privilège minimum : Attribuez uniquement les autorisations nécessaires, telles que Lecteur au lieu de Contributeur.
  • Préférer RBAC : en particulier pour Key Vault, pour le contrôle d’accès unifié.
  • Utilisez des identités managées : évitez de gérer les informations d’identification dans le code.
  • Limiter les autorisations Graph : demander des étendues spécifiques pour réduire les risques.

Étapes suivantes