Authentifier des applications Python auprès des services Azure pendant le développement local à l’aide de comptes de développeur

Lorsque les développeurs créent des applications cloud, ils déboguent et testent généralement des applications sur leur station de travail locale. Lorsqu’une application est exécutée sur la station de travail d’un développeur pendant le développement local, elle doit toujours s’authentifier auprès des services Azure utilisés par l’application. Cet article explique comment utiliser les informations d’identification Azure d’un développeur pour authentifier l’application auprès d’Azure pendant le développement local.

Diagramme montrant comment une application Python pendant le développement local utilise les informations d’identification des développeurs pour se connecter à Azure en obtenant ces informations d’identification à partir d’outils de développement installés localement.

Pour qu’une application s’authentifie auprès d’Azure pendant le développement local à l’aide des informations d’identification Azure du développeur, un développeur doit être connecté à Azure à partir d’Azure CLI, d’Azure PowerShell ou d’Azure Developer CLI. Le Kit de développement logiciel (SDK) Azure pour Python est en mesure de détecter que le développeur est connecté à partir de l’un de ces outils, puis d’obtenir les informations d’identification nécessaires à partir du cache d’informations d’identification pour authentifier l’application auprès d’Azure en tant qu’utilisateur connecté.

Cette approche est plus simple à configurer pour une équipe de développement, car elle tire parti des comptes Azure existants des développeurs. Toutefois, le compte d’un développeur aura probablement plus d’autorisations que celles requises par l’application, dépassant les autorisations que l’application exécutera en production. En guise d’alternative, vous pouvez créer des principaux de service d’application à utiliser pendant le développement local, qui peuvent être limités pour avoir uniquement l’accès nécessaire par l’application.

1 - Créer un groupe de sécurité Microsoft Entra pour le développement local

Étant donné qu’il existe presque toujours plusieurs développeurs qui travaillent sur une application, il est recommandé de créer d’abord un groupe de sécurité Microsoft Entra pour encapsuler les rôles (autorisations) dont l’application a besoin dans le développement local. Cette approche offre les avantages suivants.

  • Chaque développeur est assuré d’avoir les mêmes rôles attribués, car les rôles sont attribués au niveau du groupe.
  • Si un nouveau rôle est nécessaire pour l’application, il doit uniquement être ajouté au groupe Microsoft Entra pour l’application.
  • Si un nouveau développeur rejoint l’équipe, il doit simplement être ajouté au groupe Microsoft Entra approprié pour obtenir les autorisations appropriées pour travailler sur l’application.

Si vous disposez d’un groupe de sécurité Microsoft Entra existant pour votre équipe de développement, vous pouvez utiliser ce groupe. Sinon, effectuez les étapes suivantes pour créer un groupe de sécurité Microsoft Entra.

La commande az ad group create est utilisée pour créer des groupes dans l’ID Microsoft Entra. Les paramètres --display-name et --main-nickname sont obligatoires. Le nom donné au groupe doit être basé sur le nom de l’application. Il est également utile d’inclure une expression telle que « local-dev » dans le nom du groupe pour indiquer l’objectif du groupe.

az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"

Copiez la valeur de la id propriété dans la sortie de la commande. Il s’agit de l’ID d’objet du groupe. Vous en avez besoin dans les étapes ultérieures. Vous pouvez également utiliser la commande az ad group show pour récupérer cette propriété.

Pour ajouter des membres au groupe, vous avez besoin de l’ID d’objet de l’utilisateur Azure. Utilisez la liste az ad user pour répertorier les principaux de service disponibles. La --filter commande de paramètre accepte les filtres de style OData et peut être utilisée pour filtrer la liste sur le nom d’affichage de l’utilisateur, comme indiqué. Le --query paramètre limite la sortie aux colonnes d’intérêt.

az ad user list \
    --filter "startswith(displayName, 'Bob')" \
    --query "[].{objectId:id, displayName:displayName}" \
    --output table

La commande az ad group member add peut ensuite être utilisée pour ajouter des membres à des groupes.

