Authentification Azure avec le module Azure Identity pour Go

Dans ce tutoriel, le type DefaultAzureCredential du module Azure Identity pour Go est utilisé pour s’authentifier auprès d’Azure. Le module Azure Identity propose plusieurs types d’informations d’identification qui se concentrent sur OAuth avec Microsoft Entra ID.

DefaultAzureCredential simplifie l’authentification en combinant les types d’informations d’identification couramment utilisés. Il chaîne les types d’informations d’identification utilisés pour authentifier des applications déployées par Azure avec des types d’informations d’identification utilisés pour s’authentifier dans un environnement de développement.

Prérequis

  • Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

1. Installer le module Identité Azure pour Go

Exécutez la commande suivante pour télécharger le module azidentity :

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

2. S’authentifier auprès d’Azure

Utilisez DefaultAzureCredential pour vous authentifier auprès d’Azure avec une des techniques suivantes :

Pour en savoir plus sur les différents types d’informations d’identification, consultez Types d’informations d’identification.

Option 1 : Définir des variables d’environnement

DefaultAzureCredential utilise le type EnvironmentCredential pour configurer l’authentification en utilisant des variables d’environnement qui prennent en charge trois types d’authentification. Choisissez parmi les types d’authentification suivants et définissez les variables d’environnement appropriées.

Principal de service avec une clé secrète

Nom de la variable Valeur
AZURE_CLIENT_ID ID d’application d’un principal de service Azure
AZURE_TENANT_ID ID du locataire Microsoft Entra de l’application
AZURE_CLIENT_SECRET Mot de passe du principal de service Azure
export AZURE_TENANT_ID="<active_directory_tenant_id"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_SECRET="<service_principal_password>"

Principal de service avec un certificat

Nom de la variable Valeur
AZURE_CLIENT_ID ID d’une application Microsoft Entra
AZURE_TENANT_ID ID du locataire Microsoft Entra de l’application
AZURE_CLIENT_CERTIFICATE_PATH Chemin vers un fichier de certificat incluant la clé privée (sans protection par mot de passe)
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"

Nom d’utilisateur et mot de passe

Nom de la variable Valeur
AZURE_CLIENT_ID ID d’une application Microsoft Entra
AZURE_USERNAME Un nom d’utilisateur (généralement une adresse e-mail)
AZURE_PASSWORD Le mot de passe de cet utilisateur
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_USERNAME="<azure_username>"
export AZURE_PASSWORD="<azure_user_password>"

La configuration est tentée dans l’ordre précédent. Par exemple, si les valeurs d’un certificat et d’une clé secrète client sont toutes les deux présentes, la clé secrète client est utilisée.

Option 2 : Utiliser l’identité de charge de travail

ID de charge de travail Microsoft Entra permet aux pods d’un cluster Kubernetes d’utiliser une identité Kubernetes (compte de service). Un jeton Kubernetes est émis et la fédération OIDC permet aux applications Kubernetes d’accéder en toute sécurité aux ressources Azure avec l’ID Microsoft Entra.

Si les variables d’environnement requises pour EnvironmentCredential ne sont pas présentes, DefaultAzureCredential tente de s’authentifier à l’aide de WorkloadIdentityCredential. WorkloadIdentityCredential tente de lire la configuration du principal de service à partir de variables d’environnement définies par le webhook d’identité de charge de travail.

Option 3 : Utiliser une identité managée

Les identités managées permettent aux développeurs de ne plus avoir à gérer les informations d’identification. En vous connectant aux ressources qui prennent en charge l’authentification Microsoft Entra, les applications peuvent utiliser des jetons Microsoft Entra au lieu des informations d’identification.

Si les variables d’environnement requises pour WorkloadIdentityCredential ne sont pas présentes, DefaultAzureCredential tente de s’authentifier à l’aide de ManagedIdentityCredential.

Si vous utilisez une identité managée affectée par l’utilisateur, exécutez la commande suivante pour définir la variable d’environnement AZURE_CLIENT_ID .

export AZURE_CLIENT_ID="<user_assigned_managed_identity_client_id>"

Option 4 : Se connecter avec Azure CLI

Pour réduire les frictions dans le développement local, DefaultAzureCredential vous pouvez vous authentifier en tant qu’utilisateur connecté à Azure CLI.

Exécutez la commande suivante pour vous connecter dans Azure CLI :

az login

L’authentification Azure CLI n’est pas recommandée pour les applications s’exécutant dans Azure.

3. Utiliser DefaultAzureCredential pour authentifier ResourceClient

Créez un exemple de module Go nommé azure-auth pour tester l’authentification auprès d’Azure avec DefaultAzureCredential:

  1. Créez un répertoire pour tester et exécuter l’exemple de code Go, puis accédez à ce répertoire.

  2. Exécutez go mod init pour créer un module :

    go mod init azure-auth
    
  3. Exécutez go get to download, build, and install the necessary Azure SDK for Go modules :

    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. Créez un fichier nommé main.go et insérez le code suivant :

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

    Remplacez <subscription ID> par votre ID d’abonnement.

  5. Exécutez go run pour générer et exécuter l’application :

    go run .
    

S’authentifier auprès d’Azure avec DefaultAzureCredential

Utilisez le code suivant dans votre application pour vous authentifier auprès d’Azure avec le module Azure Identity à l’aide DefaultAzureCredentialde :

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

Résolution des problèmes

Pour obtenir des conseils sur la résolution des erreurs à partir de types d’informations d’identification spécifiques, consultez le guide de résolution des problèmes.

Étapes suivantes