Delen via


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

Tijdens lokale ontwikkeling moeten toepassingen worden geverifieerd bij Azure om verschillende Azure-services te kunnen gebruiken. Verifieer lokaal met behulp van een van deze methoden:

In dit artikel wordt uitgelegd hoe u kunt verifiëren met behulp van een ontwikkelaarsaccount met hulpprogramma's die worden ondersteund door de Azure Identity-bibliotheek. In de volgende secties leert u het volgende:

  • Microsoft Entra-groepen gebruiken om machtigingen voor meerdere ontwikkelaarsaccounts efficiënt te beheren.
  • Rollen toewijzen aan ontwikkelaarsaccounts voor bereikmachtigingen.
  • Aanmelden bij ondersteunde lokale ontwikkelhulpprogramma's.
  • Verifiëren met behulp van een ontwikkelaarsaccount vanuit uw app-code.

Ondersteunde ontwikkelhulpprogramma's voor verificatie

Als u een app wilt verifiëren bij Azure tijdens lokale ontwikkeling met behulp van de Azure-referenties van de ontwikkelaar, moet de ontwikkelaar zijn aangemeld bij Azure vanuit een van de volgende ontwikkelhulpprogramma's:

  • Azure-opdrachtregelinterface (CLI)
  • Azure-ontwikkelaars-CLI
  • Azure PowerShell

De Azure Identity-bibliotheek kan detecteren dat de ontwikkelaar is aangemeld vanuit een van deze hulpprogramma's. De bibliotheek kan vervolgens het Microsoft Entra-toegangstoken verkrijgen via het hulpprogramma om de app te verifiëren bij Azure als de aangemelde gebruiker.

Deze benadering maakt gebruik van de bestaande Azure-accounts van de ontwikkelaar om het verificatieproces te stroomlijnen. Het account van een ontwikkelaar heeft echter waarschijnlijk meer machtigingen dan vereist is voor de app, waardoor de machtigingen van de app in productie worden overschreden. Als alternatief kunt u toepassingsservice-principals maken voor gebruik tijdens lokale ontwikkeling, waarmee u de toegang kunt beperken tot alleen wat de app nodig heeft.

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.
  1. Navigeer naar de overzichtspagina van Microsoft Entra ID in Azure Portal.

  2. Selecteer Alle groepen in het menu aan de linkerkant.

  3. Selecteer Nieuwe groep op de pagina Groepen.

  4. Vul op de pagina Nieuwe groep de volgende formuliervelden in:

    • groepstype: selecteer Security.
    • 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.

    Een schermopname die laat zien hoe u een groep maakt in Azure Portal.

  5. Selecteer de koppeling Geen leden geselecteerd onder Leden om leden toe te voegen aan de groep.

  6. 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.

  7. 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.

  1. Navigeer in Azure Portal naar de overzichtspagina van de resourcegroep die uw app bevat.

  2. Selecteer Toegangsbeheer (IAM) in de linkernavigatie.

  3. 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.

  4. Gebruik op het tabblad Rol het zoekvak om de rol te vinden die u wilt toewijzen. Selecteer de rol en kies Volgende.

  5. 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 .

    Een schermopname die laat zien hoe u een rol toewijst aan de Microsoft Entra-groep.

  6. Selecteer op het tabblad Controleren en toewijzen de optie Controleren en toewijzen onderaan de pagina.

Aanmelden bij Azure met behulp van hulpprogramma's voor ontwikkelaars

Meld u vervolgens aan bij Azure met behulp van een van de verschillende ontwikkelhulpprogramma's die u kunt gebruiken om verificatie uit te voeren in uw ontwikkelomgeving. Het account dat u verifieert, moet ook aanwezig zijn in de Microsoft Entra-groep die u eerder hebt gemaakt en geconfigureerd.

Ontwikkelaars kunnen Azure CLI gebruiken om te verifiëren. Apps die gebruikmaken van DefaultAzureCredential of AzureCLICredential kunnen dit account vervolgens gebruiken om app-aanvragen te verifiëren.

