Partager via


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.

Diagram showing Microsoft Entra authentication for MySQL.

Configuration

Spring Cloud Azure pour MySQL prend en charge les deux niveaux suivants d’options de configuration :

  1. Options de configuration d’authentification globale des credentialprofile préfixes spring.cloud.azure.

  2. 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, consumersou 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

  1. 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.

  2. 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

  1. Créez un utilisateur Microsoft Entra pour le principal de service et accordez l’autorisation.

    1. 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)
      
    2. 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
      
    3. 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
      
    4. Utilisez maintenant la commande suivante pour supprimer le fichier de script SQL temporaire :

      rm create_ad_user_sp.sql
      
  2. 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, consumersou 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

  1. 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.

  2. 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.

  3. 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.