Delen via


Python-apps verifiëren bij Azure-services tijdens lokale ontwikkeling met behulp van ontwikkelaarsaccounts

Wanneer ontwikkelaars cloudtoepassingen maken, kunnen ze doorgaans fouten opsporen en toepassingen testen op hun lokale werkstation. Wanneer een toepassing wordt uitgevoerd op het werkstation van een ontwikkelaar tijdens de lokale ontwikkeling, moet deze nog steeds worden geverifieerd bij alle Azure-services die door de app worden gebruikt. In dit artikel wordt beschreven hoe u de Azure-referenties van een ontwikkelaar gebruikt om de app tijdens lokale ontwikkeling bij Azure te verifiëren.

Een diagram waarin wordt getoond hoe een Python-app tijdens lokale ontwikkeling de referenties van de ontwikkelaars gebruikt om verbinding te maken met Azure door deze referenties te verkrijgen van lokaal geïnstalleerde ontwikkelhulpprogramma's.

Voor een app die tijdens lokale ontwikkeling bij Azure kan worden geverifieerd met behulp van de Azure-referenties van de ontwikkelaar, moet een ontwikkelaar zijn aangemeld bij Azure vanuit de Azure CLI, Azure PowerShell of Azure Developer CLI. De Azure SDK voor Python kan detecteren dat de ontwikkelaar is aangemeld vanuit een van deze hulpprogramma's en vervolgens de benodigde referenties ophaalt uit de cache met referenties om de app als aangemelde gebruiker te verifiëren bij Azure.

Deze benadering is het eenvoudigst in te stellen voor een ontwikkelteam, omdat deze gebruikmaakt van de bestaande Azure-accounts van de ontwikkelaars. Het account van een ontwikkelaar heeft echter waarschijnlijk meer machtigingen dan vereist is voor de toepassing, waardoor het overschrijden van de machtigingen waarmee de app in productie wordt uitgevoerd. Als alternatief kunt u service-principals voor toepassingen maken die moeten worden gebruikt tijdens de lokale ontwikkeling. Dit kan worden beperkt tot alleen de toegang die nodig is voor de app.

1 - Microsoft Entra-beveiligingsgroep maken voor lokale ontwikkeling

Omdat er bijna altijd meerdere ontwikkelaars zijn die aan een toepassing werken, is het raadzaam eerst een Microsoft Entra-beveiligingsgroep te maken om de rollen (machtigingen) die de app nodig heeft in lokale ontwikkeling in te kapselen. Deze aanpak biedt de volgende voordelen.

  • Elke ontwikkelaar weet zeker dat dezelfde rollen zijn toegewezen omdat rollen op groepsniveau worden toegewezen.
  • Als er een nieuwe rol nodig is voor de app, hoeft deze alleen te worden toegevoegd aan de Microsoft Entra-groep voor de app.
  • Als een nieuwe ontwikkelaar lid wordt van het team, moet deze worden toegevoegd aan de juiste Microsoft Entra-groep om de juiste machtigingen te krijgen om aan de app te kunnen werken.

Als u een bestaande Microsoft Entra-beveiligingsgroep voor uw ontwikkelteam hebt, kunt u die groep gebruiken. Voer anders de volgende stappen uit om een Microsoft Entra-beveiligingsgroep te maken.

De opdracht az ad group create wordt gebruikt om groepen te maken in Microsoft Entra ID. De parameters --display-name en --main-nickname zijn vereist. De naam die aan de groep wordt gegeven, moet zijn gebaseerd op de naam van de toepassing. Het is ook handig om een woordgroep zoals 'local-dev' op te nemen in de naam van de groep om het doel van de groep aan te geven.

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

Kopieer de waarde van de id eigenschap in de uitvoer van de opdracht. Dit is de object-id voor de groep. U hebt deze in latere stappen nodig. U kunt ook de opdracht az ad group show gebruiken om deze eigenschap op te halen.

