Dela via


Autentisera Go-applikationer mot Azure-tjänster under lokal utveckling med hjälp av tjänstehuvudnamn

Under den lokala utvecklingen måste program autentiseras till Azure för att få åtkomst till olika Azure-tjänster. Två vanliga metoder för lokal autentisering är att använda ett utvecklarkonto eller ett huvudnamn för tjänsten. Den här artikeln beskriver hur du använder ett huvudnamn för programtjänsten. I de kommande avsnitten lär du dig:

  • Så registrerar du en applikation i Microsoft Entra för att skapa ett tjänstehuvudnamn
  • Så här använder du Microsoft Entra-grupper för att effektivt hantera behörigheter
  • Hur man tilldelar roller för att begränsa behörigheter
  • Autentisera med tjänstens huvudnamn från din appkod

Med dedikerade huvudnamn för programtjänsten kan du följa principen om lägsta behörighet när du får åtkomst till Azure-resurser. Behörigheter är begränsade till de specifika kraven för appen under utvecklingen, vilket förhindrar oavsiktlig åtkomst till Azure-resurser som är avsedda för andra appar eller tjänster. Den här metoden hjälper också till att undvika problem när appen flyttas till produktion genom att se till att den inte är överprivilegierad i utvecklingsmiljön.

Ett diagram som visar hur en lokal Go-app använder tjänstens huvudnamn för att ansluta till Azure-resurser.

När appen är registrerad i Azure skapas ett huvudnamn för programtjänsten. För lokal utveckling:

  • Skapa en separat appregistrering för varje utvecklare som arbetar med appen för att säkerställa att varje utvecklare har sitt eget huvudnamn för programtjänsten, vilket undviker behovet av att dela autentiseringsuppgifter.
  • Skapa en separat appregistrering för varje app för att begränsa appens behörigheter till endast det som är nödvändigt.

Under lokal utveckling anges miljövariabler med programtjänstens huvudnamns identitet. Azure Identity-biblioteket läser dessa miljövariabler för att autentisera appen till nödvändiga Azure-resurser.

Registrera appen i Azure

Huvudobjekt för programtjänsten skapas via en appregistrering i Azure med hjälp av antingen Azure-portalen eller Azure CLI.

  1. I Azure-portalen använder du sökfältet för att navigera till sidan Appregistreringar.

  2. På sidan Appregistreringar väljer du + Ny registrering.

  3. På sidan Registrera en applikation:

    • För fältet Namn anger du ett beskrivande värde som innehåller appnamnet och målmiljön.
    • För kontotyper som stödsväljer du endast Konton i den här organisationskatalogen (endast Microsoft Customer Led – Enskild klientorganisation)eller vilket alternativ som passar bäst för dina behov.
  4. Välj Registrera för att registrera din app och skapa tjänstens huvudnamn.

    En skärmbild som visar hur du skapar en appregistrering i Azure-portalen.

  5. På sidan Appregistrering för din app kopierar du Program-ID (klient) och Katalog-ID (hyresgäst), som du sedan klistrar in på en tillfällig plats för senare användning i appkodkonfigurationerna.

  6. Välj Lägg till ett certifikat eller en hemlig för att konfigurera autentiseringsuppgifter för din app.

  7. På sidan Certifikat och hemligheter väljer du + Ny klienthemlighet.

  8. I Lägg till en klienthemlighet flyout-panelen som öppnas:

    • För Beskrivninganger du värdet Aktuell.
    • För värdet Upphör att gälla lämnar du det rekommenderade standardvärdet på 180 dagar.
    • Välj Lägg till för att lägga till hemligheten.
  9. På sidan certifikat & hemligheter kopierar du egenskapen Value för klienthemligheten för användning i ett framtida steg.

    Not

    Värdet för klienthemlighet visas bara en gång efter att appregistreringen har skapats. Du kan lägga till fler klienthemligheter utan att ogiltigförklara den här klienthemligheten, men det går inte att visa det här värdet igen.

Skapa en Microsoft Entra-grupp för lokal utveckling

Skapa en Microsoft Entra-grupp för att kapsla in de roller (behörigheter) som appen behöver under lokal utveckling, istället för att tilldela rollerna till enskilda tjänsthuvudobjekt. Den här metoden erbjuder följande fördelar:

  • Varje utvecklare har samma roller tilldelade på gruppnivå.
  • Om en ny roll behövs för appen behöver den bara läggas till i gruppen för appen.
  • Om en ny utvecklare ansluter till teamet skapas ett nytt huvudnamn för programtjänsten för utvecklaren och läggs till i gruppen, vilket säkerställer att utvecklaren har rätt behörighet att arbeta med appen.
  1. Gå till översiktssidan för Microsoft Entra-ID i Azure-portalen.

  2. Välj Alla grupper på den vänstra menyn.

  3. På sidan Grupper väljer du Ny grupp.

  4. På sidan Ny grupp fyller du i följande formulärfält:

    • Grupptyp: Välj Security.
    • Gruppnamn: Ange ett namn för gruppen som innehåller en referens till appens eller miljöns namn.
    • Gruppbeskrivning: Ange en beskrivning som förklarar syftet med gruppen.

    En skärmbild som visar hur du skapar en grupp i Azure-portalen.

  5. Välj länken Inga medlemmar har valts under Medlemmar för att lägga till medlemmar i gruppen.

  6. I den utfällbara panelen som öppnas söker du efter tjänstens huvudnamn som du skapade tidigare och väljer det från de filtrerade resultaten. Välj knappen Välj längst ned i panelen för att bekräfta ditt val.

  7. Välj Skapa längst ned på sidan Ny grupp för att skapa gruppen och återgå till sidan Alla grupper . Om du inte ser den nya gruppen i listan väntar du en stund och uppdaterar sidan.

