Configurare l'autenticazione di Microsoft Entra per Database di Azure per MySQL - Server flessibile

SI APPLICA A: Database di Azure per MySQL - Server flessibile

Questa esercitazione illustra come configurare l'autenticazione di Microsoft Entra per il server flessibile di Database di Azure per MySQL.

In questa esercitazione apprenderai a:

  • Configurare l'amministratore di Microsoft Entra.
  • Connettersi al server flessibile di Database di Azure per MySQL usando Microsoft Entra ID.

Prerequisiti

Configurare l'amministratore di Microsoft Entra

Per creare un utente di Microsoft Entra Admin, seguire questa procedura.

  • Nel portale di Azure selezionare l'istanza del server flessibile di Database di Azure per MySQL da abilitare per Microsoft Entra ID.

  • Nel riquadro Sicurezza selezionare Autenticazione: Diagramma di come configurare l'autenticazione di Microsoft Entra.

  • Sono disponibili tre tipi di autenticazione:

    • Solo autenticazione MySQL: per impostazione predefinita, MySQL usa il plug-in di autenticazione mysql_native_password predefinito, che esegue l'autenticazione usando il metodo di hash delle password nativo

    • Solo autenticazione di Microsoft Entra: consente l'autenticazione solo con un account Microsoft Entra. Disabilita l'autenticazione mysql_native_password e attiva il parametro del server aad_auth_only

    • Autenticazione MySQL e Microsoft Entra: consente l'autenticazione usando una password MySQL nativa o un account Microsoft Entra. Disattiva il parametro del server aad_auth_only

  • Seleziona identità: selezionare/aggiungere l'identità gestita assegnata dall'utente. Per consentire alla messaggistica unificata di leggere da Microsoft Graph come identità del server, sono necessarie le autorizzazioni seguenti. In alternativa, assegnare alla messaggistica unificata il ruolo con autorizzazioni di lettura nella directory.

    • User.Read.All: consente l'accesso alle informazioni utente di Microsoft Entra.
    • GroupMember.Read.All: consente l'accesso alle informazioni del gruppo di Microsoft Entra.
    • Application.Read.ALL: consente l'accesso alle informazioni dell'entità servizio (applicazione) di Microsoft Entra.

Importante

Solo un Amministratore globale o un Amministratore con ruolo privilegiato può concedere queste autorizzazioni.

  • Selezionare un utente Microsoft Entra valido o un gruppo Microsoft Entra nel tenant del cliente per essere amministratore di Microsoft Entra. Dopo aver abilitato il supporto per l'autenticazione di Microsoft Entra, gli amministratori di Microsoft Entra possono essere aggiunti come entità di sicurezza con l'autorizzazione per aggiungere utenti di Microsoft Entra al server MySQL.

    Nota

    È possibile creare un solo amministratore di Microsoft Entra per ogni server MySQL; selezionandone un altro, l'amministratore esistente di Microsoft Entra configurato per il server verrà sovrascritto.

Concedere autorizzazioni all'identità gestita assegnata dall'utente

Lo script di PowerShell di esempio seguente concede le autorizzazioni necessarie per una messaggistica unificata. In questo esempio vengono assegnate autorizzazioni alla messaggistica unificata umiservertest.

Per eseguire lo script, è necessario accedere come utente con un ruolo da amministratore globale o amministratore con ruolo privilegiato.

Lo script concede le autorizzazioni User.Read.All, GroupMember.Read.All e Application.Read.ALL a una messaggistica unificata per accedere a Microsoft Graph.

# Script to assign permissions to the UMI "umiservertest"

import-module AzureAD
$tenantId = '<tenantId>' # Your Azure AD tenant ID

Connect-AzureAD -TenantID $tenantId
# Log in as a user with a "Global Administrator" or "Privileged Role Administrator" role
# Script to assign permissions to an existing UMI 
# The following Microsoft Graph permissions are required: 
#   User.Read.All
#   GroupMember.Read.All
#   Application.Read.ALL

# Search for Microsoft Graph
$AAD_SP = Get-AzureADServicePrincipal -SearchString "Microsoft Graph";
$AAD_SP
# Use Microsoft Graph; in this example, this is the first element $AAD_SP[0]

#Output

#ObjectId                             AppId                                DisplayName
#--------                             -----                                -----------
#47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44e2d3f6-97c3-4bc7-9ccd-e26746638b6d 0bf30f3b-4a52-48df-9a82-234910c4a086 Microsoft Graph #Change 

$MSIName = "<managedIdentity>";  # Name of your user-assigned
$MSI = Get-AzureADServicePrincipal -SearchString $MSIName 
if($MSI.Count -gt 1)
{ 
Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"

# Choose the right UMI

Exit
} 

# If you have more UMIs with similar names, you have to use the proper $MSI[ ]array number

# Assign the app roles

$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id 
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id

Nei passaggi finali dello script, se sono presenti più messaggistiche unificate con nomi simili, è necessario usare il numero corretto $MSI[ ]array. Un esempio è $AAD_SP.ObjectId[0].

