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.
Impostazione
Spring Cloud Azure per MySQL supporta i due livelli di opzioni di configurazione seguenti:
Opzioni di configurazione dell'autenticazione globale di
credential
eprofile
con prefissi dispring.cloud.azure
.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 , consumers o 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
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.
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
Creare un utente di Microsoft Entra per l'entità servizio e concedere l'autorizzazione.
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)
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
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
Usare ora il comando seguente per rimuovere il file di script SQL temporaneo:
rm create_ad_user_sp.sql
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
, consumers
o 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
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.
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.
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.