Azure-verificatie met de Azure Identity-module voor Go

In deze zelfstudie wordt het type DefaultAzureCredential uit de Azure Identity-module voor Go gebruikt om te verifiëren bij Azure. De Azure Identity-module biedt verschillende referentietypen die zich richten op OAuth met Microsoft Entra-id.

DefaultAzureCredential vereenvoudigt verificatie door veelgebruikte referentietypen te combineren. Het koppelt referentietypen die worden gebruikt voor het verifiëren van door Azure geïmplementeerde toepassingen met referentietypen die worden gebruikt voor verificatie in een ontwikkelomgeving.

Vereisten

  • Azure-abonnement: als u nog geen abonnement op Azure hebt, maakt u een gratis Azure-account aan voordat u begint.
  • Go geïnstalleerd: versie 1.18 of hoger

1. Installeer de Azure Identity-module voor Go

Voer de volgende opdracht uit om de azidentity-module te downloaden:

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

2. Verifiëren met Azure

Gebruik de DefaultAzureCredential methode om te verifiëren bij Azure met een van de volgende technieken:

Zie referentietypen voor meer informatie over de verschillende referentietypen.

Optie 1: Omgevingsvariabelen definiëren

Het DefaultAzureCredential type gebruikt het type voor het EnvironmentCredential configureren van verificatie met behulp van omgevingsvariabelen die ondersteuning bieden voor drie verificatietypen. Kies uit de volgende verificatietypen en definieer de juiste omgevingsvariabelen.

Service-principal met een geheim

Naam van de variabele Weergegeven als
AZURE_CLIENT_ID Toepassings-id van een Azure-service-principal
AZURE_TENANT_ID Id van de Microsoft Entra-tenant van de toepassing
AZURE_CLIENT_SECRET Wachtwoord van de Azure-service-principal
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

Service-principal met certificaat

Naam van de variabele Weergegeven als
AZURE_CLIENT_ID Id van een Microsoft Entra-toepassing
AZURE_TENANT_ID Id van de Microsoft Entra-tenant van de toepassing
AZURE_CLIENT_CERTIFICATE_PATH Pad naar een certificaatbestand inclusief persoonlijke sleutel (zonder wachtwoordbeveiliging)
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

Gebruikersnaam en wachtwoord

Naam van de variabele Weergegeven als
AZURE_CLIENT_ID Id van een Microsoft Entra-toepassing
AZURE_USERNAME Een gebruikersnaam (meestal een e-mailadres)
AZURE_PASSWORD Het wachtwoord van die gebruiker
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"

De configuratie wordt uitgevoerd in de voorgaande volgorde. Als er bijvoorbeeld waarden voor een clientgeheim en certificaat aanwezig zijn, wordt het clientgeheim gebruikt.

Optie 2: Workloadidentiteit gebruiken

Microsoft Entra Workload-ID stelt pods in een Kubernetes-cluster in staat om een Kubernetes-identiteit (serviceaccount) te gebruiken. Er wordt een Kubernetes-token uitgegeven en met OIDC-federatie kunnen Kubernetes-toepassingen veilig toegang krijgen tot Azure-resources met Microsoft Entra-id.

Als de vereiste omgevingsvariabelen EnvironmentCredential niet aanwezig zijn, DefaultAzureCredential probeert u zich te verifiëren met behulp van WorkloadIdentityCredential. WorkloadIdentityCredential probeert de configuratie van de service-principal te lezen vanuit omgevingsvariabelen die zijn ingesteld door de webhook workloadidentiteit.

Optie 3: Een beheerde identiteit gebruiken

Beheerde identiteiten elimineren de noodzaak voor ontwikkelaars om referenties te beheren. Door verbinding te maken met resources die ondersteuning bieden voor Microsoft Entra-verificatie, kunnen toepassingen Microsoft Entra-tokens gebruiken in plaats van referenties.

Als de vereiste omgevingsvariabelen WorkloadIdentityCredential niet aanwezig zijn, DefaultAzureCredential probeert u zich te verifiëren met ManagedIdentityCredential.

Als u een door de gebruiker toegewezen beheerde identiteit gebruikt, voert u de volgende opdracht uit om de AZURE_CLIENT_ID omgevingsvariabele in te stellen.

export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"

Optie 4: Aanmelden met Azure CLI

Als u de wrijving in lokale ontwikkeling wilt verminderen, DefaultAzureCredential kunt u zich verifiëren als de gebruiker die is aangemeld bij de Azure CLI.

Voer de volgende opdracht uit om u aan te melden bij de Azure CLI:

az login

Azure CLI-verificatie wordt niet aanbevolen voor toepassingen die worden uitgevoerd in Azure.

3. DefaultAzureCredential gebruiken om ResourceClient te verifiëren

Maak een nieuwe Go-voorbeeldmodule met de naam azure-auth om verificatie bij Azure te testen met DefaultAzureCredential:

  1. Maak een map om de go-voorbeeldcode te testen en uit te voeren en ga vervolgens naar die map.

  2. Voer go mod init uit om een module te maken:

    go mod init azure-auth
    
  3. Voer go uit om de benodigde Azure SDK voor Go-modules te downloaden, te bouwen en te installeren:

    go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    go get "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
    
  4. Maak een bestand met de naam main.go en voeg de volgende code in:

    package main
    
    import (
      "context"
    
      "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
      "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
    )
    
    const subscriptionID = "<subscription ID>"
    
    func main() {
      cred, err := azidentity.NewDefaultAzureCredential(nil)
      if err != nil {
        // TODO: handle error
      }
      // Azure SDK Resource Management clients accept the credential as a parameter.
      // The client will authenticate with the credential as necessary.
      client, err := armsubscription.NewSubscriptionsClient(cred, nil)
      if err != nil {
        // TODO: handle error
      }
      _, err = client.Get(context.TODO(), subscriptionID, nil)
      if err != nil {
        // TODO: handle error
      }
    }   
    
    

    Vervang door <subscription ID> uw abonnements-id.

  5. Voer de volgende opdracht uit go run om de toepassing te bouwen en uit te voeren:

    go run .
    

Verifiëren bij Azure met DefaultAzureCredential

Gebruik de volgende code in uw toepassing om te verifiëren bij Azure met de Azure Identity-module met behulp van DefaultAzureCredential:

// This credential type checks environment variables for configuration.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
  // handle error
}

// Azure Resource Management clients accept the credential as a parameter
client, err := armresources.NewClient("<subscriptionId>", cred, nil)
if err != nil {
  // handle error
}

Problemen oplossen

Zie de gids voor probleemoplossing voor hulp bij het oplossen van fouten van specifieke referentietypen.

Volgende stappen