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
Utilisez DefaultAzureCredential
pour vous authentifier auprès d’Azure avec 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
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
:
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 .
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
}
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour