Prise en charge d’Azure MySQL Azure Spring Cloud
Cet article s’applique à : ✔️ Version 4.14.0 ✔️ Version 5.8.0
Azure Database pour MySQL est un service de base de données relationnelle alimenté par l’édition de la communauté MySQL. Vous pouvez utiliser un Serveur unique ou un Serveur flexible pour héberger une base de données MySQL dans Azure. Il s’agit d’une offre de base de données en tant que service entièrement managée qui peut gérer des charges de travail stratégiques avec des performances prévisibles et une scalabilité dynamique.
À partir de la version4.5.0
, Spring Cloud support Azure différents types d’informations d’identification pour l’authentification sur Azure Database pour MySQL serveur flexible.
Version de MySQL prise en charge
La version actuelle du starter doit utiliser Azure Database pour MySQL version 5.7
du serveur flexible ou 8.0
.
Fonctionnalités de base
Connexion sans mot de passe
La connexion sans mot de passe utilise l’authentification Microsoft Entra pour la connexion aux services Azure sans stocker d’informations d’identification dans l’application, ses fichiers de configuration ou dans des variables d’environnement. L’authentification Microsoft Entra est un mécanisme de connexion à Azure Database pour MySQL à l’aide des identités définies dans Microsoft Entra ID. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités des utilisateurs de base de données et d’autres services Microsoft dans un emplacement centralisé, ce qui simplifie la gestion des autorisations.
Fonctionnement
Spring Cloud Azure crée d’abord l’un des types d’informations d’identification suivants en fonction de la configuration de l’authentification de l’application :
ClientSecretCredential
ClientCertificateCredential
UsernamePasswordCredential
ManagedIdentityCredential
DefaultAzureCredential
Si aucun de ces types d’informations d’identification n’est trouvé, les DefaultAzureCredential
informations d’identification sont obtenues à partir des propriétés de l’application, des variables d’environnement, des identités managées ou de l’IDE. Pour plus d’informations, consultez l’authentification Spring Cloud Azure.
Le diagramme général suivant résume le fonctionnement de l’authentification à l’aide de l’authentification des informations d’identification OAuth avec Azure Database pour MySQL. Les flèches indiquent les voies de communication.
Configuration
Spring Cloud Azure pour MySQL prend en charge les deux niveaux suivants d’options de configuration :
Options de configuration d’authentification globale des
credential
profile
préfixesspring.cloud.azure
.Options de configuration courantes d’Azure Spring Cloud pour MySQL.
Le tableau suivant présente les options de configuration courantes d’Azure Spring Cloud pour MySQL :
Nom | Description |
---|---|
spring.datasource.azure.passwordless-enabled | Indique s’il faut activer les connexions sans mot de passe aux bases de données Azure à l’aide des informations d’identification du jeton Microsoft Entra OAuth2. |
spring.datasource.azure.credential.client-certificate-password | Mot de passe du fichier de certificat. |
spring.datasource.azure.credential.client-certificate-path | Chemin d’un fichier de certificat PEM à utiliser lors de l’authentification du principal de service avec Azure. |
spring.datasource.azure.credential.client-id | ID client à utiliser lors de l’authentification du principal de service avec Azure. Il s’agit d’une propriété héritée. |
spring.datasource.azure.credential.client-secret | Clé secrète client à utiliser lors de l’authentification du principal de service avec Azure. Il s’agit d’une propriété héritée. |
spring.datasource.azure.credential.managed-identity-enabled | Indique s’il faut activer l’identité managée pour s’authentifier auprès d’Azure. Si la valeur est true et que la client-id valeur est définie, utilisez l’ID client en tant qu’ID client d’identité managée affecté par l’utilisateur. La valeur par défaut est false (Faux). |
spring.datasource.azure.credential.password | Mot de passe à utiliser lors de l’exécution de l’authentification par nom d’utilisateur/mot de passe avec Azure. |
spring.datasource.azure.credential.username | Nom d’utilisateur à utiliser lors de l’exécution de l’authentification par nom d’utilisateur/mot de passe avec Azure. |
spring.datasource.azure.profile.cloud-type | Nom du cloud Azure auquel se connecter. |
spring.datasource.azure.profile.environment.active-directory-endpoint | Point de terminaison Microsoft Entra auquel se connecter. |
spring.datasource.azure.profile.tenant-id | ID de locataire pour les ressources Azure. Les valeurs autorisées tenant-id sont : common , organizations , consumers ou l’ID de locataire. |
Configuration des dépendances
Ajoutez la dépendance suivante à votre projet. Cela inclut automatiquement la spring-boot-starter
dépendance dans votre projet transitivement.
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
Remarque
Les connexions sans mot de passe ont été prises en charge depuis la version 4.5.0
.
N’oubliez pas d’ajouter le boM spring-cloud-azure-dependencies
avec la dépendance ci-dessus. Pour plus d’informations, consultez la section Prise en main du guide du développeur Spring Cloud Azure.
Utilisation de base
Les sections suivantes montrent les scénarios d’utilisation classiques de l’application Spring Boot.
Important
La connexion sans mot de passe utilise l’authentification Microsoft Entra. Pour utiliser l’authentification Microsoft Entra, vous devez d’abord définir l’utilisateur administrateur Microsoft Entra. Seul un utilisateur administrateur Microsoft Entra peut créer et activer des utilisateurs pour l’authentification basée sur l’ID Microsoft Entra. Pour plus d’informations, consultez Utiliser Spring Data JDBC avec Azure Database pour MySQL.
Connecter à Azure MySQL localement sans mot de passe
Pour créer des utilisateurs et accorder une autorisation, consultez la section Créer un utilisateur non administrateur MySQL et accorder une autorisation d’utilisation de Spring Data JDBC avec Azure Database pour MySQL.
Configurez les propriétés suivantes dans votre fichier application.yml :
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_NON_ADMIN_USERNAME} azure: passwordless-enabled: true
Connecter à Azure MySQL à l’aide d’un principal de service
Créez un utilisateur Microsoft Entra pour le principal de service et accordez l’autorisation.
Tout d’abord, utilisez les commandes suivantes pour configurer certaines variables d’environnement.
export AZURE_MYSQL_AZURE_AD_SP_USERID=$(az ad sp list \ --display-name <service_principal-name> \ --query '[0].appId' --output tsv) export AZURE_MYSQL_AZURE_AD_SP_USERNAME=<YOUR_MYSQL_AZURE_AD_USERNAME> export AZURE_MYSQL_SERVER_NAME=<YOUR_MYSQL_SERVER_NAME> export AZURE_MYSQL_DATABASE_NAME=<YOUR_MYSQL_DATABASE_NAME> export CURRENT_USERNAME=$(az ad signed-in-user show \ --query userPrincipalName \ --output tsv)
Ensuite, créez un script SQL appelé create_ad_user_sp.sql pour créer un utilisateur non administrateur. Ajoutez le contenu suivant et enregistrez-le localement :
cat << EOF > create_ad_user_sp.sql SET aad_auth_validate_oids_in_tenant = OFF; CREATE AADUSER '$AZURE_MYSQL_AZURE_AD_SP_USERNAME' IDENTIFIED BY '$AZURE_MYSQL_AZURE_AD_SP_USERID'; GRANT ALL PRIVILEGES ON $AZURE_MYSQL_DATABASE_NAME.* TO '$AZURE_MYSQL_AZURE_AD_SP_USERNAME'@'%'; FLUSH privileges; EOF
Utilisez la commande suivante pour exécuter le script SQL pour créer l’utilisateur non administrateur Microsoft Entra :
mysql -h $AZURE_MYSQL_SERVER_NAME.mysql.database.azure.com --user $CURRENT_USERNAME --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user_sp.sql
Utilisez maintenant la commande suivante pour supprimer le fichier de script SQL temporaire :
rm create_ad_user_sp.sql
Configurez les propriétés suivantes dans votre fichier application.yml :
spring: cloud: azure: credential: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} profile: tenant-id: <tenant> datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_SP_USERNAME} azure: passwordless-enabled: true
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.
Connecter à Azure MySQL avec l’identité managée dans Azure Spring Apps
Pour activer l’identité managée, consultez la section Affecter l’identité managée à l’aide de la section Portail Azure migration d’une application pour utiliser des connexions sans mot de passe avec Azure Database pour MySQL.
Pour accorder des autorisations, consultez la section Affecter des rôles à la section Identité managée de Migrer une application pour utiliser des connexions sans mot de passe avec Azure Database pour MySQL.
Configurez les propriétés suivantes dans votre fichier application.yml :
spring: datasource: url: jdbc:mysql://${AZURE_MYSQL_SERVER_NAME}.mysql.database.azure.com:3306/${AZURE_MYSQL_DATABASE_NAME} username: ${AZURE_MYSQL_AD_MI_USERNAME} azure: passwordless-enabled: true
Exemples
Consultez le référentiel azure-spring-boot-samples sur GitHub.