Controllare le autorizzazioni per l'identità gestita assegnata dall'utente

Per controllare le autorizzazioni per una UMI, passare al portale di Azure. Nella risorsa Microsoft Entra ID, selezionare Applicazioni aziendali. Selezionare Tutte le applicazioni per tipo di applicazione e cercare la UMI che è stata creata.

Selezionare la UMI e passare alle impostazioni delle Autorizzazioni nella sezione Sicurezza.

Dopo aver concesso le autorizzazioni alla messaggistica unificata, queste vengono abilitate per tutti i server creati con la messaggistica unificata assegnata come identità del server.

Connettersi al server flessibile di Database di Azure per MySQL usando Microsoft Entra ID

1- Eseguire l'autenticazione con Microsoft Entra ID

Per iniziare, eseguire l'autenticazione con Microsoft Entra ID utilizzando lo strumento di interfaccia della riga di comando di Azure.
Questo passaggio non è obbligatorio in Azure Cloud Shell.

  • Accedere all'account Azure usando il comando az login. Prendere nota della proprietà ID che fa riferimento all'ID della Sottoscrizione per l'account Azure:

    az login
    

Il comando avvia una finestra del browser nella pagina di autenticazione di Microsoft Entra. Richiede l'assegnazione dell'ID utente e della password di Microsoft Entra.

  • Se si hanno più sottoscrizioni, scegliere la sottoscrizione appropriata usando il comando az account set:

    az account set --subscription \<subscription id\>
    

2 - Recuperare il token di accesso di Microsoft Entra

Richiamare lo strumento dell'interfaccia della riga di comando di Azure per acquisire un token di accesso per l'utente autenticato di Microsoft Entra dal passaggio 1 per accedere al server flessibile di Database di Azure per MySQL.

  • Esempio (per il cloud pubblico):

    az account get-access-token --resource https://ossrdbms-aad.database.windows.net
    
  • Il valore della risorsa precedente deve essere specificato esattamente come illustrato. Per altri cloud, il valore della risorsa può essere cercato usando quanto segue:

    az cloud show
    
  • Per l'interfaccia della riga di comando di Azure versione 2.0.71 e successive, è possibile specificare il comando in questa versione più agevole per tutti i cloud:

    az account get-access-token --resource-type oss-rdbms
    
  • Con PowerShell è possibile usare il comando seguente per acquisire il token di accesso:

    $accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net
    $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
    

Al termine dell'autenticazione, l'ID Microsoft Entra restituisce un token di accesso:

{
  "accessToken": "TOKEN",
  "expiresOn": "...",
  "subscription": "...",
  "tenant": "...",
  "tokenType": "Bearer"
}

Il token è una stringa Base 64 che codifica tutte le informazioni sull'utente autenticato e che è indirizzata al servizio Database di Azure per MySQL.

La validità del token di accesso può essere compresa tra 5 e 60 minuti. È consigliabile ottenere il token di accesso prima di avviare l'accesso al server flessibile di Database di Azure per MySQL.

  • Per visualizzare la validità del token, usare il comando di PowerShell seguente.
   $accessToken.ExpiresOn.DateTime

3 - Usare un token come password per l'accesso con MySQL

Durante la connessione è necessario usare il token di accesso come password utente MySQL. È possibile usare il metodo descritto in precedenza per recuperare il token usando client GUI, ad esempio MySQL Workbench.

Connettersi al server flessibile di Database di Azure per MySQL tramite l'interfaccia della riga di comando di MySQL

Quando si usa l'interfaccia della riga di comando, è possibile usare questa scorciatoia per connettersi:

