Authentification avec Azure SDK pour Go en utilisant une identité managée

Dans ce tutoriel, vous allez configurer une machine virtuelle Azure avec une identité managée pour vous authentifier auprès d’Azure à l’aide du Kit de développement logiciel (SDK) Azure pour Go.

Les identités managées éliminent la nécessité pour les développeurs de gérer les informations d’identification en fournissant une identité directement à une ressource Azure. Les autorisations attribuées à l’identité accordent l’accès aux ressources à d’autres ressources Azure qui prennent en charge les identités managées, en supprimant la nécessité de passer des informations d’identification dans votre application. Vous pouvez utiliser des identités managées pour authentifier et autoriser des applications hébergées par Azure avec d’autres ressources Azure.

Suivez ce tutoriel pour affecter une identité managée à une machine virtuelle et vous authentifier auprès d’Azure en utilisant une identité managée.

Prérequis

  • Abonnement Azure : Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

1. Créer des ressources Azure

Avant de commencer, vous devez créer un groupe de ressources, une machine virtuelle et une instance de coffre de clés.

Déployer une machine virtuelle

Déployez une machine virtuelle sur Azure. Vous exécutez le code Go pour créer un secret dans le coffre de clés Azure à partir de cette machine virtuelle.

  1. Création d’un groupe de ressources Azure.

    az group create --name go-on-azure --location eastus
    

    Définissez le paramètre --location sur la valeur appropriée pour votre environnement.

  2. Créez la machine virtuelle Azure.

    az vm create \
    --resource-group go-on-azure \
    --name go-on-azure-vm \
    --image canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest \
    --admin-username azureuser \
    --admin-password <password>
    

    Remplacez <password> par votre mot de passe.

Pour plus d’informations sur les autres services qui prennent en charge les identités managées, consultez Services qui prennent en charge les identités managées pour les ressources Azure.

Déployer une instance Key Vault

Créez une instance Azure Key Vault en exécutant la commande suivante :

az keyvault create --location eastus --name <keyVaultName> --resource-group go-on-azure --enable-rbac-authorization

Remplacez <keyVaultName> par un nom global unique.

2. Créer une identité managée

Deux types d’identités managées sont pris en charge dans Azure : les identités affectées par le système et les identités affectées par l’utilisateur.

Les identités affectées par le système sont directement attachées à une ressource Azure et limitées à cette seule ressource. Les identités affectées par l’utilisateur sont des ressources autonomes qui peuvent être affectées à une ou plusieurs ressources Azure.

Pour plus d’informations sur la différence entre les identités affectées par le système et celles affectées par l’utilisateur, consultez Types d’identités managées.

Choisissez l’une des options suivantes :

Option 1 : Créer une identité managée affectée par le système

Exécutez les commandes suivantes pour créer une identité managée affectée par le système :

az vm identity assign -g go-on-azure -n go-on-azure-vm

Option 2 : Créer une identité managée affectée par l’utilisateur

Exécutez les commandes suivantes pour créer une identité managée affectée par l’utilisateur :

az identity create -g go-on-azure -n GoUserIdentity

az vm identity assign -g go-on-azure -n go-on-azure-vm --identities GoUserIdentity

Pour plus d’informations, consultez Configurer des identités managées pour des ressources Azure sur une machine virtuelle Azure en utilisant Azure CLI.

3. Attribuer un rôle à l’identité managée

Après avoir créé une identité managée, vous attribuez des rôles pour accorder à l’identité des autorisations d’accès à d’autres ressources Azure. Dans ce tutoriel, vous affectez le rôle intégré de Key Vault Secrets Officer l’identité managée afin que l’application Go puisse créer un secret dans l’instance du coffre de clés.

Choisissez l’une des options suivantes :

Option 1 : Attribuer un rôle à une identité affectée par le système

Exécutez les commandes suivantes pour attribuer le rôle Key Vault Secrets Officer à l’identité managée affectée par le système :

#output system identity principal ID
az vm identity show --name go-on-azure-vm --resource-group go-on-azure --query principalId -o tsv

#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv

az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>

Dans la deuxième commande, remplacez <keyVaultName> par le nom de votre coffre de clés. Dans la dernière commande, remplacez <principalId> et <keyVaultId> par la sortie des deux premières commandes.

Option 2 : Attribuer un rôle à une identité affectée par l’utilisateur

Utilisez les commandes suivantes pour attribuer le rôle Key Vault Secrets Officer à l’identité managée affectée par l’utilisateur :

#output user identity principal ID
az identity show --resource-group go-on-azure --name GoUserIdentity --query principalId -o tsv

#output key vault ID
az keyvault show --name <keyVaultName> --query id -o tsv

az role assignment create --assignee <principalId> --role "Key Vault Secrets Officer" --scope <keyVaultId>

Dans la deuxième commande, remplacez <keyVaultName> par le nom de votre coffre de clés. Dans la dernière commande, remplacez <principalId> et <keyVaultId> par la sortie des deux premières commandes.

Pour en savoir plus sur les rôles intégrés dans 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.

4. Créer une clé secrète de coffre de clés avec Go

Ensuite, connectez-vous avec SSH à la machine virtuelle Azure, installez Go, puis générez le package Go.

Installer Go sur la machine virtuelle

  1. Obtenez l’adresse IP publique de la machine virtuelle Azure.

    az vm show -d -g go-on-azure -n go-on-azure-vm --query publicIps -o tsv
    
  2. Connectez-vous avec SSH à la machine virtuelle.

    ssh azureuser@<public-ip>
    

    Remplacez <public-ip> par l’adresse IP publique de la machine virtuelle Azure.

  3. Installer Go

    sudo add-apt-repository ppa:longsleep/golang-backports;
    sudo apt update;
    sudo apt install golang-go -y
    

Créer le package Go

  1. Créez un répertoire nommé 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/security/keyvault/azsecrets"
    
  5. Créez un fichier main.go et copiez-y 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() {
        keyVaultName := os.Getenv("KEY_VAULT_NAME")
        secretName := "quickstart-secret"
        secretValue := "createdWithGO"
        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: &secretValue}
        resp, err := client.SetSecret(context.TODO(), secretName, 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()
    }
    
    
  6. Créez une variable d’environnement nommée KEY_VAULT_NAME. Remplacez <keyVaultName> par le nom de votre instance de coffre de clés Azure.

    export KEY_VAULT_NAME=<keyVaultName>
    
  7. Exécutez go run la commande pour créer un secret key vault.

    go run main.go
    

    En cas de réussite, la sortie est similaire à ce qui suit :

    Name: https://<keyVaultName>.vault.azure.net/secrets/quickstart-secret/0e0b941824c4493bb3b83045a31b2bf7, Value: createdWithGO
    

Vous pouvez vérifier que le secret du coffre de clés a été créé à l’aide d’Azure PowerShell, d’Azure CLI ou du Portail Azure.

Remarque

Si vous utilisez Azure CLI ou Azure PowerShell, vous devez vous assurer que votre compte d’utilisateur Azure est affecté à un rôle qui lui permet de lire des secrets dans le coffre de clés, comme « Secrets key Vault Bureau r » ou « Utilisateur des secrets Key Vault ».

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 --force-deletion-types Microsoft.Compute/virtualMachines --yes

L’argument force-deletion-type indique à la commande de forcer la suppression de machines virtuelles dans le groupe de ressources. 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.

Étapes suivantes