Authentification Azure SDK pour Go avec un principal de service
Dans ce tutoriel, vous utilisez le Kit de développement logiciel (SDK) Azure pour Go pour vous authentifier auprès d’Azure avec un principal de service Azure à l’aide d’un secret ou d’un certificat.
Les principaux de service Azure définissent la stratégie d’accès et les autorisations dans un locataire Microsoft Entra, ce qui permet d’activer les fonctionnalités principales telles que l’authentification pendant l’authentification et l’autorisation pendant l’accès aux ressources. Ils suppriment la nécessité d’utiliser des compte personnel pour accéder aux ressources Azure. Vous pouvez affecter à un principal de service les autorisations exactes nécessaires à votre application et les développer par rapport à ces autorisations, plutôt que d’utiliser un compte personnel, qui peut avoir plus de privilèges dans votre locataire que l’application n’en a besoin. Vous pouvez également utiliser des principaux de service pour les applications hébergées localement qui doivent utiliser des ressources Azure. Le module Azure SDK pour Go Azure Identity offre un moyen pratique de s’authentifier auprès d’Azure avec un principal de service à l’aide de variables d’environnement et d’un secret ou d’un certificat.
Suivez ce tutoriel pour créer et vous authentifier avec Azure SDK pour Go en utilisant un principal de service.
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
Si vous souhaitez utiliser Azure CLI pour exécuter les étapes décrites dans cet article :
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour plus d’informations, consultez Démarrage rapide pour Bash dans Azure Cloud Shell.
Si vous préférez exécuter les commandes de référence de l’interface de ligne de commande localement, installez l’interface Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Guide pratique pour exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour finir le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour connaître les autres options de connexion, consultez Se connecter avec Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Si vous souhaitez utiliser Azure PowerShell pour exécuter les étapes décrites dans cet article :
- Si vous choisissez d’utiliser Azure PowerShell localement :
- Installez la dernière version du module Az PowerShell.
- Connectez-vous à votre compte Azure à l’aide de la cmdlet Connect-AzAccount.
- Si vous choisissez d’utiliser Azure Cloud Shell :
- Pour plus d’informations, consultez Vue d’ensemble d’Azure Cloud Shell.
- Si vous choisissez d’utiliser Azure PowerShell localement :
1. Créer des ressources Azure
Avant de commencer, créez un groupe de ressources et une instance de coffre de clés.
az group create --name go-on-azure --location eastus
az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization
Remplacez <keyVaultName>
par un nom global unique.
Notez la id
propriété à partir de la sortie de la az keyvault create
commande. Vous l’utiliserez dans la section suivante pour définir l’étendue de l’autorisation pour le principal de service. La id
valeur a la forme suivante : /subscriptions/<subscriptionId>/resourceGroups/go-on-azure/providers/Microsoft.KeyVault/vaults/<keyVaultName>
.
2. Créer un principal de service Azure
Utilisez l’une des techniques suivantes pour créer un principal de service Azure et lui attribuer le rôle « Key Vault Secrets Bureau r » sur le coffre de clés :
- Option 1 : Créer un principal de service Azure avec une clé secrète
- Option 2 : Créer un principal de service Azure avec un certificat
Pour en savoir plus sur les principaux de service Azure, consultez Objet Principal de service.
L’attribution du rôle « Secrets key Vault Bureau r » au principal du service l’autorise à créer, lire, mettre à jour et supprimer des secrets dans le coffre de clés. Pour en savoir plus sur les rôles intégrés pour Azure Key Vault, consultez Fournir l’accès aux clés, certificats et secrets Key Vault avec un contrôle d’accès en fonction du rôle Azure. Pour en savoir plus sur les rôles intégrés dans Azure, consultez les rôles intégrés Azure.
Option 1 : Créer un principal de service Azure avec une clé secrète
Exécutez les commandes suivantes pour créer un principal de service Azure et lui attribuer le rôle « Key Vault Secrets Bureau r » sur le coffre de clés.
az ad sp create-for-rbac --name <servicePrincipalName> --role "Key Vault Secrets Officer" --scope <keyVaultId>
Remplacez <servicePrincipalName>
et <keyVaultId>
par les valeurs appropriées.
Notez les propriétés et tenant
appId
les password
propriétés de la sortie. Vous aurez besoin de ces informations dans la section suivante.
Après la création, le mot de passe du principal de service ne peut pas être récupéré. Si vous oubliez le mot de passe, vous pouvez réinitialiser les informations d’identification du principal de service.
Option 2 : Créer un principal de service Azure avec un certificat
Exécutez les commandes suivantes pour créer un principal de service Azure qui utilise un certificat et lui attribuer le rôle « Secrets key Vault Bureau r » sur le coffre de clés.
az ad sp create-for-rbac --name <servicePrincipalName> --create-cert --role "Key Vault Secrets Officer" --scope <keyVaultId>
Remplacez <servicePrincipalName>
et <keyVaultId>
par les valeurs appropriées.
Notez les propriétés et tenantId
appId
les fileWithCertAndPrivateKey
propriétés de la sortie. Vous aurez besoin de ces informations dans la section suivante.
3. S’authentifier auprès d’Azure avec un principal de service
En utilisant DefaultAzureCredential
, vous pouvez éviter d’écrire du code spécifique à l’environnement pour l’authentification auprès d’Azure. Avec DefaultAzureCredential
, vous pouvez configurer vos informations d’identification de principal de service en définissant des variables d’environnement.
Choisissez l’une des options suivantes pour configurer les informations d’identification de votre principal de service :
Pour plus d’informations sur DefaultAzureCredential
, consultez Authentification Azure avec Azure SDK pour Go
Option 1 : S’authentifier avec une clé secrète
Définissez les variables d’environnement suivantes :
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>"
Option 2 : S’authentifier avec un certificat
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_CERTIFICATE_PATH |
Chemin d’accès à un fichier de certificat PEM ou PKCS12, y compris une clé privée. Si vous avez suivi les étapes pour Azure CLI, le fichier n’est pas protégé par mot de passe. Si vous avez suivi les étapes d’Azure PowerShell, le fichier est protégé par mot de passe et vous devez également définir la AZURE_CLIENT_CERTIFICATE_PASSWORD variable d’environnement. |
AZURE_CLIENT_CERTIFICATE_PASSWORD |
Mot de passe que vous avez entré lors de la création du principal de service. Nécessaire uniquement si vous avez suivi les étapes d’Azure PowerShell. |
export AZURE_TENANT_ID="<active_directory_tenant_id>"
export AZURE_CLIENT_ID="<service_principal_appid>"
export AZURE_CLIENT_CERTIFICATE_PATH="<azure_client_certificate_path>"
Utiliser DefaultAzureCredential pour authentifier un client de ressources
Après avoir défini les variables d’environnement, vous pouvez utiliser DefaultAzureCredential
dans le module Azure Identity pour authentifier un client de ressources. Le code suivant montre comment obtenir une instance de DefaultAzureCredential
.
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
4. Créer une clé secrète de coffre de clés avec Go
Utilisez l’exemple de code suivant pour vérifier que votre principal de service s’authentifie auprès d’Azure et dispose des autorisations appropriées pour le coffre de clés.
Créez un répertoire appelé
go-on-azure
dans votre répertoire de base.mkdir ~/go-on-azure
Accédez au répertoire
go-on-azure
.cd ~/go-on-azure
Exécutez
go mod init
pour créer le fichiergo.mod
.go mod init go-on-azure
Exécutez
go get
pour installer les modules Go nécessaires.go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity" go get "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets"
Créez un fichier nommé
main.go
et ajoutez le code suivant.package main import ( "context" "fmt" "log" "os" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets" ) func createSecret(name, value string) { keyVaultName := os.Getenv("KEY_VAULT_NAME") keyVaultUrl := fmt.Sprintf("https://%s.vault.azure.net/", keyVaultName) cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("failed to obtain a credential: %v", err) } client, err := azsecrets.NewClient(keyVaultUrl, cred, nil) if err != nil { log.Fatalf("failed to create a client: %v", err) } params := azsecrets.SetSecretParameters{Value: &value} resp, err := client.SetSecret(context.TODO(), name, params, nil) if err != nil { log.Fatalf("failed to create a secret: %v", err) } fmt.Printf("Name: %s, Value: %s\n", *resp.ID, *resp.Value) } func main() { createSecret("ExamplePassword", "hVFkk965BuUv") }
Créez une variable d’environnement nommée
KEY_VAULT_NAME
. Définissez la valeur de la variable d’environnement en spécifiant le nom du coffre Azure Key Vault créé précédemment.export KEY_VAULT_NAME=<keyVaultName>
Remplacez
<keyVaultName>
par le nom de votre instance Azure Key Vault.Exécutez la
go run
commande pour créer le secret du coffre de clés.go run main.go
En cas de réussite, la sortie est similaire à ce qui suit :
Name: https://<keyVaultName>.vault.azure.net/secrets/ExamplePassword/1e697f71d0014761a65641226f2f057b, Value: hVFkk965BuUv
5. Nettoyer les ressources
Si vous ne souhaitez plus utiliser les ressources Azure que vous avez créées dans cet article, il est recommandé de les supprimer. La suppression de ressources inutilisées vous permet d’éviter d’entraîner des frais en cours et de conserver votre abonnement non limité. Le moyen le plus simple de supprimer les ressources que vous avez utilisées dans ce didacticiel consiste à supprimer le groupe de ressources.
az group delete --name go-on-azure --yes
L’argument --yes
indique à la commande de ne pas demander de confirmation.
La commande précédente effectue une suppression réversible sur le coffre de clés dans le groupe de ressources. Pour le supprimer définitivement de votre abonnement, entrez la commande suivante :
az keyvault purge --name <keyVaultName> --no-wait
Remplacez <keyVaultName>
par le nom de votre coffre de clés.
Enfin, vous devez supprimer l’inscription de l’application et le principal de service.
az ad app delete --id <servicePrincipalAppId>
Remplacez <servicePrincipalAppId>
par l’ID d’application de votre principal de service.