Authentification Spring Cloud Azure
Cet article s’applique à : ✔️ Version 4.14.0 ✔️ Version 5.8.0
Cet article décrit toutes les méthodes d’authentification Spring Cloud Azure.
DefaultAzureCredential
Il 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 les DefaultAzureCredential
informations d’identification combinent 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.
Remarque
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.
Les DefaultAzureCredential
essaieront l’authentification via les mécanismes suivants dans l’ordre :
- Environnement - Les
DefaultAzureCredential
lisent les informations de compte spécifiées via des variables d’environnement et les utilisent pour l’authentification. - Identité managée - Si l’application est déployée sur un hôte Azure avec l’identité managée activée, les
DefaultAzureCredential
authentifient auprès de ce compte. - IntelliJ : si vous vous êtes authentifié via Azure Toolkit for IntelliJ,
DefaultAzureCredential
s’authentifie avec ce compte. - Visual Studio Code : si vous vous êtes authentifié via le plug-in de compte Azure Visual Studio Code,
DefaultAzureCredential
s’authentifie avec ce compte. - Azure CLI : si vous avez authentifié un compte via la commande Azure CLI
az login
,DefaultAzureCredential
s’authentifie avec ce compte.
Conseil
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.
Remarque
É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é az-identity-
par . Ce ThreadPoolTaskExecutor
haricot est indépendant du Executor
haricot fourni 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 gérées fournissent une identité que les applications peuvent utiliser lors de la connexion à des ressources prenant 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 chaîne de connexion ou clé dans votre application, car elle est plus sécurisée et permet de réduire les problèmes de gestion des secrets et des informations d’identification. Dans ce cas, DefaultAzureCredential
cela 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 à l’aide d’une identité managée.
Types d’identités managées
Il existe deux types d’identités administrées :
- Affecté 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é liée au cycle de vie de cette instance de service est créée dans Microsoft Entra. Ainsi, quand la ressource est supprimée, Azure supprime automatiquement l’identité. Par défaut, seule cette ressource Azure peut utiliser cette identité pour demander des jetons à Microsoft Entra ID.
- Affecté 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’attribuer à 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.
Remarque
Lorsque vous utilisez une identité managée affectée par l’utilisateur, vous pouvez spécifier l’ID client via spring.cloud.azure.credential.managed-identity-client-id
ou spring.cloud.azure.<azure-service>.credential.managed-identity-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.
Conseil
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 si votre scénario n’est pas servi par les paramètres par défaut ou par DefaultAzureCredential
défaut, vous devez utiliser d’autres types d’informations d’identification.
Authentification et autorisation avec Microsoft Entra ID
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 Microsoft Entra ID, l’accès à une ressource est un processus en deux étapes :
- Pour commencer, l’identité du principal de sécurité est authentifiée, et un jeton OAuth 2.0 est renvoyé.
- 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 Microsoft Entra ID
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. |
username | 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. |
Conseil
Pour obtenir la liste de toutes les propriétés de configuration d’Azure Spring Cloud, consultez les propriétés de configuration d’Azure Spring Cloud.
L’application recherche plusieurs emplacements pour trouver des informations d’identification disponibles et l’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>
Remarque
Les valeurs autorisées tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez la section Utiliser le point de terminaison incorrect (comptes personnels et d’organisation) de l’erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans le locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur l’ID Microsoft Entra.
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>
Remarque
Les valeurs autorisées tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez la section Utiliser le point de terminaison incorrect (comptes personnels et d’organisation) de l’erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans le locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur l’ID Microsoft Entra.
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>
Remarque
Les valeurs autorisées tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez la section Utiliser le point de terminaison incorrect (comptes personnels et d’organisation) de l’erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans le locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur l’ID Microsoft Entra.
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>
Remarque
Les valeurs autorisées tenant-id
sont : common
, organizations
, consumers
ou l’ID de locataire. Pour plus d’informations sur ces valeurs, consultez la section Utiliser le point de terminaison incorrect (comptes personnels et d’organisation) de l’erreur AADSTS50020 - Le compte d’utilisateur du fournisseur d’identité n’existe pas dans le locataire. Pour plus d’informations sur la conversion de votre application monolocataire, consultez Convertir une application monolocataire en multilocataire sur l’ID Microsoft Entra.
Autoriser l’accès avec Microsoft Entra ID
L’étape d’autorisation exige qu’un ou plusieurs rôles Azure soient attribués au principal de sécurité. Les rôles qui sont attribués à un principal de sécurité déterminent les autorisations dont disposera le principal.
Conseil
Pour obtenir la liste de tous les rôles intégrés Azure, consultez les 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 | Permet l’accès total aux données App Configuration. |
Lecteur des données App Configuration | Permet de lire les 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 | Permet d’obtenir un accès en réception aux ressources Azure Event Hubs. |
Expéditeur de données Azure Event Hubs | Permet d’obtenir un accès en envoi aux ressources Azure Event Hubs. |
Propriétaire de 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. |
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 total aux conteneurs d’objets blob et aux données du Stockage Azure, notamment l’attribution du contrôle d’accès POSIX. |
Lecteur des données blob du stockage | Lire et répertorier des conteneurs et objets blob du stockage Azure. |
Lecteur des données en file d’attente du stockage | Lire et répertorier des files d’attente et messages en file d’attente du stockage Azure. |
Contributeur Cache Redis | Gérer les caches Redis. |
Remarque
Lorsque vous utilisez Spring Cloud Azure Resource Manager pour obtenir les chaîne de connexion pour Event Hubs, Service Bus et Stockage File d’attente, ou les propriétés du Cache pour Redis, attribuez le rôle Contributor
intégré Azure. Azure Cache pour Redis est spécial et vous pouvez également attribuer le Redis Cache Contributor
rôle pour obtenir les propriétés Redis.
Remarque
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 des secrets, clés et certificats de 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 Attribuer 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, Portail Azure prise en charge de 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 l’ID Microsoft Entra pour votre compte Azure Cosmos DB.
Jetons SAS
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 cette méthode spring.cloud.azure.storage.blob.sas-token
pour l’authentification auprès de Stockage service Blob.
Chaînes de connexion
Connecter chaîne d’Connecter 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 chaîne de connexion, configurez spring.cloud.azure.<azure-service>.connection-string
simplement . Par exemple, configurez spring.cloud.azure.eventhubs.connection-string
pour vous connecter au service Event Hubs.