Usare Microsoft Entra ID per l'autenticazione con MySQL

SI APPLICA A: Database di Azure per PostgreSQL - Server singolo

Importante

Database di Azure per PostgreSQL - Il server singolo è in fase di ritiro. È consigliabile eseguire l'aggiornamento a Database di Azure per PostgreSQL - Server flessibile. Per altre informazioni sulla migrazione a Database di Azure per PostgreSQL - Server flessibile, vedere Cosa succede a Database di Azure per PostgreSQL - Server singolo?.

Questo articolo illustra la procedura per configurare l'accesso a Microsoft Entra ID con Database di Azure per PostgreSQL, e come connettersi usando un token Microsoft Entra.

Impostazione dell'utente amministratore di Microsoft Entra

Solo un utente amministratore di Microsoft Entra può creare/abilitare gli utenti per l'autenticazione basata su Microsoft Entra ID. Poiché l'amministratore di Microsoft Entra dispone di autorizzazioni utente elevate (ad esempio CREATEDB), si sconsiglia di utilizzarlo per eseguire le normali operazioni di database.

Per impostare l'amministratore di Microsoft Entra (è possibile usare un utente o un gruppo), attenersi alla procedura seguente

  1. Nel portale di Azure selezionare l'istanza di Database di Azure per PostgreSQL da abilitare per Microsoft Entra ID.
  2. In Impostazioni selezionare Amministratore di Active Directory:

impostare un amministratore di Microsoft Entra

  1. Nel tenant del cliente, selezionare un utente Microsoft Entra valido come amministratore di Microsoft Entra.

Importante

Quando si imposta l'amministratore, nel server di Database di Azure PostgreSQL viene aggiunto un nuovo utente con autorizzazioni di amministratore complete. L'utente amministratore di Microsoft Entra in Database di Azure per PostgreSQL avrà il ruolo azure_ad_admin. Per ogni server PostgreSQL è possibile creare un solo amministratore di Microsoft Entra. Se ne viene selezionato un altro, l'amministratore di Microsoft Entra esistente configurato per il server verrà sovrascritto. È possibile specificare un gruppo di Microsoft Entra, anziché un singolo utente, per avere più amministratori.

Per ogni server PostgreSQL è possibile creare un solo amministratore di Microsoft Entra. Se ne viene selezionato un altro, l'amministratore di Microsoft Entra esistente configurato per il server verrà sovrascritto. È possibile specificare un gruppo di Microsoft Entra, anziché un singolo utente, per avere più amministratori. Tenere presente che in questo caso sarà necessario accedere con il nome del gruppo per finalità amministrative.

Connessione a Database di Azure per PostgreSQL tramite Microsoft Entra ID

Il diagramma generale seguente riepiloga il flusso di lavoro relativo all'uso dell'autenticazione di Microsoft Entra con Database di Azure per PostgreSQL:

flusso di autenticazione

L'integrazione di Microsoft Entra è stata progettata per funzionare con gli strumenti PostgreSQL comuni come psql, che non sono compatibili con Microsoft Entra e supportano soltanto la specifica di nome utente e password per la connessione a PostgreSQL. Il token Microsoft Entra viene passato come password, come illustrato nell'immagine precedente.

