S’authentifier auprès des ressources Azure à partir d’applications Python hébergées localement
Les applications hébergées en dehors d’Azure (par exemple, localement ou dans un centre de données tiers) 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. Lorsqu’un principal de service d’application est créé, un ID client et une clé secrète client sont générés pour votre application. L’ID client, la clé secrète client et votre ID de locataire sont ensuite stockés dans des variables d’environnement afin qu’elles puissent être utilisées par le Kit de développement logiciel (SDK) Azure pour Python pour authentifier votre application auprès d’Azure au moment de l’exécution.
Une inscription d’application différente doit être créée pour chaque environnement dans lequel l’application est hébergée. Cela 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 ne communique pas avec les ressources Azure qui font partie d’un autre environnement.
1. Enregistrement de l'application dans Azure AD
Une application peut être inscrite auprès d’Azure à l’aide du Portail Azure ou d’Azure CLI.
az ad sp create-for-rbac --name <app-name>
La sortie produite par cette commande est semblable à ce qui suit : Notez ces valeurs ou laissez cette fenêtre ouverte, car vous aurez besoin de ces valeurs dans les étapes suivantes et ne pourrez plus afficher la valeur de mot de passe (clé secrète client).
{
"appId": "00000000-0000-0000-0000-000000000000",
"displayName": "msdocs-python-sdk-auth-prod",
"password": "abcdefghijklmnopqrstuvwxyz",
"tenant": "33333333-3333-3333-3333-333333333333"
}
2 - Attribuer des rôles au principal du service d’application
Ensuite, vous devez déterminer les rôles (autorisations) dont votre application a besoin sur les ressources et affecter ces rôles à votre application. Les rôles peuvent se voir attribuer un rôle 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 à l’étendue du groupe de ressources, car la plupart des applications regroupent toutes leurs ressources Azure dans un seul groupe de ressources.
Un principal de service se voit attribuer un rôle 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 00000000-0000-0000-0000-000000000000
lecture, d’écriture et de suppression de l’accès à Stockage Azure conteneurs d’objets blob et aux données dans tous les comptes de stockage du groupe de ressources msdocs-python-sdk-auth-example dans l’abonnement avec l’ID11111111-1111-1111-1111-111111111111
, vous devez affecter le principal du service d’application au rôle contributeur aux données blob Stockage à l’aide de la commande suivante.
az role assignment create --assignee 00000000-0000-0000-0000-000000000000 \
--scope /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/msdocs-python-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 Attribuer des rôles Azure à l’aide d’Azure CLI.
3 - Configurer des variables d’environnement pour l’application
Vous devez définir les variables d’environnement AZURE_TENANT_ID
et AZURE_CLIENT_SECRET
les AZURE_CLIENT_ID
variables d’environnement du processus qui exécute votre application Python pour rendre les informations d’identification du principal du service d’application disponibles pour votre application au moment de l’exécution. L’objet DefaultAzureCredential
recherche les informations du principal de service dans ces variables d’environnement.
Lorsque vous utilisez Gunicorn pour exécuter des applications web Python dans un environnement de serveur UNIX, les variables d’environnement d’une application peuvent être spécifiées à l’aide de la EnvironmentFile
directive dans le gunicorn.server
fichier, comme indiqué ci-dessous.
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=www-user
Group=www-data
WorkingDirectory=/path/to/python-app
EnvironmentFile=/path/to/python-app/py-env/app-environment-variables
ExecStart=/path/to/python-app/py-env/gunicorn --config config.py wsgi:app
[Install]
WantedBy=multi-user.target
Le fichier spécifié dans la EnvironmentFile
directive doit contenir une liste de variables d’environnement avec leurs valeurs, comme indiqué ci-dessous.
AZURE_CLIENT_ID=<value>
AZURE_TENANT_ID=<value>
AZURE_CLIENT_SECRET=<value>
4 - Implémenter DefaultAzureCredential dans l’application
Pour authentifier les objets clients du Kit de développement logiciel (SDK) Azure sur Azure, votre application doit utiliser la DefaultAzureCredential
classe à partir du azure.identity
package.
Commencez par ajouter le package azure.identity à votre application.
pip install azure-identity
Ensuite, pour tout code Python qui crée un objet client du Kit de développement logiciel (SDK) Azure dans votre application, vous devez :
- Importez la
DefaultAzureCredential
classe à partir duazure.identity
module. - Créez un objet
DefaultAzureCredential
. - Transmettez l’objet
DefaultAzureCredential
au constructeur d’objet client du Kit de développement logiciel (SDK) Azure.
Un exemple de cela est illustré dans le segment de code suivant.
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient
# Acquire a credential object
token_credential = DefaultAzureCredential()
blob_service_client = BlobServiceClient(
account_url="https://<my_account_name>.blob.core.windows.net",
credential=token_credential)
Lorsque le code ci-dessus instancie l’objet DefaultAzureCredential
, DefaultAzureCredential
lit les variables AZURE_TENANT_ID
d’environnement, AZURE_CLIENT_ID
et AZURE_CLIENT_SECRET
pour que les informations du principal du service d’application se connectent à Azure avec.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour