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.
Les applications hébergées en dehors d’Azure, comme localement ou dans un centre de données, doivent utiliser un principal de service d’application pour s’authentifier auprès d’Azure lors de l’accès aux ressources Azure. Les objets principaux du service d’application sont créés à l’aide du processus d’inscription d’application dans Azure. Lorsque vous créez un principal de service d’application, un ID client et une clé secrète client sont générés pour votre application. Stockez l’ID client, la clé secrète client et votre ID de locataire dans les variables d’environnement afin que le Kit de développement logiciel (SDK) Azure pour Go puisse les utiliser pour authentifier votre application auprès d’Azure au moment de l’exécution.
Créez une inscription d’application différente pour chaque environnement où l’application est hébergée. Cette configuration vous permet de configurer des autorisations de ressources spécifiques à l’environnement pour chaque principal de service et de s’assurer qu’une application déployée dans un environnement n’accède pas aux ressources Azure dans un autre environnement.
1 - Inscrire l’application dans Azure
Vous pouvez inscrire une application auprès d’Azure à l’aide du portail Azure ou d’Azure CLI.
az ad sp create-for-rbac --name <app-name>
La sortie de commande est similaire à ce qui suit. Notez ces valeurs ou laissez cette fenêtre ouverte, car vous en avez besoin dans les étapes suivantes et ne pouvez pas afficher à nouveau la valeur de mot de passe (clé secrète client).
{
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"displayName": "msdocs-python-sdk-auth-prod",
"password": "Ee5Ff~6Gg7.-Hh8Ii9Jj0Kk1Ll2Mm3_Nn4Oo5Pp6",
"tenant": "aaaabbbb-0000-cccc-1111-dddd2222eeee"
}
2 - Attribuer des rôles au principal du service d’application
Ensuite, vous devez déterminer quels rôles (autorisations) votre application a besoin sur les ressources et affecter ces rôles à votre application. Les rôles peuvent être attribués au niveau d’une ressource, d’un groupe de ressources ou d’une étendue d’abonnement. Cet exemple montre comment attribuer des rôles pour le principal de service dans l’étendue du groupe de ressources, car la plupart des applications regroupent toutes leurs ressources Azure dans un seul groupe de ressources.
Attribuez un rôle à un principal de service dans Azure à l’aide de la commande az role assignment create .
az role assignment create --assignee {appId} \
--scope /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName} \
--role "{roleName}"
Pour obtenir les noms de rôles auxquels un principal de service peut être affecté, utilisez la commande az role definition list .
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Par exemple, pour autoriser le principal de service avec l’appId de 00001111-aaaa-2222-bbbb-3333cccc4444 un accès en lecture, écriture et suppression aux conteneurs d’objets blob Azure Storage et aux données dans tous les comptes de stockage du groupe de ressources msdocs-go-sdk-auth-example dans l’abonnement portant l’ID aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e, vous devriez affecter le principal de service de l’application au rôle Contributeur aux données blob de stockage en utilisant la commande suivante.
az role assignment create --assignee 00001111-aaaa-2222-bbbb-3333cccc4444 \
--scope /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-go-sdk-auth-example \
--role "Storage Blob Data Contributor"
Pour plus d’informations sur l’attribution d’autorisations au niveau de la ressource ou de l’abonnement à l’aide d’Azure CLI, consultez l’article Affecter des rôles Azure à l’aide d’Azure CLI.
3 - Configurer des variables d’environnement pour l’application
Définissez les variables d'environnement AZURE_CLIENT_ID, AZURE_TENANT_ID, et AZURE_CLIENT_SECRET pour le processus exécutant votre application Go, afin de rendre disponibles les informations d'identification du principal du service d'application au moment de l'exécution. L’objet DefaultAzureCredential récupère les informations du principal de service à partir de ces variables d’environnement.
| Nom de la variable | Valeur |
|---|---|
AZURE_CLIENT_ID |
ID d’application d’un principal de service Azure |
AZURE_TENANT_ID |
ID de locataire 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>"
4 - Implémenter DefaultAzureCredential dans votre application
Pour authentifier les objets clients du Kit de développement logiciel (SDK) Azure sur Azure, votre application doit utiliser le DefaultAzureCredential type à partir du azidentity package.
Commencez par ajouter le azidentity package à votre application.
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
Ensuite, pour tout code Go qui instancie un client du Kit de développement logiciel (SDK) Azure dans votre application, procédez comme suit :
- Importez le
azidentitypackage. - Créez une instance de
DefaultAzureCredentialtype. - Transmettez l’instance de type
DefaultAzureCredentialau constructeur du client Azure SDK.
Le segment de code suivant montre un exemple.
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>)
}
Lorsque le code instancie DefaultAzureCredential, il lit les variables AZURE_TENANT_ID, AZURE_CLIENT_ID et AZURE_CLIENT_SECRET pour récupérer les informations du principal de service d'application nécessaires pour se connecter à Azure.