Attualmente sono stati testati i client seguenti:

  • psql commandline (usare la variabile PGPASSWORD per passare il token, vedere il passaggio 3 per altre informazioni)
  • Azure Data Studio (tramite l'estensione PostgreSQL)
  • Altri client basati su libpq (ad esempio framework applicazioni e ORM comuni)
  • PgAdmin (deselezionare connetti ora alla creazione del server. Per altre informazioni vedere il passaggio 4)

Di seguito sono riportati i passaggi da seguire per l'autenticazione dell'utente o dell'applicazione con Microsoft Entra ID:

Prerequisiti

È possibile seguire la procedura in Azure Cloud Shell, in una VM di Azure o nel computer locale. Assicurarsi di aver installato l'interfaccia della riga di comando di Azure.

Eseguire l'autenticazione con Microsoft Entra ID come singolo utente

Passaggio 1: Accedere alla sottoscrizione di Azure dell'utente

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

az login

Il comando avvierà una finestra del browser nella pagina di autenticazione di Microsoft Entra. Richiede di specificare l’ID utente e la password di Microsoft Entra.

Passaggio 2: recuperare il token di accesso di Microsoft Entra

Richiamare lo strumento di interfaccia della riga di comando di Azure per acquisire un token di accesso per l'utente autenticato di Microsoft Entra del passaggio 1 e accedere a Database di Azure per PostgreSQL.

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 gli altri cloud, è possibile cercare il valore della risorsa usando:

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

Al termine dell'autenticazione, Microsoft Entra ID restituirà 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 PostgreSQL.

Passaggio 3: usare il token come password per l'accesso con psql client

Durante la connessione è necessario usare il token di accesso come password utente PostgreSQL.

Se si usa il client della riga di comando psql, il token di accesso deve essere passato tramite la variabile di ambiente PGPASSWORD, poiché quest'ultimo supera la lunghezza della password che psql è in grado di accettare direttamente:

Esempio Windows:

set PGPASSWORD=<copy/pasted TOKEN value from step 2>
$env:PGPASSWORD='<copy/pasted TOKEN value from step 2>'

Esempio Linux/macOS:

export PGPASSWORD=<copy/pasted TOKEN value from step 2>

A questo punto è possibile avviare una connessione con Database di Azure per PostgreSQL come di consueto:

psql "host=mydb.postgres... user=user@tenant.onmicrosoft.com@mydb dbname=postgres sslmode=require"

Passaggio 4: usare il token come password per l'accesso con PgAdmin

Per connettersi usando il token Microsoft Entra con pgAdmin, è necessario seguire i passaggi successivi:

  1. Deselezionare l'opzione Connetti ora alla creazione del server.
  2. Immettere i dettagli del server nella scheda Connessione e salvare.
  3. Dal menu del browser selezionare Connetti al server di Database di Azure per PostgreSQL
  4. Immettere la password del token ad quando richiesto.

Considerazioni importanti per la connessione:

  • user@tenant.onmicrosoft.com è il nome dell'utente Microsoft Entra
  • Assicurarsi di usare il modo esatto in cui viene digitato l'utente di Azure, perché i nomi utente e gruppo di Microsoft Entra fanno distinzione tra maiuscole e minuscole.
  • Se il nome contiene spazi, usare \ prima di ogni spazio, per eseguirne l'escape.
  • La validità del token di accesso può essere compresa tra 5 e 60 minuti. È consigliabile ottenere il token di accesso appena prima di accedere a Database di Azure per PostgreSQL.

A questo momento si è autenticati nel server di Database di Azure per PostgreSQL usando l'autenticazione Microsoft Entra.

Eseguire l'autenticazione con Microsoft Entra ID come membro del gruppo

Passaggio 1: Creare gruppi di Microsoft Entra in Database di Azure per PostgreSQL

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 USER <new_user> IN ROLE azure_ad_user;

Quando si esegue l'accesso, i membri del gruppo useranno i propri token di accesso personali, ma firmeranno usando il nome del gruppo specificato come nome utente.

Passaggio 2: Accedere alla sottoscrizione di Azure dell'utente

Eseguire l'autenticazione con Microsoft Entra ID usando lo strumento dell'interfaccia della riga di comando di Azure. Questo passaggio non è necessario in Azure Cloud Shell. L'utente deve essere membro del gruppo Microsoft Entra.

az login

Passaggio 3: recuperare il token di accesso di Microsoft Entra

Richiamare lo strumento di interfaccia della riga di comando di Azure per acquisire un token di accesso per l'utente autenticato di Microsoft Entra del passaggio 2 e accedere a Database di Azure per PostgreSQL.

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 gli altri cloud, è possibile cercare il valore della risorsa usando:

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

Al termine dell'autenticazione, Microsoft Entra ID restituirà un token di accesso:

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

Passaggio 4: Usare il token come password per l'accesso con psql o PgAdmin (vedere i passaggi precedenti per la connessione utente)

Considerazioni importanti per la connessione come membro del gruppo:

  • groupname@mydb è il nome del gruppo di Microsoft Entra con cui si sta tentando di connettersi
  • Aggiungere sempre il nome del server dopo il nome utente/gruppo di Microsoft Entra (ad esempio @mydb)
  • Verificare di aver digitato in modo esatto il nome 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@mydb) e non l'alias di un membro del gruppo.
  • Se il nome contiene spazi, usare \ prima di ogni spazio per eseguire l'escape.
  • La validità del token di accesso può essere compresa tra 5 e 60 minuti. È consigliabile ottenere il token di accesso appena prima di accedere a Database di Azure per PostgreSQL.

