Delen via


Go-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 Go-app tijdens lokale ontwikkeling gebruikmaakt van de referenties van de ontwikkelaar 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 of Azure Developer CLI. De Azure SDK voor Go kan detecteren dat de ontwikkelaar is aangemeld vanuit een van deze hulpprogramma's en vervolgens de benodigde referenties ophaalt uit de cache voor 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 nodig zijn voor de toepassing, waardoor deze machtigingen worden overschreden waarmee de app in een productieomgeving draait. 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.

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 term 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 eigenschap id 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 az ad user list om de beschikbare service-principals weer te geven. De opdracht --filter parameter accepteert OData-stijlfilters en kan worden gebruikt om de lijst te filteren op de weergavenaam van de gebruiker, zoals wordt weergegeven. De parameter --query beperkt de uitvoer tot interessante kolommen.

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 beherenvoor 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 in Azure toegewezen met behulp van de az role assignment create opdracht. U kunt een groep opgeven met de bijbehorende object-id.

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

Als u de rolnamen wilt ophalen die kunnen worden toegewezen, gebruikt u de az role definition list opdracht.

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

Als u bijvoorbeeld wilt toestaan dat de leden van een groep met een object-id van bbbbbbbb-1111-2222-3333-cccccccccccc de toegang tot Azure Storage-blobcontainers en -gegevens in alle opslagaccounts in de msdocs-go-sdk-auth-example resourcegroep in het abonnement met id aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, wijst u de rol In zender voor opslagblobgegevens toe aan de groep met behulp van de volgende opdracht.

az role assignment create --assignee bbbbbbbb-1111-2222-3333-cccccccccccc \
    --scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-go-sdk-auth-example \
    --role "Storage Blob Data Contributor"

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

3 - Aanmelden bij Azure met behulp van de Azure CLI of Azure Developer CLI

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 gebruiken. In dit scenario controleert DefaultAzureCredential opeenvolgend of de ontwikkelaar zich heeft aangemeld bij Azure met behulp van de Azure CLI of Azure Developer CLI. Als de ontwikkelaar is aangemeld bij Azure met behulp van een van deze hulpprogramma's, zal de app de inloggegevens die bij het hulpprogramma worden gebruikt, inzetten om zich bij Azure te verifiëren.

Voeg eerst het azidentity-pakket toe aan uw toepassing.

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

Voor elke Go-code waarmee een Azure SDK-clientobject in uw app wordt gemaakt, wilt u het volgende doen:

  1. Importeer het azidentity-pakket.
  2. Maak een instantie van het type DefaultAzureCredential.
  3. Geef het exemplaar van type DefaultAzureCredential door aan de constructor van de Azure SDK-client.

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)
    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>)
}