Procédure pas à pas : Authentification intégrée pour les applications Python avec les services AzureWalkthrough: Integrated authentication for Python apps with Azure services

Azure Active Directory (Azure AD) et Azure Key Vault offrent un moyen complet et pratique pour les applications de s’authentifier auprès des services Azure ainsi que des services tiers où des clés d’accès sont impliquées.Azure Active Directory (Azure AD) along with Azure Key Vault provide a comprehensive and convenient means for applications to authenticate with Azure services as well as third-party services where access keys are involved.

Après avoir fourni des informations générales, cette procédure pas à pas décrit ces fonctionnalités d’authentification dans le contexte de l’exemple, github.com/Azure-Samples/python-integrated-authentication.After providing some background, this walkthrough explains these authentication features in the context of the sample, github.com/Azure-Samples/python-integrated-authentication.

Pour des raisons pratiques, l’exemple est déjà déployé sur Azure, ce qui vous permet de le voir en action.For convenience, the sample is already deployed to Azure so you can see it in operation. Si vous souhaitez déployer l’exemple sur votre propre abonnement Azure, le dépôt comprend aussi des scripts de déploiement Azure CLI.Should you want to deploy the sample to your own Azure subscription, the repository also includes Azure CLI deployment scripts.

Première partie : Arrière-planPart 1: Background

Bien que de nombreux services Azure reposent uniquement sur le contrôle d’accès en fonction du rôle pour l’autorisation, certains services contrôlent l’accès à leurs ressources respectives à l’aide de secrets ou de clés.Although many Azure services rely solely on role-based access control for authorization, certain services control access to their respective resources by using secrets or keys. Ces services incluent le stockage Azure, les bases de données, Cognitive Services, Key Vault et Event Hubs.Such services include Azure Storage, databases, Cognitive Services, Key Vault, and Event Hubs.

Lorsque vous créez une application cloud qui utilise des ressources au sein de ces services, vous utilisez le portail Azure, l’interface de ligne de commande Azure ou Azure PowerShell pour créer et configurer des clés pour votre application qui sont liées à des stratégies d’accès spécifiques.When creating a cloud app that uses resources within these services, you use the Azure portal, the Azure CLI, or Azure PowerShell to create and configure keys for your app that are tied to specific access policies. Ces clés empêchent l’accès à ces ressources spécifiques à l’application par tout autre code non autorisé.Those keys prevent access to those app-specific resources by any other unauthorized code.

Dans cette conception générale, les applications cloud doivent généralement gérer ces clés et s’authentifier avec chaque service individuellement, un processus qui peut être à la fois fastidieux et sujet aux erreurs.Within this general design, cloud apps must typically manage those keys and authenticate with each service individually, a process that can be both tedious and error-prone. La gestion des clés directement dans le code de l’application risque également d’exposer ces clés dans le contrôle de code source et les clés peuvent être stockées sur des stations de travail de développeur non sécurisées.Managing keys directly in app code also risks exposing those keys in source control and keys might be stored on unsecured developer workstations.

Heureusement, Azure fournit deux services spécifiques pour simplifier le processus et renforcer la sécurité :Fortunately, Azure provides two specific services to simplify the process and provide greater security:

  • Azure Key Vault assure un stockage cloud sécurisé pour les clés d’accès (ainsi que les clés de chiffrement et les certificats, qui ne sont pas abordés dans cet article).Azure Key Vault provides secure cloud-based storage for access keys (along with cryptographic keys and certificates, which are not covered in this article). En utilisant Key Vault, l’application accède à ces clés uniquement au moment de l’exécution de sorte qu’elles n’apparaissent jamais directement dans le code source.By using Key Vault, the app accesses such keys only at run time so that they never appear directly in source code.

  • Avec les identités managées Azure Active Directory (Azure AD), l’application doit s’authentifier une seule fois avec Active Directory.With Azure Active Directory (Azure AD) Managed Identities, the app needs to authenticate only once with Active Directory. L’application est ensuite automatiquement authentifiée auprès d’autres services Azure, dont Key Vault.The app is then automatically authenticated with other Azure services, including Key Vault. Par conséquent, votre code ne doit jamais se préoccuper de clés ou d’autres informations d’identification pour ces services Azure.As a result, your code never needs to concern itself with keys or other credentials for those Azure services. Mieux encore, vous pouvez exécuter le même code localement et dans le cloud avec des exigences de configuration minimales.Better still, you can run the same code both locally and in the cloud with minimal configuration requirements.

En utilisant Azure AD et Key Vault ensemble, votre application n’a ainsi jamais besoin de s’authentifier avec des services Azure individuels et peut accéder facilement et en toute sécurité à toutes les clés nécessaires pour des services tiers.By using Azure AD and Key Vault together, then, your app never needs to authenticate itself with individual Azure services, and can easily and securely access any keys necessary for third-party services.

Important

Cet article utilise le terme générique « clé » commun pour faire référence à ce qui est stocké en tant que « secrets » dans Azure Key Vault, comme une clé d’accès pour une API REST.This article uses the common, generic term "key" to refer to what are stored as "secrets" in Azure Key Vault, such as an access key for a REST API. Cette utilisation ne doit pas être confondue avec la gestion par Key Vault de clés de chiffrement, qui est une fonctionnalité distincte des secrets de Key Vault.This usage should not be confused with Key Vault's management of crytographic keys, which is a separate feature from Key Vault's secrets.

Exemple de scénario d’application cloudExample cloud app scenario

Pour comprendre de façon plus approfondie le processus d’authentification d’Azure, envisagez le scénario suivant :To understand Azure's authentication process more deeply, consider the following scenario:

  • Une application principale expose un point de terminaison d’API public (non authentifié) qui répond aux requêtes HTTP avec des données JSON.A main app exposes a public (non-authenticated) API endpoint that responds to HTTP requests with JSON data. L’exemple de point de terminaison, comme indiqué dans cet article, est implémenté en tant qu’application Flask simple déployée sur Azure App Service.The example endpoint as shown in this article is implemented as a simple Flask app deployed to Azure App Service.

  • Pour générer sa réponse, l’API appelle une API tierce qui requiert une clé d’accès.To generate its response, the API invokes a third-party API that requires an access key. L’application récupère cette clé d’accès auprès d’Azure Key Vault au moment de l’exécution.The app retrieves that access key from Azure Key Vault at run time.

  • Avant de retourner sa réponse, l’API écrit un message dans une file d’attente de stockage Azure en vue d’un traitement ultérieur.Before returning its response, the API writes a message to an Azure Storage Queue for later processing. (Le traitement spécifique de ces messages n’est pas pertinent pour le scénario principal.)(The specific processing of these messages is not relevant to the main scenario.)

Diagramme du scénario d’application

Notes

Bien qu’un point de terminaison d’API public soit généralement protégé par sa propre clé d’accès, dans le cadre de cet article, nous partons du principe que le point de terminaison est ouvert et non authentifié.Although a public API endpoint is usually protected by its own access key, for the purposes of this article we assume the endpoint is open and unauthenticated. Cette hypothèse évite toute confusion entre les besoins d’authentification de l’application et ceux d’un appelant externe de ce point de terminaison.This assumption avoids any confusion between the app's authentication needs with those of an external caller of this endpoint. Ce scénario n’illustre pas un tel appelant externe.This scenario doesn't demonstrate such an external caller.