Delen via


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

Bij het ontwikkelen van cloudtoepassingen bouwen, testen en fouten opsporen in hun code doorgaans lokaal voordat ze deze implementeren in Azure. Zelfs tijdens lokale ontwikkeling moet de toepassing echter worden geverifieerd met alle Azure-services waarmee deze communiceert, zoals Key Vault, Storage of databases.

In dit artikel wordt beschreven hoe u uw toepassing configureert voor het gebruik van de Azure-referenties van de ontwikkelaar voor verificatie tijdens lokale ontwikkeling. Deze aanpak maakt een naadloze en veilige ontwikkelervaring mogelijk zonder geheimen in te sluiten of omgevingsspecifieke logica te schrijven.

Overzicht van verificatie voor lokale ontwikkeling met behulp van ontwikkelaarsaccounts

Wanneer u een toepassing ontwikkelt die gebruikmaakt van de Azure Identity-bibliotheek voor Python, kunt u tijdens lokale ontwikkeling verifiëren bij Azure-services met behulp van het Azure-account van de ontwikkelaar. Deze benadering is vaak de eenvoudigste manier om tijdens lokale ontwikkeling bij Azure-services te verifiëren, omdat hiervoor geen service-principals of geheimen hoeven te worden gemaakt en beheerd.

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

Als u een toepassing wilt inschakelen voor verificatie bij Azure tijdens lokale ontwikkeling met behulp van de eigen Azure-referenties van de ontwikkelaar, moet de ontwikkelaar zich eerst aanmelden met een van de ondersteunde opdrachtregelprogramma's:

  • Azure CLI (az login)
  • Azure Developer CLI (azd login)
  • Azure PowerShell (Connect-AzAccount)

Zodra u zich hebt aangemeld, kan de Azure Identity-bibliotheek voor Python de actieve sessie automatisch detecteren en de benodigde tokens ophalen uit de cache voor referenties. Met deze mogelijkheid kan de app worden geverifieerd bij Azure-services als de aangemelde gebruiker, zonder dat hiervoor aanvullende configuratie of in code vastgelegde geheimen nodig zijn.

Dit gedrag wordt ingeschakeld bij gebruik van DefaultAzureCredential, die transparant teruggrijpt naar op CLI gebaseerde inloggegevens in lokale omgevingen.

Het gebruik van de aangemelde Azure-referenties van een ontwikkelaar is de eenvoudigste manier voor lokale ontwikkeling. Het maakt gebruik van het bestaande Azure-account van elk teamlid, waardoor naadloze toegang tot Azure-services mogelijk is zonder dat er extra configuratie nodig is.

Ontwikkelaarsaccounts hebben doorgaans echter bredere machtigingen dan de toepassing in productie moet hebben. Deze bredere machtigingen kunnen leiden tot inconsistenties bij het testen of onbedoeld toestaan van bewerkingen die de app niet zou mogen uitvoeren in een productieomgeving. Als u productiemachtigingen nauwkeurig wilt spiegelen en de beveiligingspostuur wilt verbeteren, kunt u in plaats daarvan toepassingsspecifieke service-principals maken voor lokale ontwikkeling. Deze identiteiten:

  • Kan alleen de rollen en machtigingen worden toegewezen die de toepassing nodig heeft
  • Ondersteuningsprincipe van minimale bevoegdheden
  • Bieden consistent testen van toegangsgerelateerd gedrag in omgevingen

Ontwikkelaars kunnen de lokale omgeving configureren voor het gebruik van de service-principal via omgevingsvariabelen en DefaultAzureCredential deze automatisch ophalen. Zie het artikel Python-apps verifiëren bij Azure-services tijdens lokale ontwikkeling met behulp van service-principals voor meer informatie.

1 - Microsoft Entra-beveiligingsgroep maken voor lokale ontwikkeling

In de meeste ontwikkelscenario's dragen meerdere ontwikkelaars bij aan dezelfde toepassing. Om het toegangsbeheer te stroomlijnen en consistente machtigingen in het hele team te garanderen, raden we u aan eerst een Microsoft Entra-beveiligingsgroep te maken die specifiek is bedoeld voor de lokale ontwikkelingsbehoeften van de toepassing.

Het toewijzen van Azure-rollen op groepsniveau, in plaats van aan afzonderlijke gebruikers, biedt verschillende belangrijke voordelen:

  • Consistente roltoewijzingen

    Alle ontwikkelaars in de groep nemen automatisch dezelfde rollen en machtigingen over en zorgen voor een uniforme ontwikkelomgeving.

  • Vereenvoudigd rolbeheer

    Wanneer voor de toepassing een nieuwe rol is vereist, hoeft u deze slechts eenmaal aan de groep toe te voegen. U hoeft geen afzonderlijke gebruikersmachtigingen bij te werken.

  • Eenvoudige onboarding

    Nieuwe ontwikkelaars kunnen de benodigde machtigingen krijgen door ze toe te voegen aan de groep. Er zijn geen handmatige roltoewijzingen vereist.

Als uw organisatie al een geschikte Microsoft Entra-beveiligingsgroep voor het ontwikkelteam heeft, kunt u deze opnieuw gebruiken. Anders kunt u een nieuwe groep maken die specifiek is bedoeld voor de app.

Als u een beveiligingsgroep wilt maken in Microsoft Entra ID, gebruikt u de opdracht az ad group createe Azure CLI.

