Authentification Spring Cloud Azure
Cet article s’applique à :✅ version 4.19.0 ✅ version 5.19.0
Cet article décrit toutes les méthodes d’authentification Spring Cloud Azure.
DefaultAzureCredential
Le DefaultAzureCredential
convient à la plupart des scénarios où l’application est destinée à être exécutée dans le cloud Azure. Cela est dû au fait que le DefaultAzureCredential
combine les informations d’identification couramment utilisées pour s’authentifier lorsqu’elles sont déployées avec des informations d’identification utilisées pour s’authentifier dans un environnement de développement.
Note
DefaultAzureCredential
vise à simplifier la prise en main du Kit de développement logiciel (SDK) en gérant des scénarios courants avec des comportements par défaut raisonnables. Si vous souhaitez un contrôle supplémentaire ou que votre scénario n’est pas pris en charge par les paramètres par défaut, vous devez utiliser d’autres types d’informations d’identification.
Le DefaultAzureCredential
tentera de s’authentifier via les mécanismes suivants dans l’ordre :
- Environnement : le
DefaultAzureCredential
lit les informations de compte spécifiées via des variables d’environnement et l’utilise pour s’authentifier. - Identité managée : si l’application est déployée sur un hôte Azure avec l’identité managée activée, le
DefaultAzureCredential
s’authentifie auprès de ce compte. - IntelliJ : si vous avez authentifié via Azure Toolkit pour IntelliJ, le
DefaultAzureCredential
s’authentifie avec ce compte. - Visual Studio Code : si vous vous êtes authentifié via le plug-in compte Azure Visual Studio Code, le
DefaultAzureCredential
s’authentifie auprès de ce compte. - Azure CLI : si vous avez authentifié un compte via la commande Azure CLI
az login
, leDefaultAzureCredential
s’authentifie avec ce compte.
Pourboire
Vérifiez que le principal de sécurité a reçu une autorisation suffisante pour accéder à la ressource Azure. Pour plus d’informations, consultez Autoriser l’accès avec microsoft Entra ID.
Note
Étant donné que Spring Cloud Azure AutoConfigure 4.1.0, un ThreadPoolTaskExecutor
bean nommé springCloudAzureCredentialTaskExecutor
sera automatiquement inscrit par défaut et gérera tous les threads créés par Azure Identity. Le nom de chaque thread géré par ce pool de threads est préfixé par az-identity-
. Cette ThreadPoolTaskExecutor
haricot est indépendante de la Executor
bean fournie par Spring Boot.
Identités managées
Un défi courant est la gestion des secrets et des informations d’identification utilisés pour sécuriser la communication entre différents composants constituant une solution. Les identités managées éliminent la nécessité de gérer les informations d’identification. Les identités managées fournissent une identité pour les applications à utiliser lors de la connexion aux ressources qui prennent en charge l’authentification Microsoft Entra. Les applications peuvent utiliser l’identité managée pour obtenir des jetons Microsoft Entra. Par exemple, une application peut utiliser une identité managée pour accéder à des ressources telles qu’Azure Key Vault, où vous pouvez stocker des informations d’identification de manière sécurisée ou pour accéder aux comptes de stockage.
Nous encourageons l’utilisation de l’identité managée au lieu d’utiliser la chaîne de connexion ou la clé dans votre application, car elle est plus sécurisée et enregistre les problèmes de gestion des secrets et des informations d’identification. Dans ce cas, DefaultAzureCredential
pourrait mieux servir le scénario de développement local à l’aide d’informations de compte stockées localement, puis de déployer l’application sur Azure Cloud et d’utiliser l’identité managée.
Types d’identité managée
Il existe deux types d’identités managées :
- affectée par le système : certains services Azure vous permettent d’activer une identité managée directement sur une instance de service. Lorsque vous activez une identité managée affectée par le système, une identité est créée dans Microsoft Entra lié au cycle de vie de cette instance de service. Par conséquent, lorsque la ressource est supprimée, Azure supprime automatiquement l’identité pour vous. Par conception, seule cette ressource Azure peut utiliser cette identité pour demander des jetons à partir de Microsoft Entra ID.
- affectée par l’utilisateur : vous pouvez également créer une identité managée en tant que ressource Azure autonome. Vous pouvez créer une identité managée affectée par l’utilisateur et l’affecter à une ou plusieurs instances d’un service Azure. Avec les identités managées affectées par l’utilisateur, l’identité est gérée séparément des ressources qui l’utilisent.
Note
Lorsque vous utilisez une identité managée affectée par l’utilisateur, vous pouvez spécifier l’ID client via spring.cloud.azure.credential.client-id
ou spring.cloud.azure.<azure-service>.credential.client-id
. Vous n’avez pas besoin de configuration d’informations d’identification si vous utilisez une identité managée affectée par le système.
Pourboire
Vérifiez que le principal de sécurité a reçu une autorisation suffisante pour accéder à la ressource Azure. Pour plus d’informations, consultez Autoriser l’accès avec microsoft Entra ID.
Pour plus d’informations sur l’identité managée, consultez Qu’est-ce que les identités managées pour les ressources Azure ?.
Autres types d’informations d’identification
Si vous souhaitez un contrôle supplémentaire ou que votre scénario n’est pas servi par les DefaultAzureCredential
ou les paramètres par défaut, vous devez utiliser d’autres types d’informations d’identification.
Authentification et autorisation avec l’ID Microsoft Entra
Avec l’ID Microsoft Entra, vous pouvez utiliser le contrôle d’accès en fonction du rôle Azure (Azure RBAC) pour accorder des autorisations à un principal de sécurité, qui peut être un utilisateur ou un principal de service d’application. Lorsqu’un principal de sécurité (un utilisateur ou une application) tente d’accéder à une ressource Azure, par exemple une ressource Event Hubs, la demande doit être autorisée. Avec l’ID Microsoft Entra, l’accès à une ressource est un processus en deux étapes :
- Tout d’abord, l’identité du principal de sécurité est authentifiée et un jeton OAuth 2.0 est retourné.
- Ensuite, le jeton est transmis dans le cadre d’une demande au service Azure pour autoriser l’accès à la ressource spécifiée.
S’authentifier avec l’ID Microsoft Entra
Pour connecter des applications aux ressources qui prennent en charge l’authentification Microsoft Entra, vous pouvez définir les configurations suivantes avec le préfixe spring.cloud.azure.credential
ou spring.cloud.azure.<azure-service>.credential
Le tableau suivant répertorie les propriétés d’authentification :
Propriété | Description |
---|---|
client-id | ID client à utiliser lors de l’authentification du principal de service avec Azure. |
client-secret | Clé secrète client à utiliser lors de l’authentification du principal de service avec Azure. |
client-certificate-path | Chemin d’un fichier de certificat PEM à utiliser lors de l’authentification du principal de service avec Azure. |
client-certificate-password | Mot de passe du fichier de certificat. |
nom d’utilisateur | Nom d’utilisateur à utiliser lors de l’exécution de l’authentification par nom d’utilisateur/mot de passe avec Azure. |
mot de passe | Mot de passe à utiliser lors de l’exécution de l’authentification par nom d’utilisateur/mot de passe avec Azure. |
managed-identity-enabled | Indique s’il faut activer l’identité managée. |
Pourboire
Pour obtenir la liste de toutes les propriétés de configuration d’Azure Spring Cloud, consultez propriétés de configuration d’Azure Spring Cloud.
L’application recherche plusieurs emplacements pour trouver des informations d’identification disponibles et utilise DefaultAzureCredential
si aucune propriété d’informations d’identification n’est configurée. Si vous souhaitez utiliser des informations d’identification spécifiques, consultez les exemples suivants pour obtenir des conseils.
L’exemple suivant montre comment vous authentifier à l’aide d’une identité managée affectée par le système :
spring.cloud.azure:
credential:
managed-identity-enabled: true
L’exemple suivant montre comment vous authentifier à l’aide d’une identité managée affectée par l’utilisateur :
spring.cloud.azure:
credential:
managed-identity-enabled: true
client-id: ${AZURE_CLIENT_ID}
L’exemple suivant montre comment vous authentifier à l’aide d’un principal de service avec une clé secrète client :
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Note
Les valeurs autorisées pour tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez le Utilisé le point de terminaison incorrect (comptes personnels et d’organisation) section Erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans ledu locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur Microsoft Entra ID.
L’exemple suivant montre comment vous authentifier à l’aide d’un principal de service avec un certificat PFX client :
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
profile:
tenant-id: <tenant>
Note
Les valeurs autorisées pour tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez le Utilisé le point de terminaison incorrect (comptes personnels et d’organisation) section Erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans ledu locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur Microsoft Entra ID.
L’exemple suivant montre comment vous authentifier à l’aide d’un principal de service avec un certificat PEM client :
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
profile:
tenant-id: <tenant>
Note
Les valeurs autorisées pour tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez le Utilisé le point de terminaison incorrect (comptes personnels et d’organisation) section Erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans ledu locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur Microsoft Entra ID.
L’exemple suivant montre comment vous authentifier à l’aide d’informations d’identification de l’utilisateur :
spring.cloud.azure:
credential:
client-id: ${AZURE_CLIENT_ID}
username: ${AZURE_USER_USERNAME}
password: ${AZURE_USER_PASSWORD}
L’exemple suivant montre comment vous authentifier auprès de Key Vault à l’aide d’un autre principal de service. Cet exemple configure l’application avec deux informations d’identification : une identité managée affectée par le système et un principal de service. Le client secret Key Vault utilise le principal de service, mais tous les autres composants utilisent plutôt l’identité managée.
spring.cloud.azure:
credential:
managed-identity-enabled: true
keyvault.secret:
credential:
client-id: ${AZURE_CLIENT_ID}
client-secret: ${AZURE_CLIENT_SECRET}
profile:
tenant-id: <tenant>
Note
Les valeurs autorisées pour tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez le Utilisé le point de terminaison incorrect (comptes personnels et d’organisation) section Erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans ledu locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur Microsoft Entra ID.
Autoriser l’accès avec l’ID Microsoft Entra
L’étape d’autorisation nécessite qu’un ou plusieurs rôles Azure soient attribués au principal de sécurité. Les rôles attribués à un principal de sécurité déterminent les autorisations dont le principal dispose.
Pourboire
Pour obtenir la liste de tous les rôles intégrés Azure, consultez rôles intégrés Azure.
Le tableau suivant répertorie les rôles intégrés Azure pour autoriser l’accès aux services Azure pris en charge dans Spring Cloud Azure :
Rôle | Description |
---|---|
propriétaire des données App Configuration | Autorise l’accès complet aux données App Configuration. |
lecteur de données App Configuration | Autorise l’accès en lecture aux données App Configuration. |
propriétaire de données Azure Event Hubs | Autorise l’accès complet aux ressources Azure Event Hubs. |
récepteur de données Azure Event Hubs | Autorise l’accès aux ressources Azure Event Hubs. |
l’expéditeur de données Azure Event Hubs | Autorise l’accès aux ressources Azure Event Hubs. |
propriétaire des données Azure Service Bus | Autorise l’accès complet aux ressources Azure Service Bus. |
récepteur de données Azure Service Bus | Autorise l’accès aux ressources Azure Service Bus. |
l’expéditeur de données Azure Service Bus | Autorise l’accès aux ressources Azure Service Bus. |
propriétaire des données blob du stockage | Fournit un accès complet aux conteneurs et données d’objets blob Stockage Azure, y compris l’attribution du contrôle d’accès POSIX. |
Lecteur de données blob de stockage | Lire et répertorier les conteneurs et objets blob stockage Azure. |
lecteur de données de file d’attente de stockage | Lire et répertorier les files d’attente et les messages de file d’attente stockage Azure. |
contributeur cache Redis | Gérer les caches Redis. |
Note
Lorsque vous utilisez Spring Cloud Azure Resource Manager pour obtenir les chaînes de connexion pour Event Hubs, Service Bus et File d’attente de stockage, ou les propriétés du cache pour Redis, attribuez le rôle intégré Azure Contributor
. Azure Cache pour Redis est spécial et vous pouvez également attribuer le rôle Redis Cache Contributor
pour obtenir les propriétés Redis.
Note
Une stratégie d’accès Key Vault détermine si un principal de sécurité donné, à savoir un utilisateur, une application ou un groupe d’utilisateurs, peut effectuer différentes opérations sur les secrets, clés et certificats Key Vault. Vous pouvez attribuer des stratégies d’accès à l’aide du portail Azure, d’Azure CLI ou d’Azure PowerShell. Pour plus d’informations, consultez Affecter une stratégie d’accès Key Vault.
Important
Azure Cosmos DB expose deux définitions de rôle intégrées : Cosmos DB Built-in Data Reader
et Cosmos DB Built-in Data Contributor
. Toutefois, la prise en charge du portail Azure pour la gestion des rôles n’est pas encore disponible. Pour plus d’informations sur le modèle d’autorisation, les définitions de rôles et l’attribution de rôle, consultez Configurer le contrôle d’accès en fonction du rôle avec Microsoft Entra ID pour votre compte Azure Cosmos DB.
Jetons SAP
Vous pouvez également configurer des services pour l’authentification avec signature d’accès partagé (SAP).
spring.cloud.azure.<azure-service>.sas-token
est la propriété à configurer. Par exemple, utilisez spring.cloud.azure.storage.blob.sas-token
pour vous authentifier auprès du service Blob de stockage.
Chaînes de connexion
La chaîne de connexion est prise en charge par certains services Azure pour fournir des informations de connexion et des informations d’identification. Pour vous connecter à ces services Azure à l’aide de la chaîne de connexion, configurez simplement spring.cloud.azure.<azure-service>.connection-string
. Par exemple, configurez spring.cloud.azure.eventhubs.connection-string
pour vous connecter au service Event Hubs.