L'autenticazione al server PostgreSQL tramite l'autenticazione di Microsoft Entra è stata eseguita.

Creazione di utenti di Microsoft Entra in Database di Azure per PostgreSQL

Per aggiungere un utente di Microsoft Entra a Database di Azure per PostgreSQL, attenersi alla procedura seguente dopo aver stabilito la connessione (vedere la sezione successiva per informazioni su come stabilire 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 PostgreSQL come utente amministratore di Microsoft Entra.
  3. Creare il ruolo <user>@yourtenant.onmicrosoft.com in Database di Azure per PostgreSQL.
  4. Rendere <user>@yourtenant.onmicrosoft.com un membro del ruolo azure_ad_user. Questo deve essere assegnato solo agli utenti di Microsoft Entra.

Esempio:

CREATE USER "user1@yourtenant.onmicrosoft.com" IN ROLE azure_ad_user;

Nota

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 PostgreSQL. È necessario concedere manualmente le autorizzazioni necessarie all'utente.

Convalida dei token

L'autenticazione di Microsoft Entra in Database di Azure per PostgreSQL garantisce che l'utente sia presente nel server PostgreSQL e controlla la validità del token convalidandone il contenuto. Vengono eseguiti i passaggi di convalida del token seguenti:

  • Il token è firmato da Microsoft Entra ID e non è stato manomesso
  • Il token è stato rilasciato da Microsoft Entra ID per il tenant associato al server
  • Il token non è scaduto
  • Il token è relativo alla risorsa Database di Azure per PostgreSQL (e non a un'altra risorsa di Azure)

Migrazione di utenti PostgreSQL esistenti all'autenticazione basata su ID di Microsoft Entra

È possibile abilitare l'autenticazione di Microsoft Entra per gli utenti esistenti. Considerare i due casi seguenti:

Caso 1: il nome utente PostgreSQL corrisponde al nome dell'entità utente Di Microsoft Entra

Nel caso (improbabile) in cui il nome utente degli utenti esistenti corrisponda già a quello di Microsoft Entra, è possibile concedere il ruolo azure_ad_user a tali utenti allo scopo di abilitarli per l'autenticazione di Microsoft Entra:

GRANT azure_ad_user TO "existinguser@yourtenant.onmicrosoft.com";

Questi utenti potranno quindi accedere con le credenziali di Microsoft Entra anziché usare la password utente PostgreSQL configurata in precedenza.

Caso 2: il nome utente di PostgreSQL è diverso dal nome dell'entità utente di Microsoft Entra

Se un utente PostgreSQL non esiste in Microsoft Entra ID o ha un nome utente diverso, è possibile usare i gruppi di Microsoft Entra per eseguire l'autenticazione come utente PostgreSQL. È possibile eseguire la migrazione degli utenti di Database di Azure per PostgreSQL esistenti a Microsoft Entra creando un gruppo di Microsoft Entra con un nome che corrisponda a quello dell'utente di PostgreSQL e quindi concedendo il ruolo azure_ad_user a tale utente di PostgreSQL esistente:

GRANT azure_ad_user TO <new_user>;

L'esempio sopra presuppone che sia stato creato un gruppo "DBReadUser" in Microsoft Entra. Gli utenti che appartengono a tale gruppo ora possono accedere al database con le credenziali di questo utente.

Passaggi successivi