Condividi tramite


Supporto di Spring Cloud Azure MySQL

Questo articolo si applica a: ✔️ Versione 4.14.0 ✔️ versione 5.8.0

Database di Azure per MySQL è un servizio di database relazionale basato sull'edizione community di MySQL. È possibile usare l'opzione Server singolo o Server flessibile per ospitare un database MySQL in Azure. Si tratta di un'offerta di database come servizio completamente gestita che può gestire carichi di lavoro cruciali con prestazioni prevedibili e scalabilità dinamica.

Dalla versione 4.5.0, Spring Cloud supporto tecnico di Azure vari tipi di credenziali per l'autenticazione a Database di Azure per MySQL server flessibile.

Versione supportata di MySQL

La versione corrente dello starter deve usare Database di Azure per MySQL versione 5.7 del server flessibile o 8.0.

Funzionalità di base

Connessione senza password

La connessione senza password usa l'autenticazione di Microsoft Entra per la connessione ai servizi di Azure senza archiviare credenziali nell'applicazione, nei relativi file di configurazione o nelle variabili di ambiente. L'autenticazione di Microsoft Entra è un meccanismo per la connessione a Database di Azure per MySQL usando le identità definite in Microsoft Entra ID. Con l'autenticazione di Microsoft Entra, è possibile gestire le identità utente del database e altre servizi Microsoft in una posizione centrale, semplificando la gestione delle autorizzazioni.

Funzionamento

Spring Cloud Azure creerà prima di tutto uno dei tipi di credenziali seguenti a seconda della configurazione di autenticazione dell'applicazione:

  • ClientSecretCredential
  • ClientCertificateCredential
  • UsernamePasswordCredential
  • ManagedIdentityCredential
  • DefaultAzureCredential

Se nessuno di questi tipi di credenziali viene trovato, le DefaultAzureCredential credenziali verranno ottenute dalle proprietà dell'applicazione, dalle variabili di ambiente, dalle identità gestite o dall'IDE. Per altre informazioni, vedere Autenticazione di Spring Cloud in Azure.

Il diagramma generale seguente riepiloga il funzionamento dell'autenticazione usando l'autenticazione delle credenziali OAuth con Database di Azure per MySQL. Le frecce indicano i percorsi di comunicazione.

Diagram showing Microsoft Entra authentication for MySQL.

Impostazione

Spring Cloud Azure per MySQL supporta i due livelli di opzioni di configurazione seguenti:

  1. Opzioni di configurazione dell'autenticazione globale di credential e profile con prefissi di spring.cloud.azure.

  2. Opzioni di configurazione comuni di Spring Cloud Azure per MySQL.

La tabella seguente illustra le opzioni di configurazione comuni di Spring Cloud Azure per MySQL:

Nome Descrizione
spring.datasource.azure.passwordless-enabled Se abilitare connessioni senza password ai database di Azure usando le credenziali del token OAuth2 Microsoft Entra.
spring.datasource.azure.credential.client-certificate-password Password del file del certificato.
spring.datasource.azure.credential.client-certificate-path Percorso di un file di certificato PEM da usare quando si esegue l'autenticazione dell'entità servizio con Azure.
spring.datasource.azure.credential.client-id ID client da usare quando si esegue l'autenticazione dell'entità servizio con Azure. Si tratta di una proprietà legacy.
spring.datasource.azure.credential.client-secret Segreto client da usare quando si esegue l'autenticazione dell'entità servizio con Azure. Si tratta di una proprietà legacy.
spring.datasource.azure.credential.managed-identity-enabled Indica se abilitare l'identità gestita per l'autenticazione con Azure. Se true e client-id è impostato, userà l'ID client come ID client dell'identità gestita assegnato dall'utente. Il valore predefinito è false.
spring.datasource.azure.credential.password Password da usare quando si esegue l'autenticazione con nome utente/password con Azure.
spring.datasource.azure.credential.username Nome utente da usare quando si esegue l'autenticazione con nome utente/password con Azure.
spring.datasource.azure.profile.cloud-type Nome del cloud di Azure a cui connettersi.
spring.datasource.azure.profile.environment.active-directory-endpoint Endpoint di Microsoft Entra a cui connettersi.
spring.datasource.azure.profile.tenant-id ID tenant per le risorse di Azure. I valori consentiti per tenant-id sono: common, organizations, consumerso l'ID tenant.

Configurazione delle dipendenze

Aggiungere la dipendenza seguente al progetto. Ciò includerà automaticamente la spring-boot-starter dipendenza nel progetto in modo transitivo.

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

Nota

Le connessioni senza password sono supportate dalla versione 4.5.0.

Ricordarsi di aggiungere la distinta base spring-cloud-azure-dependencies insieme alla dipendenza precedente. Per altre informazioni, vedere la sezione Introduzione alla guida per sviluppatori di Spring Cloud Azure.

Utilizzo di base

Le sezioni seguenti illustrano gli scenari di utilizzo dell'applicazione Spring Boot classici.

Importante

La connessione senza password usa l'autenticazione di Microsoft Entra. Per usare l'autenticazione di Microsoft Entra, è necessario impostare prima l'utente amministratore di Microsoft Entra. Solo un utente amministratore di Microsoft Entra può creare e abilitare gli utenti per l'autenticazione basata su ID di Microsoft Entra. Per altre informazioni, vedere Usare Spring Data JDBC con Database di Azure per MySQL.

Connessione ad Azure MySQL in locale senza password

  1. Per creare utenti e concedere l'autorizzazione, vedere la sezione Creare un utente non amministratore mySQL e concedere l'autorizzazione in Usare Spring Data JDBC con Database di Azure per MySQL.

  2. Configurare le proprietà seguenti nel file 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
    

Connessione ad Azure MySQL usando un'entità servizio

  1. Creare un utente di Microsoft Entra per l'entità servizio e concedere l'autorizzazione.

    1. Usare prima di tutto i comandi seguenti per configurare alcune variabili di ambiente.

      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. Creare quindi uno script SQL denominato create_ad_user_sp.sql per la creazione di un utente non amministratore. Aggiungere il contenuto seguente e salvarlo in locale:

      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. Usare il comando seguente per eseguire lo script SQL per creare l'utente non amministratore di 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. Usare ora il comando seguente per rimuovere il file di script SQL temporaneo:

      rm create_ad_user_sp.sql
      
  2. Configurare le proprietà seguenti nel file 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

I valori consentiti per tenant-id sono: common, organizations, consumerso l'ID tenant. Per altre informazioni su questi valori, vedere la sezione Usato l'endpoint errato (account personali e dell'organizzazione) di Errore AADSTS50020 - L'account utente del provider di identità non esiste nel tenant. Per informazioni sulla conversione dell'app a tenant singolo, vedere Convertire l'app a tenant singolo in multi-tenant in Microsoft Entra ID.

Connessione ad Azure MySQL con identità gestita in Azure Spring Apps

  1. Per abilitare l'identità gestita, vedere la sezione Assegnare l'identità gestita usando la sezione portale di Azure di Eseguire la migrazione di un'applicazione per usare connessioni senza password con Database di Azure per MySQL.

  2. Per concedere le autorizzazioni, vedere la sezione Assegnare ruoli all'identità gestita di Eseguire la migrazione di un'applicazione per usare connessioni senza password con Database di Azure per MySQL.

  3. Configurare le proprietà seguenti nel file 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
    

Esempi

Vedere il repository azure-spring-boot-samples in GitHub.