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.
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, 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.
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.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
- Option 2 : Créer une identité managée affectée par l’utilisateur
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
- Option 2 : Attribuer un rôle à une identité affectée par l’utilisateur
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
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
Connectez-vous avec SSH à la machine virtuelle.
ssh azureuser@<public-ip>
Remplacez
<public-ip>
par l’adresse IP publique de la machine virtuelle Azure.Installer Go
sudo add-apt-repository ppa:longsleep/golang-backports; sudo apt update; sudo apt install golang-go -y
Créer le package Go
Créez un répertoire nommé
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
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() }
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>
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.