Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’approche recommandée pour authentifier une application hébergée Azure sur d’autres ressources Azure consiste à utiliser une identité managed. Cette approche est prise en charge pour la plupart des services Azure, y compris les applications hébergées sur Azure App Service, Azure Container Apps et Azure Virtual Machines. Découvrez plus d’informations sur les différentes techniques et approches d’authentification sur la page vue d’ensemble de l’authentification. Dans les sections à venir, vous allez apprendre :
- Concepts essentiels de l’identité managée
- Comment créer une identité managée affectée par le système pour votre application
- Comment attribuer des rôles à l’identité managée affectée par le système
- Comment s’authentifier à l’aide de l’identité managée affectée par le système à partir de votre code d’application
Concepts essentiels de l’identité managée
Une identité managée permet à votre application de se connecter en toute sécurité à d’autres ressources Azure sans utiliser de clés secrètes ou d’autres secrets d’application. En interne, Azure effectue le suivi de l'identité et des ressources auxquelles il est autorisé à se connecter. Azure utilise ces informations pour obtenir automatiquement des jetons Microsoft Entra pour que l’application lui permette de se connecter à d’autres ressources Azure.
Il existe deux types d’identités managées à prendre en compte lors de la configuration de votre application hébergée :
- Les identités managées affectées par le système sont activées directement sur une ressource Azure et sont liées à son cycle de vie. Lorsque la ressource est supprimée, Azure supprime automatiquement l’identité pour vous. Les identités affectées par le système fournissent une approche minimaliste de l’utilisation d’identités managées.
- Identités managées attribuées par l'utilisateur sont créées en tant qu'entités autonomes d'Azure et offrent une plus grande flexibilité et des fonctionnalités. Elles sont idéales pour les solutions impliquant plusieurs ressources Azure qui doivent partager les mêmes identités et autorisations. Par exemple, si plusieurs machines virtuelles doivent accéder au même ensemble de ressources Azure, une identité managée affectée par l’utilisateur fournit une réutilisation et une gestion optimisée.
Conseil / Astuce
En savoir plus sur la sélection et la gestion des identités managées affectées par le système et affectées par l’utilisateur dans l’article recommandations sur les meilleures pratiques d’identité managée .
Les sections suivantes décrivent les étapes permettant d’activer et d’utiliser une identité managée affectée par le système pour une application hébergée Azure. Si vous devez utiliser une identité managée affectée par l’utilisateur, consultez l’article sur les identités managées affectées par l’utilisateur pour plus d’informations.
Activer une identité managée affectée par le système sur la ressource d’hébergement Azure
Pour commencer à utiliser une identité managée affectée par le système avec votre application, activez l’identité sur la ressource Azure hébergeant votre application, telle qu’une Azure App Service, une Azure Container Apps ou une instance Azure Virtual Machines.
Vous pouvez activer une identité managée affectée par le système pour une ressource Azure à l’aide du portail Azure ou du Azure CLI.
Dans le portail Azure, accédez à la ressource qui héberge le code de votre application, telle qu’une instance Azure App Service ou Azure Container Apps.
Dans la page Vue d'ensemble de la ressource, développez Paramètres et sélectionnez Identité dans la navigation.
Dans la page Identité , basculez le curseur Étatsur Activé.
Sélectionnez Enregistrer pour appliquer vos modifications.
Attribuer des rôles à l’identité managée
Ensuite, déterminez les rôles dont votre application a besoin et attribuez ces rôles à l’identité managée. Vous pouvez attribuer des rôles à une identité managée dans les étendues suivantes :
- ressource: les rôles attribués s’appliquent uniquement à cette ressource spécifique.
- groupe de ressources: les rôles attribués s’appliquent à toutes les ressources contenues dans le groupe de ressources.
- Abonnement: les rôles attribués s’appliquent à toutes les ressources contenues dans l’abonnement.
L’exemple suivant montre comment attribuer des rôles à l’étendue du groupe de ressources, car de nombreuses applications gèrent toutes leurs ressources Azure associées à l’aide d’un seul groupe de ressources.
Accédez à la page Vue d’ensemble du groupe de ressources qui contient l’application avec l’identité managée affectée par le système.
Sélectionnez Contrôle d'accès (IAM) dans le menu de gauche.
Dans la page contrôle d’accès (IAM), sélectionnez + Ajouter dans le menu supérieur, puis choisissez Ajouter une attribution de rôle pour accéder à la page Ajouter une attribution de rôle.
La page d'Ajouter une attribution de rôle présente un flux de travail à onglets et à plusieurs étapes pour assigner des rôles à des identités. Sous l'onglet Rôle initial, utilisez la zone de recherche en haut pour localiser le rôle que vous souhaitez attribuer à l'identité.
Sélectionnez le rôle dans les résultats, puis choisissez Suivant pour accéder à l’onglet Membres.
Pour l'option Attribuer l'accès à, sélectionnez Identité gérée.
Pour l'option Membres, choisissez + Sélectionner les membres pour ouvrir le panneau Sélectionner les identités gérées.
Dans le panneau Sélectionner les identités gérées, utilisez les menus déroulants Abonnement et Identité gérée pour filtrer les résultats de la recherche de vos identités. Utilisez la zone de recherche Select pour rechercher l’identité système que vous avez activée pour la ressource Azure hébergeant votre application.
Sélectionnez l’identité et choisissez Sélectionnez en bas du panneau pour continuer.
Sélectionnez Réviser + assigner en bas de la page.
Sous l’onglet final Révision + affecter, sélectionnez Révision + affecter pour compléter le processus de travail.
S’authentifier auprès de Azure services à partir de votre application
Le module azidentity fournit diverses credentials - implémentations de TokenCredential adaptées à la prise en charge de différents scénarios et flux d’authentification Microsoft Entra. Étant donné que l’identité managée n’est pas disponible lors de l’exécution locale, les étapes à suivre illustrent les informations d’identification à utiliser dans quel scénario :
-
Environnement de développement local : pendant le développement local uniquement, utilisez DefaultAzureCredential pour une chaîne d’informations d’identification préconfigurée et avisée.
DefaultAzureCredentialdécouvre les informations d’identification de l’utilisateur à partir de vos outils de développement locaux, tels que le Azure CLI. Il offre également une flexibilité et une commodité pour les nouvelles tentatives, les temps d’attente pour les réponses et la prise en charge de plusieurs options d’authentification. Consultez l’article Authenticate pour Azure services pendant le développement local pour en savoir plus. - applications hébergées Azure : quand votre application s’exécute dans Azure, utilisez ManagedIdentityCredential pour découvrir en toute sécurité l’identité managée configurée pour votre application. La spécification de ce type exact d’informations d’identification empêche les autres informations d’identification disponibles d’être récupérées de manière inattendue.
Implémenter le code
Ajoutez le module azidentity.
Dans un terminal de votre choix, accédez au répertoire du projet d’application et exécutez les commandes suivantes :
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Azure services sont accessibles à l’aide de clients spécialisés à partir des différentes bibliothèques clientes Azure SDK. Pour tout code Go qui instancie un client Azure SDK dans votre application, vous devez :
- Importez le package
azidentity. - Créez une instance de type
DefaultAzureCredential. - Transmettez l'instance de type
DefaultAzureCredentialau constructeur du client Azure SDK. - Définissez la
AZURE_TOKEN_CREDENTIALSvariable d’environnement àManagedIdentityCredentialpour garantir queDefaultAzureCredentialutilise uniquement l'identité managée. Cette pratique rend l’authentification plus prévisible et plus facile à déboguer lorsqu’elle est déployée sur Azure. Pour plus d’informations, consultez Utiliser des informations d’identification spécifiques.
Un exemple de ces étapes est illustré dans l'extrait de code suivant avec un client de Blob de stockage Azure.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
const (
account = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
containerName = "sample-container"
blobName = "sample-blob"
sampleFile = "path/to/sample/file"
)
func main() {
// create a credential
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
// TODO: handle error
}
// create a client for the specified storage account
client, err := azblob.NewClient(account, cred, nil)
if err != nil {
// TODO: handle error
}
// TODO: perform some action with the azblob Client
// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}
Dans l’article Aperçu de l’authentification Azure SDK pour Go, DefaultAzureCredential prend en charge plusieurs méthodes d’authentification et détermine la méthode utilisée au moment de l’exécution. L’avantage de cette approche est que votre application peut utiliser différentes méthodes d’authentification dans différents environnements sans implémenter de code spécifique à l’environnement. Lorsque le code précédent est exécuté sur votre station de travail pendant le développement local, DefaultAzureCredential utilise un principal de service d’application, tel que déterminé par les paramètres d’environnement ou les informations d’identification de l’outil développeur pour s’authentifier auprès d’autres ressources Azure. Par conséquent, le même code peut être utilisé pour authentifier votre application pour Azure ressources pendant le développement local et lorsqu’elle est déployée sur Azure.
Important
DefaultAzureCredential simplifie l’authentification lors du développement d’applications qui se déploient sur Azure en combinant les informations d’identification utilisées dans les environnements d’hébergement Azure et les informations d’identification utilisées dans le développement local. En production, il est préférable d’utiliser un type d’informations d’identification spécifique afin que l’authentification soit plus prévisible et plus facile à déboguer.
Une alternative à DefaultAzureCredential consiste à utiliser ManagedIdentityCredential. Les étapes d’utilisation ManagedIdentityCredential sont les mêmes que pour l’utilisation du DefaultAzureCredential type.
Un exemple de ces étapes est illustré dans l'extrait de code suivant avec un client de Blob de stockage Azure.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)
const (
// Replace placeholder text with your storage account name
account = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/"
containerName = "sample-container"
blobName = "sample-blob"
sampleFile = "path/to/sample/file"
)
func main() {
// create a credential
cred, err := azidentity.NewManagedIdentityCredential(nil)
// When using User Assigned Managed Identity use this instead and pass your client id in the options
// clientID := azidentity.ClientID("abcd1234-...")
// opts := azidentity.ManagedIdentityCredentialOptions{ID: clientID}
// cred, err := azidentity.NewManagedIdentityCredential(&opts)
if err != nil {
// TODO: handle error
}
// create a client for the specified storage account
client, err := azblob.NewClient(account, cred, nil)
if err != nil {
// TODO: handle error
}
// TODO: perform some action with the azblob Client
// _, err = client.DownloadFile(context.TODO(), <containerName>, <blobName>, <target_file>, <DownloadFileOptions>)
}