Tilldela roller till gruppen

Bestäm sedan vilka roller (behörigheter) din app behöver för vilka resurser och tilldela dessa roller till den Microsoft Entra-grupp som du skapade. Grupper kan tilldelas en roll på resurs-, resursgrupps- eller prenumerationsnivå. Det här exemplet visar hur du tilldelar roller i resursgruppens omfång, eftersom de flesta appar grupperar alla sina Azure-resurser i en enda resursgrupp.

  1. I Azure-portalen går du till sidan Översikt för resursgruppen som innehåller din app.

  2. Välj Åtkomstkontroll (IAM) i det vänstra navigeringsfältet.

  3. På sidan Åtkomstkontroll (IAM) väljer du + Lägg till och väljer sedan Lägg till rolltilldelning i den nedrullningsbara menyn. Sidan Lägg till rolltilldelning innehåller flera flikar för att konfigurera och tilldela roller.

  4. På fliken Roll använder du sökrutan för att hitta den roll som du vill tilldela. Välj rollen och välj sedan Nästa.

  5. På fliken Medlemmar:

    • För värdet Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn .
    • För värdet Medlemmar väljer du + Välj medlemmar för att öppna den utfällbara panelen Välj medlemmar .
    • Sök efter den Microsoft Entra-grupp som du skapade tidigare och välj den från de filtrerade resultaten. Välj Välj för att välja gruppen och stäng den utfällbara panelen.
    • Välj Granska och tilldela längst ned på fliken Medlemmar.

    En skärmbild som visar hur du tilldelar en roll till Microsoft Entra-gruppen.

  6. På fliken Granska + tilldela väljer du Granska + tilldela längst ned på sidan.

Ange appmiljövariablerna

Objektet DefaultAzureCredential kommer att söka efter informationen om tjänsteprincipal i en uppsättning miljövariabler vid körningstid. Eftersom de flesta utvecklare arbetar med flera applikationer, rekommenderar vi att använda ett paket som godotenv för att komma åt miljön från en .env-fil som lagras i applikationens katalog under utveckling. Detta omfattar de miljövariabler som används för att autentisera programmet till Azure så att de bara kan användas av det här programmet.

Den .env filen checkas aldrig in i källkontrollen eftersom den innehåller programhemlighetsnyckeln för Azure. Standardfilen .gitignore för Go utesluter automatiskt .env-filen från incheckningen.

Om du vill använda godotenv-paketet installerar du först paketet i ditt program.

go get github.com/joho/godotenv

Skapa sedan en .env fil i programmets rotkatalog. Ange miljövariabelvärdena med värden som hämtats från appregistreringsprocessen enligt följande:

  • AZURE_CLIENT_ID → App-ID-värdet.
  • AZURE_TENANT_ID → Klientorganisations-ID-värdet.
  • AZURE_CLIENT_SECRET → Lösenordet/autentiseringsuppgifterna som genereras för appen.
AZURE_CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444
AZURE_TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeee
AZURE_CLIENT_SECRET=Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6

I startkoden för ditt program använder du slutligen godotenv-biblioteket för att läsa miljövariablerna från .env-filen vid start.

// Imports of fmt, log, and os omitted for brevity 
import "github.com/joho/godotenv"

environment := os.Getenv("ENVIRONMENT")

if environment == "development" {
	fmt.Println("Loading environment variables from .env file")

	// Load the .env file
	err := godotenv.Load(".env")
	if err != nil {
	    log.Fatalf("Error loading .env file: %v", err)
	}
}

Implementera DefaultAzureCredential i ditt program

För att autentisera Azure SDK-klientobjekt till Azure bör ditt program använda klassen DefaultAzureCredential från azidentity-paketet. I det här scenariot identifierar DefaultAzureCredential miljövariablerna AZURE_CLIENT_ID, AZURE_TENANT_IDoch AZURE_CLIENT_SECRET anges och läser dessa variabler för att få information om programtjänstens huvudnamn att ansluta till Azure med.

Lägg först till azidentity-paketet i ditt program.

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

För alla Go-kod som skapar ett Azure SDK-klientobjekt i din app vill du sedan:

  1. Importera azidentity-paketet.
  2. Skapa en instans av typ DefaultAzureCredential.
  3. Skicka instansen av DefaultAzureCredential typ till Azure SDK-klientkonstruktorn.

Ett exempel på detta visas i följande kodsegment.

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