Als u leden aan de groep wilt toevoegen, hebt u de object-id van de Azure-gebruiker nodig. Gebruik de lijst az ad user om de beschikbare service-principals weer te geven. De --filter parameteropdracht accepteert OData-stijlfilters en kan worden gebruikt om de lijst te filteren op de weergavenaam van de gebruiker, zoals wordt weergegeven. De --query parameter beperkt de uitvoer tot kolommen van belang.

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

De opdracht az ad group member add kan vervolgens worden gebruikt om leden toe te voegen aan groepen.

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

Notitie

Standaard is het maken van Microsoft Entra-beveiligingsgroepen beperkt tot bepaalde bevoorrechte rollen in een directory. Als u geen groep kunt maken, neemt u contact op met een beheerder voor uw adreslijst. Als u geen leden kunt toevoegen aan een bestaande groep, neemt u contact op met de groepseigenaar of een adreslijstbeheerder. Zie Microsoft Entra-groepen en groepslidmaatschap beheren voor meer informatie.

2 - Rollen toewijzen aan de Microsoft Entra-groep

Vervolgens moet u bepalen welke rollen (machtigingen) uw app nodig heeft voor welke resources en welke rollen aan uw app worden toegewezen. In dit voorbeeld worden de rollen toegewezen aan de Microsoft Entra-groep die in stap 1 is gemaakt. Rollen kunnen worden toegewezen aan een resource, resourcegroep of abonnementsbereik. In dit voorbeeld ziet u hoe u rollen toewijst aan het bereik van de resourcegroep, omdat de meeste toepassingen al hun Azure-resources groeperen in één resourcegroep.

Aan een gebruiker, groep of toepassingsservice-principal wordt een rol toegewezen in Azure met behulp van de opdracht az role assignment create . U kunt een groep opgeven met de bijbehorende object-id.

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

Gebruik de opdracht az role definition list om de rolnamen op te halen die kunnen worden toegewezen.

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

Als u bijvoorbeeld de leden van een groep wilt toestaan met een object-id van 00000000-0000-0000-0000-000000000000 lees-, schrijf- en verwijdertoegang tot Azure Storage-blobcontainers en -gegevens in alle opslagaccounts in de resourcegroep msdocs-python-sdk-auth-auth-example in het abonnement met id 11111111-1111-1111-1111-111111111111, wijst u de rol Inzender voor opslagblobgegevens toe aan de groep met behulp van de volgende opdracht.

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"

Zie het artikel Azure-rollen toewijzen met behulp van de Azure CLI voor informatie over het toewijzen van machtigingen op resource- of abonnementsniveau met behulp van de Azure CLI.

3- Meld u aan bij Azure met behulp van de Azure CLI, Azure PowerShell, Azure Developer CLI of in een browser

Open een terminal op uw ontwikkelwerkstation en meld u aan bij Azure vanuit de Azure CLI.

az login

4 - DefaultAzureCredential implementeren in uw toepassing

Als u Azure SDK-clientobjecten wilt verifiëren bij Azure, moet uw toepassing de DefaultAzureCredential klasse van het azure.identity pakket gebruiken. In dit scenario DefaultAzureCredential wordt opeenvolgend gecontroleerd of de ontwikkelaar zich heeft aangemeld bij Azure met behulp van de Azure CLI, Azure PowerShell of Azure Developer CLI. Als de ontwikkelaar is aangemeld bij Azure met behulp van een van deze hulpprogramma's, worden de referenties die worden gebruikt om u aan te melden bij het hulpprogramma door de app gebruikt voor verificatie bij Azure.

Begin met het toevoegen van het pakket azure.identity aan uw toepassing.

pip install azure-identity

Vervolgens wilt u voor elke Python-code die een Azure SDK-clientobject maakt in uw app het volgende doen:

  1. Importeer de DefaultAzureCredential klasse uit de azure.identity module.
  2. Maak een DefaultAzureCredential object.
  3. Geef het DefaultAzureCredential object door aan de objectconstructor van de Azure SDK-client.

Een voorbeeld van deze stappen wordt weergegeven in het volgende codesegment.

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)