Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Tijdens lokale ontwikkeling moeten toepassingen worden geverifieerd bij Azure voor toegang tot verschillende Azure services. In dit artikel wordt uitgelegd hoe u een toepassingsservice-principal gebruikt als een van de twee algemene benaderingen voor lokale verificatie.
- Een toepassing registreren bij Microsoft Entra om een service-principal te maken
- Microsoft Entra groepen gebruiken om machtigingen efficiënt te beheren
- Rollen toewijzen aan scoperechten
- Authenticeren met behulp van een service-principal vanuit uw app-code
Met behulp van toegewezen toepassingsservice-principals kunt u voldoen aan het principe van minimale bevoegdheden bij het openen van Azure resources. Machtigingen zijn beperkt tot de specifieke vereisten van de app tijdens de ontwikkeling, waardoor onbedoelde toegang tot Azure resources die zijn bedoeld voor andere apps of services, wordt voorkomen. Deze aanpak helpt ook problemen te voorkomen wanneer de app naar productie wordt verplaatst door ervoor te zorgen dat deze niet te veel bevoegdheden heeft in de ontwikkelomgeving.
Een diagram waarin wordt getoond hoe een app die lokaal door de ontwikkelaar wordt uitgevoerd, de toepassingsservice-principal verkrijgt uit een .env-bestand en die identiteit vervolgens gebruikt om verbinding te maken met Azure-bronnen.
Wanneer de app is geregistreerd in Azure, wordt er een service-principal voor de toepassing gemaakt. Voor lokale ontwikkeling:
- Maak een afzonderlijke app-registratie voor elke ontwikkelaar die aan de app werkt om ervoor te zorgen dat elke ontwikkelaar een eigen toepassingsservice-principal heeft, zodat er geen referenties hoeven te worden gedeeld.
- Maak een afzonderlijke app-registratie voor elke app om de machtigingen van de app te beperken tot alleen wat nodig is.
Tijdens lokale ontwikkeling worden omgevingsvariabelen ingesteld met de identiteit van de toepassingsservice-principal. De Azure Identiteitsbibliotheek leest deze omgevingsvariabelen om de app te verifiëren bij de vereiste Azure resources.
De app registreren in Azure
Toepassingsservice-principalobjecten worden gemaakt via een app-registratie in Azure met behulp van de Azure-portal of Azure CLI.
Gebruik in de Azure-portal de zoekbalk om naar de pagina App registrations te gaan.
Selecteer op de pagina App registrations+ Nieuwe registratie.
Op de pagina Een toepassing registreren:
- Voer voor het veld Naam een beschrijvende waarde in die de naam van de app en de doelomgeving bevat.
- Selecteer voor de Ondersteunde accounttypende optie Accounts in dit organisatieadresboek (alleen Microsoft Customer Led - Enkele tenant)of de optie die het beste bij uw vereisten past.
Selecteer Register om uw app te registreren en de service-principal te maken.
Kopieer op de pagina App-registratie voor uw app de toepassings-id (client) en Directory-id (tenant) en plak deze op een tijdelijke locatie voor later in de configuraties van uw applicatiecode.
Selecteer Een certificaat of geheim toevoegen om referenties voor uw app in te stellen.
Op de pagina Certificaten en geheimen, selecteer + Nieuw clientgeheim.
Voeg in het een clientgeheim toe flyoutvenster dat wordt geopend:
- Voer voor de Descriptioneen waarde in van Current.
- Voor de verloopt waarde, laat u de standaard aanbevolen waarde van 180 dagen staan.
- Selecteer Toevoegen om het geheim toe te voegen.
Kopieer op de pagina Certificaten & geheimen de eigenschap Waarde van het clientgeheim voor gebruik in een toekomstige stap.
Notitie
De waarde van het clientgeheim wordt slechts eenmaal weergegeven nadat de app-registratie is gemaakt. U kunt meer clientgeheimen toevoegen zonder dit clientgeheim ongeldig te maken, maar u kunt deze waarde niet opnieuw weergeven.
Een Microsoft Entra groep maken voor lokale ontwikkeling
Maak een Microsoft Entra groep om de rollen (machtigingen) die de app nodig heeft in lokale ontwikkeling in te kapselen in plaats van de rollen toe te wijzen aan afzonderlijke service-principal-objecten. Deze aanpak biedt de volgende voordelen:
- Elke ontwikkelaar heeft dezelfde rollen toegewezen op groepsniveau.
- Als er een nieuwe rol nodig is voor de app, hoeft deze alleen aan de groep voor de app te worden toegevoegd.
- Als een nieuwe ontwikkelaar lid wordt van het team, wordt er een nieuwe toepassingsservice-principal gemaakt voor de ontwikkelaar en toegevoegd aan de groep, zodat de ontwikkelaar over de juiste machtigingen beschikt om aan de app te werken.
Navigeer naar de overzichtspagina Microsoft Entra ID in de Azure-portal.
Selecteer Alle groepen in het menu aan de linkerkant.
Selecteer Nieuwe groep op de pagina Groepen.
Vul op de pagina Nieuwe groep de volgende formuliervelden in:
- Groepstype: selecteer Beveiliging.
- Groepsnaam: Voer een naam in voor de groep die een verwijzing naar de app- of omgevingsnaam bevat.
- Groepsbeschrijving: Voer een beschrijving in waarmee het doel van de groep wordt uitgelegd.
Selecteer de koppeling Geen leden geselecteerd onder Leden om leden toe te voegen aan de groep.
Zoek in het uitklapvenster dat wordt geopend naar de service-principal die u eerder hebt gemaakt en selecteer deze uit de gefilterde resultaten. Kies de knop Selecteren onderaan het deelvenster om uw selectie te bevestigen.
Selecteer Maken onder aan de pagina Nieuwe groep om de groep te maken en terug te keren naar de pagina Alle groepen . Als de nieuwe groep niet wordt weergegeven, wacht u even en vernieuwt u de pagina.
Rollen toewijzen aan de groep
Bepaal vervolgens welke rollen (machtigingen) uw app nodig heeft voor welke resources en wijs deze rollen toe aan de Microsoft Entra groep die u hebt gemaakt. Aan groepen kan een rol worden toegewezen op het niveau van de bron, bron-groep of abonnement. In dit voorbeeld ziet u hoe u rollen toewijst binnen het bereik van de resourcegroep, omdat de meeste apps al hun Azure resources groeperen in één resourcegroep.
Navigeer in de Azure-portal naar de pagina Overview van de resourcegroep die uw app bevat.
Selecteer Toegangsbeheer (IAM) in de linkernavigatie.
Selecteer + Toevoegen en kies vervolgens roltoewijzing toevoegen in de vervolgkeuzelijst op de pagina Toegangsbeheer (IAM). De pagina Roltoewijzing toevoegen bevat verschillende tabbladen voor het configureren en toewijzen van rollen.
Gebruik op het tabblad Rol het zoekvak om de rol te vinden die u wilt toewijzen. Selecteer de rol en kies Volgende.
Op het tabblad Leden :
- Voor de waarde 'toegang toewijzen aan' selecteert u gebruiker, gebruikersgroep of service-principal.
- Voor de waarde Leden kiest u + Leden selecteren om het flyoutdeelvenster Leden selecteren te openen.
- Zoek naar de Microsoft Entra groep die u eerder hebt gemaakt en selecteer deze in de gefilterde resultaten. Kies Selecteren om de groep te selecteren en het uitklapdeelvenster te sluiten.
- Selecteer Beoordelen en toewijzen onderaan het tabblad Leden .
Selecteer op het tabblad Controleren en toewijzen de optie Controleren en toewijzen onderaan de pagina.
De omgevingsvariabelen van de app instellen
Tijdens de uitvoering zoeken bepaalde referenties uit de Azure Identiteitsbibliotheek, zoals DefaultAzureCredential, EnvironmentCredential en ClientSecretCredential, op conventionele wijze naar informatie over de service-principal in de omgevingsvariabelen. Er zijn meerdere manieren om omgevingsvariabelen te configureren wanneer u met Python werkt, afhankelijk van uw hulpprogramma's en omgeving.
Configureer, ongeacht de methode die u kiest, de volgende omgevingsvariabelen voor een service-principal:
-
AZURE_CLIENT_ID: de toepassings-id van de geregistreerde app in Azure. -
AZURE_TENANT_ID: De ID van de Microsoft Entra-tenant. -
AZURE_CLIENT_SECRET: de clientgeheimreferentie voor de app.
Omdat de meeste ontwikkelaars aan meerdere toepassingen werken, wordt het gebruik van een pakket zoals python-dotenv aanbevolen voor toegang tot omgevingsvariabelen vanuit een .env bestand dat tijdens de ontwikkeling in de map van de toepassing is opgeslagen. Deze benadering is gericht op de omgevingsvariabelen, zodat alleen deze toepassing ze kan gebruiken.
Het bestand .env wordt nooit ingecheckt in broncodebeheer, omdat het de geheime sleutel van de toepassing voor Azure bevat. Het standaardbestand .gitignore voor Python sluit het bestand .env automatisch uit van het inchecken.
Als u het python-dotenv pakket wilt gebruiken, installeert u eerst het pakket in uw toepassing:
pip install python-dotenv
Maak vervolgens een .env bestand in de hoofdmap van uw toepassing. Stel de omgevingsvariabelewaarden in met waarden die zijn verkregen uit het app-registratieproces:
AZURE_CLIENT_ID=<your-client-id>
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_SECRET=<your-client-secret>
Gebruik ten slotte in de opstartcode voor uw toepassing de python-dotenv bibliotheek om de omgevingsvariabelen uit het bestand bij het .env opstarten te lezen:
from dotenv import load_dotenv
load_dotenv()
Verifiëren bij Azure services vanuit uw app
De bibliotheek azure-identity biedt verschillende credentials—implementaties van TokenCredential die zijn aangepast aan het ondersteunen van verschillende scenario's en Microsoft Entra authenticatiestromen. In de volgende stappen ziet u hoe u ClientSecretCredential gebruikt wanneer u lokaal en in productie met service-principals werkt.
De code implementeren
Begin met het toevoegen van het pakket aan uw toepassing.
pip install azure-identity
Voor elke Python code waarmee een Azure SDK clientobject in uw app wordt gemaakt, moet u het volgende doen:
- Importeer de
ClientSecretCredentialklasse uit deazure.identitymodule. - Importeer de
osmodule om omgevingsvariabelen te lezen. - Lees de omgevingsvariabelen om de client-id, tenant-id en clientgeheim op te halen.
- Maak een
ClientSecretCredentialobject dat de tenant-id, client-id en clientgeheim doorgeeft. - Geef het object
ClientSecretCredentialdoor aan de Azure SDK clientobjectconstructor.
Een voorbeeld van deze benadering wordt weergegeven in het volgende codesegment.
import os
from azure.identity import ClientSecretCredential
from azure.storage.blob import BlobServiceClient
tenant_id = os.environ.get("AZURE_TENANT_ID")
client_id = os.environ.get("AZURE_CLIENT_ID")
client_secret = os.environ.get("AZURE_CLIENT_SECRET")
credential = ClientSecretCredential(tenant_id, client_id, client_secret)
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=credential)