Voor deze opdracht zijn de volgende parameters vereist:

--display-name: Een gebruiksvriendelijke naam voor de groep

--mail-nickname: Een unieke id die wordt gebruikt voor e-mail en interne verwijzing

U wordt aangeraden de groepsnaam te baseren op de naam van de toepassing en om een achtervoegsel op te nemen, zoals -local-dev, om duidelijk aan te geven wat het doel is.

#!/bin/bash
az ad group create \
    --display-name MyDisplay \
    --mail-nickname MyDisplay  \
    --description "<group-description>"
# PowerShell syntax
az ad group create `
    --display-name MyDisplay `
    --mail-nickname MyDisplay `
    --description "<group-description>"

Nadat u de az ad group create opdracht hebt uitgevoerd, kopieert u de waarde van de id eigenschap uit de opdrachtuitvoer. U hebt de Object ID Microsoft Entra-beveiligingsgroep nodig voor het toewijzen van rollen in latere stappen in dit artikel. Als u het Object ID later opnieuw wilt ophalen, gebruikt u de volgende opdracht az ad group show : az ad group show --group "my-app-local-dev" --query id --output tsv.

Als u een gebruiker aan de groep wilt toevoegen, moet u eerst het Object ID Azure-gebruikersaccount verkrijgen dat u wilt toevoegen. Gebruik de opdracht az ad user list met de --filter parameter om te zoeken naar een specifieke gebruiker op weergavenaam. De --query parameter helpt de uitvoer te beperken tot relevante velden:

#!/bin/bash
az ad user list \
--filter "startswith(displayName, 'Bob')" \
--query "[].{objectId:id, displayName:displayName}" \
--output table
# PowerShell syntax
az ad user list `
    --filter "startswith(displayName, 'Bob')" `
    --query "[].{objectId:id, displayName:displayName}" `
    --output table

Zodra u de Object ID gebruiker hebt, kunt u deze toevoegen aan de groep met behulp van de opdracht az ad group member add .

#!/bin/bash
az ad group member add \
    --group <group-name> \
    --member-id <object-id>
# PowerShell syntax
az ad group member add `
    --group <group-name> `
    --member-id <object-id>

Opmerking

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

Nadat u uw Microsoft Entra-beveiligingsgroep hebt gemaakt en leden hebt toegevoegd, moet u bepalen welke rollen (machtigingen) uw toepassing nodig heeft en deze rollen toewijzen aan de groep op het juiste bereik.

  • Vereiste rollen bepalen

    Identificeer de rollen die uw app nodig heeft om te functioneren. Dit zijn enkele veel voorkomende voorbeelden:

    • Key Vault Secrets User : geheimen lezen uit Azure Key Vault
    • Inzender voor opslagwachtrijgegevens : berichten verzenden naar Azure Queue Storage

    Raadpleeg de ingebouwde roldefinities voor meer opties.

  • Kies een toepassingsgebied voor de roltoewijzing

    Rollen kunnen op verschillende niveaus worden toegewezen.

    • Resourceniveau (bijvoorbeeld één Key Vault- of Storage-account)
    • Resourcegroepniveau (aanbevolen voor de meeste apps)
    • Abonnementsniveau (met voorzichtigheid gebruiken: breedste toegang)

In dit voorbeeld wijzen we rollen toe aan het bereik van de resourcegroep. Dit is gebruikelijk wanneer alle toepassingsresources onder één resourcegroep zijn gegroepeerd.

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 met zijn Object ID opgeven.

#!/bin/bash
az role assignment create --assignee <objectId> \
    --scope /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName> \
    --role "<roleName>" 
# PowerShell syntax
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.

#!/bin/bash
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table
# PowerShell syntax
az role definition list --query "sort_by([].{roleName:roleName, description:description}, &roleName)" --output table

Als u lees-, schrijf- en verwijdertoegang wilt verlenen tot Azure Storage-blobcontainers en -gegevens voor alle opslagaccounts in een specifieke resourcegroep, wijst u de rol Inzender voor opslagblobgegevens toe aan uw Microsoft Entra-beveiligingsgroep.

#!/bin/bash
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-python-sdk-auth-example \
    --role "Storage Blob Data Contributor"
# PowerShell syntax
az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc `
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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

Kies een van de volgende methoden om te verifiëren met uw Azure-account:

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 met Azure, moet uw toepassing de DefaultAzureCredential klasse van het azure-identity pakket gebruiken. Dit is de aanbevolen verificatiemethode voor zowel lokale ontwikkelings- als productie-implementaties.

In een lokaal ontwikkelingsscenario DefaultAzureCredential werkt u door opeenvolgend te controleren op beschikbare verificatiebronnen. Het zoekt met name naar actieve sessies in de volgende hulpprogramma's:

  • Azure CLI (az login)
  • Azure PowerShell (Connect-AzAccount)
  • Azure Developer CLI (azd auth login)

Als de ontwikkelaar is aangemeld bij Azure met behulp van een van deze hulpprogramma's, detecteert DefaultAzureCredential automatisch de sessie en gebruikt deze inloggegevens om de toepassing te authentiseren met Azure-services. Hierdoor kunnen ontwikkelaars veilig verifiëren zonder geheimen op te slaan of code voor verschillende omgevingen te wijzigen.

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)