Voer de az login opdracht uit om te verifiëren met de Azure CLI. Op een systeem met een standaardwebbrowser start de Azure CLI de browser om de gebruiker te verifiëren.

az login

Voor systemen zonder een standaardwebbrowser gebruikt de opdracht az login de verificatiestroom voor apparaatcode. U kunt ook afdwingen dat de Azure CLI de apparaatcodestroom gebruikt in plaats van een browser te starten door het --use-device-code argument op te geven.

az login --use-device-code

Verifiëren bij Azure-services vanuit uw app

Het azidentity-pakket biedt verschillende referenties die zijn aangepast aan de ondersteuning van verschillende scenario's en Microsoft Entra-verificatiestromen. De volgende stappen laten zien hoe u DefaultAzureCredential gebruikt wanneer u lokaal en in productie met service-principals werkt.

De code implementeren

Als u Azure SDK-clientobjecten wilt verifiëren bij Azure, moet uw toepassing de DefaultAzureCredential-klasse gebruiken. In dit scenario DefaultAzureCredential wordt sequentieel gecontroleerd of de ontwikkelaar zich bij Azure heeft aangemeld met behulp van de Azure CLI of Azure Developer CLI. Als de ontwikkelaar zich aanmeldt bij Azure met behulp van een van deze hulpprogramma's, gebruikt de app de referenties voor verificatie.

DefaultAzureCredential is een geordende reeks mechanismen voor verificatie bij Microsoft Entra-id. Elk verificatiemechanisme is een type dat de TokenCredential interface implementeert en een referentie wordt genoemd. DefaultAzureCredential Controleert sequentieel of de ontwikkelaar zich heeft aangemeld bij Azure met behulp van de Azure CLI of Azure Developer CLI. Als de ontwikkelaar zich aanmeldt bij Azure met behulp van een van deze hulpprogramma's, gebruikt de app de referenties voor verificatie. Zie DefaultAzureCredential aanpassen voor meer informatie over het aanpassen van de referentieketen.

  1. Voeg het azidentity pakket toe aan uw toepassing.

    go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
    
  2. Voor go-code waarmee een Azure SDK-clientobject in uw app wordt gemaakt, wilt u het volgende doen:

    1. Importeer het azidentity-pakket.
    2. Gebruik DefaultAzureCredential of AzureCLICredential om een exemplaar van een referentie te maken. Voorbeeld:
    • Als u deze wilt gebruiken DefaultAzureCredential, stelt u de omgevingsvariabele AZURE_TOKEN_CREDENTIALS in op dev die geeft aan dat de app wordt uitgevoerd in een ontwikkelomgeving. Zie DefaultAzureCredential aanpassen voor meer informatie.

      // Environment variable AZURE_TOKEN_CREDENTIALS=dev or a specific developer tool credential value
      cred, err := azidentity.NewDefaultAzureCredential(nil)
      
    • Of gebruik een specifieke referentie, zoals AzureCLICredential, AzureDeveloperCLICredentialof AzurePowerShellCredential om te verifiëren met behulp van de aangemelde gebruiker voor een specifiek ontwikkelprogramma.

      cred, err := azidentity.NewAzureCLICredential(nil)
      // or cred, err := azidentity.NewAzureDeveloperCLICredential(nil)
      // or cred, err := azidentity.NewAzurePowerShellCredential(nil)
      
    1. Geef het referentie-exemplaar door aan de Azure SDK-clientconstructor.

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

import (
	"context"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const (
	account       = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
	containerName = "sample-container"
	blobName      = "sample-blob"
	sampleFile    = "path/to/sample/file"
)

func main() {
	// create a credential
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	// or cred, err := azidentity.NewAzureCLICredential(nil)
	// or cred, err := azidentity.NewAzureDeveloperCLICredential(nil)
	// or cred, err := azidentity.NewAzurePowerShellCredential(nil)
	if err != nil {
	  // TODO: handle error
	}
	
	// create a client for the specified storage account
	client, err := azblob.NewClient(account, cred, nil)
	if err != nil {
	  // TODO: handle error
	}
	
	// TODO: perform some action with the azblob Client
	// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}