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 à la ressource un accès à d’autres ressources Azure qui prennent en charge les identités managées. Suppression de l’obligation pour vous de passer des informations d’identification à votre application.

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. Configurer votre environnement

Avant de commencer, vous devez configurer votre environnement.

Déployer une machine virtuelle

Déployez une machine virtuelle sur Azure. Vous allez exécuter le code Go pour créer une clé secrète 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:ubuntuserver:19.04: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

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 <UserIdentityId>

Remplacez <UserIdentityId> par l’ID de l’identité de l’utilisateur managé.

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 allez attribuer le rôle intégré Key Vault Contributor à l’identité managée afin que l’application Go puisse créer une clé secrète dans l’instance de 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 Contributor à 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
scope=$(az keyvault show --name go-on-azure-kv --query id -o tsv)

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

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

Utilisez les commandes suivantes pour attribuer le rôle Key Vault Contributor à 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 go-on-azure-kv --query id -o tsv

az role assignment create --assignee '<principalId>' --role 'Key Vault Contributor' --scope '<keyVaultId>'

Pour plus d’informations sur les rôles intégrés, consultez Rôles intégrés d’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.

    mkidr ~/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 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/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)
        }
    
        resp, err := client.SetSecret(context.TODO(), secretName, secretValue, 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()
    }
    
    

Avant d’exécuter le code, 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. Remplacez <KeyVaultName> par le nom de votre instance Azure Key Vault.

export KEY_VAULT_NAME=<KeyVaultName>

Ensuite, exécutez go run la commande pour créer un secret key vault.

go run main.go

Vérifiez que la clé secrète du coffre de clés a été créée en utilisant Azure PowerShell, Azure CLI ou le portail Azure.

Étapes suivantes