Compartir a través de


Compatibilidad con Azure MySQL en Spring Cloud

Este artículo se aplica a: ✔️ Versión 4.14.0 ✔️ versión 5.8.0

Azure Database for MySQL es un servicio de base de datos relacional con tecnología de mySQL Community Edition. Para hospedar cualquier base de datos MySQL en Azure puede usar un servidor único o un servidor flexible. Es una oferta de base de datos como servicio totalmente administrada que puede controlar las cargas de trabajo críticas con un rendimiento predecible y escalabilidad dinámica.

Desde la versión 4.5.0, Spring Cloud Soporte técnico de Azure varios tipos de credenciales para la autenticación en el servidor flexible de Azure Database for MySQL.

Versión admitida de MySQL

La versión actual del inicio debe usar la versión 5.7 del servidor flexible de Azure Database for MySQL o 8.0.

Características principales

Conexión sin contraseña

La conexión sin contraseña usa la autenticación de Microsoft Entra para conectarse a servicios de Azure sin almacenar credenciales en la aplicación, sus archivos de configuración o en variables de entorno. La autenticación de Microsoft Entra es un mecanismo de conexión a Azure Database for MySQL mediante identidades definidas en Microsoft Entra ID. Con la autenticación de Microsoft Entra, puede administrar las identidades de los usuarios de la base de datos y otros servicios de Microsoft en una ubicación central, lo que simplifica la administración de los permisos.

Funcionamiento

Spring Cloud Azure compilará primero uno de los siguientes tipos de credenciales en función de la configuración de autenticación de la aplicación:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Si no se encuentra ninguno de estos tipos de credenciales, las DefaultAzureCredential credenciales se obtendrán de las propiedades de la aplicación, las variables de entorno, las identidades administradas o el IDE. Para más información, consulte Autenticación de Azure en Spring Cloud.

En el diagrama de alto nivel siguiente se resume cómo funciona la autenticación mediante la autenticación de credenciales de OAuth con Azure Database for MySQL. Las flechas indican las rutas de comunicación.

Diagram showing Microsoft Entra authentication for MySQL.

Configuración

Spring Cloud Azure for MySQL admite los dos niveles siguientes de opciones de configuración:

  1. Las opciones de configuración de autenticación global de credential y profile con prefijos de spring.cloud.azure.

  2. Opciones de configuración comunes de Spring Cloud Azure for MySQL.

En la tabla siguiente se muestran las opciones de configuración comunes de Spring Cloud Azure for MySQL:

Nombre Descripción
spring.datasource.azure.passwordless habilitado Si se deben habilitar conexiones sin contraseña a bases de datos de Azure mediante credenciales de token de Microsoft Entra de OAuth2.
spring.datasource.azure.credential.client-certificate-password Contraseña del archivo de certificado.
spring.datasource.azure.credential.client-certificate-path Ruta de acceso de un archivo de certificado PEM que se usará al realizar la autenticación de la entidad de servicio con Azure.
spring.datasource.azure.credential.client-id Identificador de cliente que se usará al realizar la autenticación de entidad de servicio con Azure. Se trata de una propiedad heredada.
spring.datasource.azure.credential.client-secret Secreto de cliente que se usará al realizar la autenticación de entidad de servicio con Azure. Se trata de una propiedad heredada.
spring.datasource.azure.credential.managed-identity-enabled Indica si se va a habilitar la identidad administrada para autenticarse con Azure. Si es true y client-id se establece, usará el identificador de cliente como identificador de cliente de identidad administrada asignada por el usuario. El valor predeterminado es false.
spring.datasource.azure.credential.password Contraseña que se usará al realizar la autenticación de nombre de usuario y contraseña con Azure.
spring.datasource.azure.credential.username Nombre de usuario que se usará al realizar la autenticación de nombre de usuario y contraseña con Azure.
tipo spring.datasource.azure.profile.cloud Nombre de la nube de Azure a la que se va a conectar.
spring.datasource.azure.profile.environment.active-directory-endpoint Punto de conexión de Microsoft Entra al que conectarse.
spring.datasource.azure.profile.tenant-id Identificador de inquilino para los recursos de Azure. Los valores permitidos para tenant-id son: common, organizations, consumerso el identificador de inquilino.

Configuración de dependencias

Agregue la siguiente dependencia al proyecto. Esto incluirá automáticamente la dependencia en el spring-boot-starter proyecto de forma transitiva.

<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>

Nota:

Se admiten conexiones sin contraseña desde la versión 4.5.0.

Recuerde agregar la lista spring-cloud-azure-dependencies de materiales junto con la dependencia anterior. Para más información, consulte la sección Introducción de la guía para desarrolladores de Azure de Spring Cloud.

Uso básico

En las secciones siguientes se muestran los escenarios clásicos de uso de aplicaciones de Spring Boot.

Importante

La conexión sin contraseña usa la autenticación de Microsoft Entra. Para usar la autenticación de Microsoft Entra, primero debe establecer el usuario administrador de Microsoft Entra. Solo un usuario administrador de Microsoft Entra puede crear y habilitar usuarios para la autenticación basada en identificadores de Microsoft Entra. Para más información, consulte Uso de Spring Data JDBC con Azure Database for MySQL.

Conectar a Azure MySQL localmente sin contraseña

  1. Para crear usuarios y conceder permiso, consulte la sección Creación de un usuario que no es administrador de MySQL y concesión de permisos de Uso de Spring Data JDBC con Azure Database for MySQL.

  2. Configure las siguientes propiedades en el archivo 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
    

Conectar a Azure MySQL mediante una entidad de servicio

  1. Cree un usuario de Microsoft Entra para la entidad de servicio y conceda permiso.

    1. En primer lugar, use los siguientes comandos para configurar algunas variables de entorno.

      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. A continuación, cree un script SQL denominado create_ad_user_sp.sql para crear un usuario que no sea administrador. Agregue el siguiente contenido y guárdelo de forma local:

      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. Use el siguiente comando para ejecutar el script SQL para crear el usuario que no es administrador de 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. Ahora use el siguiente comando para quitar el archivo de script SQL temporal:

      rm create_ad_user_sp.sql
      
  2. Configure las siguientes propiedades en el archivo 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
    

Nota:

Los valores permitidos para tenant-id son: common, organizations, consumerso el identificador de inquilino. Para obtener más información sobre estos valores, consulte la sección Uso del punto de conexión incorrecto (cuentas personales y de organización) de Error AADSTS50020: la cuenta de usuario del proveedor de identidades no existe en el inquilino. Para obtener información sobre la conversión de la aplicación de un solo inquilino, consulte Conversión de una aplicación de inquilino único en varios inquilinos en microsoft Entra ID.

Conectar a Azure MySQL con identidad administrada en Azure Spring Apps

  1. Para habilitar la identidad administrada, consulte la sección Asignación de la identidad administrada mediante Azure Portal de Migración de una aplicación para usar conexiones sin contraseña con Azure Database for MySQL.

  2. Para conceder permisos, consulte la sección Asignación de roles a la identidad administrada de Migración de una aplicación para usar conexiones sin contraseña con Azure Database for MySQL.

  3. Configure las siguientes propiedades en el archivo 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
    

Ejemplos

Consulte el repositorio azure-spring-boot-samples en GitHub.