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.
- Go installé : Version 1.18 ou ultérieure
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 :
- Option 1 : Définir des variables d’environnement
- Option 2 : Utiliser l’identité de charge de travail
- Option 3 : Utiliser une identité managée
- Option 4 : Se connecter avec Azure CLI
- Option 5 : Se connecter avec Azure Developer CLI
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
:
Créez un répertoire pour tester et exécuter l’exemple de code Go, puis accédez à ce répertoire.
Exécutez go mod init pour créer un module :
go mod init azure-auth
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"
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.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 DefaultAzureCredential
de :
// 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.