Authentification Azure SDK pour Go avec un principal de service

Dans ce tutoriel, vous allez utiliser Azure SDK pour Go pour vous authentifier auprès d’Azure avec un principal de service Azure en utilisant une clé secrète ou un certificat.

Les principaux de service Azure définissent la stratégie d’accès et les autorisations dans un locataire Microsoft Entra. Activation des fonctionnalités de base, comme l’authentification lors de la connexion et l’autorisation lors de l’accès aux ressources. Suppression de la nécessité d’utiliser des comptes personnels pour accéder à des ressources Azure. Le module Identité Azure d’Azure SDK pour Go offre un moyen pratique de s’authentifier auprès d’Azure en utilisant un principal de service avec des variables d’environnement, une clé secrète ou 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.

1. Configurer votre environnement

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

Remplacez <keyVaultName> par un nom global unique. Prenez également note de Id la sortie, vous l’utiliserez pour l’étendue du compte de service.

2. Créer un principal de service Azure

Utilisez une des techniques suivantes pour créer un principal de service Azure :

Pour en savoir plus sur les principaux de service Azure, consultez Objet Principal de service.

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.

az ad sp create-for-rbac --name `<servicePrincipalName>` --role Contributor --scope <resourceGroupId>

Remplacez <servicePrincipalName> et <resourceGroupId> par les valeurs appropriées.

N’oubliez pas de copier la valeur de mot de passe, car elle ne peut pas être récupérée ultérieurement. Si vous oubliez le mot de passe, effectuez une réinitialisation des informations d’identification du principal du service.

Option 2 : Créer un principal de service Azure avec un certificat

az ad sp create-for-rbac --name <servicePrincipal> --create-cert --role Contributor --scope <resourceGroupId>

Remplacez <servicePrincipalName> et <resourceGroupId> par les valeurs appropriées.

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.

Utilisez DefaultAzureCredential pour configurer les informations d’identification de votre principal de service en définissant des variables d’environnement.

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

Utiliser DefaultAzureCredential pour authentifier ResourceClient

Utilisez la fonction NewDefaultAzureCredential du module Identité Azure pour authentifier un ResourceClient.

cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
    log.Fatalf("failed to obtain a credential: %v", err)
}

4. Exemple de code

Utilisez l’exemple de code suivant pour vérifier que votre principal de service s’authentifie auprès d’Azure et qu’il dispose des autorisations appropriées pour le groupe de ressources.

  1. Créez un répertoire appelé go-on-azure dans votre répertoire de base.

    mkdir ~/go-on-azure
    
  2. Accédez au répertoire go-on-azure.

    cd ~/go-on-azure
    
  3. Exécutez go mod init pour créer le fichier go.mod.

    go mod init go-on-azure
    
  4. 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/keyvault/azsecrets"
    
  5. 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/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)
    	}
    
    	resp, err := client.SetSecret(context.TODO(), name, value, 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")
    }
    
    
  6. 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.

  7. Exécutez la go run commande pour créer le secret du coffre de clés.

     go run main.go
    

Étapes suivantes