Partager via


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

Permet DefaultAzureCredential de s’authentifier auprès d’Azure avec l’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 d’accès à un fichier de certificat PEM ou PKCS12, y compris une clé privée
AZURE_CLIENT_CERTIFICATE_PASSWORD (facultatif) Mot de passe du fichier de certificat
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. Pour obtenir un didacticiel de bout en bout sur l’authentification auprès des principaux de service, consultez l’authentification du Kit de développement logiciel (SDK) Azure pour Go avec un principal de service.

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. Lors de la connexion aux ressources qui prennent en charge l’authentification Microsoft Entra, les applications hébergées dans Azure peuvent utiliser des jetons Microsoft Entra au lieu des informations d’identification. Les identités managées ne sont pas prises en charge dans le développement local.

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

Si la AZURE_CLIENT_ID variable d’environnement n’est pas définie, DefaultAzureCredentials tente de s’authentifier à l’aide de l’identité managée affectée par le système si elle est activée sur la ressource d’hébergement.

Pour obtenir un didacticiel de bout en bout sur l’authentification avec des identités managées dans des applications hébergées par Azure, consultez Authentification avec le Kit de développement logiciel (SDK) Azure pour Go à l’aide d’une identité managée.

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

Option 5 : Se connecter avec Azure Developer CLI

Dans le développement local, si l’utilisateur n’est pas connecté à Azure CLI, DefaultAzureCredential peut s’authentifier en tant qu’utilisateur connecté à Azure Developer CLI.

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

azd auth login

L’authentification Azure Developer 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 .
    

    Remarque

    Pour exécuter en l’état sur votre système local, vous devez vous connecter à Azure à l’aide d’Azure CLI ou d’Azure Developer CLI.

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
}

Dépannage

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