az ad group member add \
    --group <group-name> \
    --member-id <object-id>

Remarque

Par défaut, la création de groupes de sécurité Microsoft Entra est limitée à certains rôles privilégiés dans un répertoire. Si vous ne parvenez pas à créer un groupe, contactez un administrateur pour votre annuaire. Si vous ne parvenez pas à ajouter des membres à un groupe existant, contactez le propriétaire du groupe ou un administrateur d’annuaire. Pour plus d’informations, consultez Gérer les groupes Microsoft Entra et l’appartenance aux groupes.

2 - Attribuer des rôles au groupe Microsoft Entra

Ensuite, vous devez déterminer les rôles (autorisations) dont votre application a besoin sur les ressources et affecter ces rôles à votre application. Dans cet exemple, les rôles seront affectés au groupe Microsoft Entra créé à l’étape 1. Les rôles peuvent être attribués à une ressource, un groupe de ressources ou une étendue d’abonnement. Cet exemple montre comment attribuer des rôles à l’étendue du groupe de ressources, car la plupart des applications regroupent toutes leurs ressources Azure dans un seul groupe de ressources.

Un utilisateur, un groupe ou un principal de service d’application est affecté à un rôle dans Azure à l’aide de la commande az role assignment create . Vous pouvez spécifier un groupe avec son ID d’objet.

az role assignment create --assignee {objectId} \
    --scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
    --role "{roleName}" 

Pour obtenir les noms de rôles qui peuvent être attribués, utilisez la commande az role definition list .

az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Par exemple, pour autoriser les membres d’un groupe avec un ID d’objet de 00000000-0000-0000-0000-000000000000 lecture, d’écriture et de suppression à accéder à Stockage Azure conteneurs d’objets blob et aux données dans tous les comptes de stockage du groupe de ressources msdocs-python-sdk-auth-example dans l’abonnement avec l’ID11111111-1111-1111-1111-111111111111, vous devez affecter le rôle contributeur de données blob Stockage au groupe à l’aide de la commande suivante.

az role assignment create --assignee 00000000-0000-0000-0000-000000000000 \
    --scope /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"

Pour plus d’informations sur l’attribution d’autorisations au niveau de la ressource ou de l’abonnement à l’aide d’Azure CLI, consultez l’article Attribuer des rôles Azure à l’aide d’Azure CLI.

3 - Se connecter à Azure à l’aide d’Azure CLI, d’Azure PowerShell, d’Azure Developer CLI ou d’un navigateur

Ouvrez un terminal sur votre station de travail de développeur et connectez-vous à Azure à partir d’Azure CLI.

az login

4 - Implémenter DefaultAzureCredential dans votre application

Pour authentifier les objets clients du Kit de développement logiciel (SDK) Azure sur Azure, votre application doit utiliser la DefaultAzureCredential classe à partir du azure.identity package. Dans ce scénario, DefaultAzureCredential case activée séquentiellement pour voir si le développeur s’est connecté à Azure à l’aide d’Azure CLI, d’Azure PowerShell ou d’Azure Developer CLI. Si le développeur est connecté à Azure à l’aide de l’un de ces outils, les informations d’identification utilisées pour se connecter à l’outil seront utilisées par l’application pour s’authentifier auprès d’Azure.

Commencez par ajouter le package azure.identity à votre application.

pip install azure-identity

Ensuite, pour tout code Python qui crée un objet client du Kit de développement logiciel (SDK) Azure dans votre application, vous devez :

  1. Importez la DefaultAzureCredential classe à partir du azure.identity module.
  2. Créez un objet DefaultAzureCredential.
  3. Transmettez l’objet DefaultAzureCredential au constructeur d’objet client du Kit de développement logiciel (SDK) Azure.

Un exemple de ces étapes est illustré dans le segment de code suivant.

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

# Acquire a credential object
token_credential = DefaultAzureCredential()

blob_service_client = BlobServiceClient(
        account_url="https://<my_account_name>.blob.core.windows.net",
        credential=token_credential)