Esempio (Linux/macOS):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`

Esempio (PowerShell):

mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)


mysql -h mydb.mysql.database.azure.com \
  --user user@tenant.onmicrosoft.com \
  --enable-cleartext-plugin \
  --password=$((Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net).Token)

Connettersi al server flessibile di Database di Azure per MySQL tramite MySQL Workbench

  • Avviare MySQL Workbench e selezionare l'opzione Database, quindi selezionare Connetti al database.
  • Nel campo Nome host immettere il nome di dominio completo MySQL, ad esempio, mysql.database.azure.com.
  • Nel campo Nome utente immettere il nome amministratore di Microsoft Entra di MySQL. Ad esempio: user@tenant.onmicrosoft.com.
  • Nel campo Password selezionare Archivia nell'insieme di credenziali e incollare il token di accesso dal file, ad esempio C:\temp\MySQLAccessToken.txt.
  • Selezionare la scheda Avanzate e assicurarsi di selezionare Abilita plug-in di autenticazione cleartext.
  • Selezionare OK per connettersi al database.

Considerazioni importanti per la connessione

  • user@tenant.onmicrosoft.com è il nome dell'utente o del gruppo Microsoft Entra che si sta tentando di connettersi come
  • Verificare di aver digitato in modo esatto il nome dell'utente o del gruppo Microsoft Entra
  • I nomi utente e gruppo Microsoft Entra fanno distinzione tra maiuscole e minuscole
  • Quando ci si connette come gruppo, usare solo il nome del gruppo (ad esempio, GroupName)
  • Se il nome contiene spazi, usare \ prima di ogni spazio, per eseguirne l'escape

Nota

L'impostazione "enable-cleartext-plugin". È necessario usare una configurazione simile con altri client per assicurarsi che il token venga inviato al server senza hash.

A questo momento si è autenticati nel server flessibile MySQL usando l'autenticazione Microsoft Entra.

Altri comandi di amministrazione di Microsoft Entra

  • Gestire l'amministratore di Active Directory del server

    az mysql flexible-server ad-admin
    
  • Creare un amministratore di Active Directory

    az mysql flexible-server ad-admin create
    

    Esempio: Creare l'amministratore di Active Directory con l'utente "john@contoso.com", l'ID amministratore "00000000-0000-0000-0000-000000000000" e l'identità "test-identity"

    az mysql flexible-server ad-admin create -g testgroup -s testsvr -u john@contoso.com -i 00000000-0000-0000-0000-000000000000 --identity test-identity
    
  • Eliminare un amministratore di Active Directory

    az mysql flexible-server ad-admin delete
    

    Esempio: Eliminare l'amministratore di Active Directory

    az mysql flexible-server ad-admin delete -g testgroup -s testsvr
    
  • Elencare tutti gli amministratori di Active Directory

    az mysql flexible-server ad-admin list
    

    Esempio: Elencare gli amministratori di Active Directory

    az mysql flexible-server ad-admin list -g testgroup -s testsvr
    
  • Ottenere un amministratore di Active Directory

    az mysql flexible-server ad-admin show
    

    Esempio: Ottenere l'amministratore di Active Directory

    az mysql flexible-server ad-admin show -g testgroup -s testsvr
    
  • Attendere che l'amministratore di Active Directory soddisfi determinate condizioni

    az mysql flexible-server ad-admin wait
    

    Esempi:

    • Attendere che l'amministratore di Active Directory esista
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
    
    • Attendere l'eliminazione dell'amministratore di Active Directory
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
    

Creare utenti di Microsoft Entra in Database di Azure per MySQL

Per aggiungere un utente di Microsoft Entra al database di Azure per MySQL, seguire questa procedura dopo la connessione:

  1. Assicurarsi innanzitutto che l'utente <user>@yourtenant.onmicrosoft.com di Microsoft Entra sia un utente valido nel tenant di Microsoft Entra.
  2. Accedere all'istanza di Database di Azure per MySQL come utente amministratore di Microsoft Entra.
  3. Creare l'utente <user>@yourtenant.onmicrosoft.com in Database di Azure per MySQL.

Esempio:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

Per i nomi utente che superano i 32 caratteri, è consigliabile usare invece un alias per la connessione:

Esempio:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';

Nota

  1. MySQL ignora gli spazi iniziali e finali e il nome utente non deve avere spazi iniziali o finali.
  2. L'autenticazione di un utente tramite Microsoft Entra non concede a quest'ultimo alcuna autorizzazione per accedere agli oggetti all'interno del database del servizio Database di Azure per MySQL. È necessario concedere manualmente le autorizzazioni necessarie all'utente.

Creare gruppi di Microsoft Entra in Database di Azure per MySQL

Per abilitare l'accesso al database da parte di un gruppo di Microsoft Entra, usare lo stesso meccanismo adottato per gli utenti, ma specificare invece il nome del gruppo:

Esempio:

CREATE AADUSER 'Prod_DB_Readonly';

Durante l'accesso, i membri del gruppo usano i token di accesso personali, ma accedono con il nome del gruppo specificato come nome utente.

Compatibilità con i driver delle applicazioni

È disponibile il supporto per la maggior parte dei driver, ma assicurarsi di usare le impostazioni per l'invio della password in testo non crittografato, in modo che il token venga inviato senza modifiche.

  • C/C++

    • libmysqlclient: supportato
    • mysql-connector-c++: supportato
  • Java

    • Connector/J (mysql-connector-java): supportato, deve usare l'impostazione useSSL
  • Python

    • Connettore/Python: supportato
  • Ruby

    • mysql2: supportato
  • .NET

    • mysql-connector-net: supportato, è necessario aggiungere il plug-in per mysql_clear_password
    • mysql-net/MySqlConnector: supportato
  • Node.js

    • mysqljs: non supportato (non invia il token in testo non crittografato senza patch)
    • node-mysql2: supportato
  • Perl

    • DBD::mysql: supportato
    • Net::MySQL: non supportato
  • Go

    • go-sql-driver: supportato, aggiungere ?tls=true&allowCleartextPasswords=true alla stringa di connessione
  • PHP

    • Estensione mysqli: supportata

    • Driver PDO_MYSQL: supportato

Passaggi successivi