Partager via


Configurer l’authentification Microsoft Entra pour Azure Database pour MySQL : serveur flexible

Ce tutoriel vous montre comment configurer l’authentification Microsoft Entra pour un serveur flexible Azure Database pour MySQL.

Dans ce tutoriel, vous allez apprendre à :

  • Configurez l’administrateur Microsoft Entra.
  • Connectez-vous au serveur flexible Azure Database pour MySQL à l’aide de Microsoft Entra ID.

Prérequis

Configurer l’administrateur Microsoft Entra

Pour créer un utilisateur Administrateur Microsoft Entra, suivez les étapes ci-dessous.

  • Sur le Portail Azure, sélectionnez l’instance de serveur flexible Azure Database pour MySQL que vous souhaitez activer pour Microsoft Entra ID.

  • Dans le volet Sécurité, sélectionnez Authentification : Diagramme montrant comment configurer l’authentification Microsoft Entra.

  • Trois types d’authentification sont disponibles :

    • Authentification MySQL uniquement : par défaut, MySQL utilise le plug-in d’authentification mysql_native_password intégré, qui procède à l’authentification en utilisant la méthode de hachage de mot de passe native.

    • Authentification Microsoft Entra uniquement : autorise uniquement l’authentification avec un compte Microsoft Entra. Désactive l’authentification mysql_native_password et active le paramètre de serveur aad_auth_only.

    • Authentification MySQL et Microsoft Entra : autorise l’authentification à l’aide d’un mot de passe MySQL natif ou d’un compte Microsoft Entra. Désactive le paramètre de serveur aad_auth_only.

  • Sélectionner l’identité : sélectionnez/ajoutez l’identité managée affectée par l’utilisateur. Les autorisations suivantes sont nécessaires pour autoriser l’UMI à lire à partir de Microsoft Graph en tant qu’identité de serveur. Vous pouvez également attribuer à l’identité managée affectée par l’utilisateur le rôle Lecteurs de répertoire.

    • User.Read.All : permet d’accéder aux informations utilisateur Microsoft Entra.
    • GroupMember.Read.All : permet d’accéder aux informations de groupe Microsoft Entra.
    • Application.Read.ALL : permet d’accéder aux informations sur le principal de service Microsoft Entra (application).

Important

Seul un utilisateur disposant au moins du rôle Administrateur de rôle privilégié peut accorder ces autorisations.

  • Sélectionnez un utilisateur ou un groupe Microsoft Entra valide dans le locataire client pour être Administrateur Microsoft Entra. Une fois la prise en charge de l’authentification Microsoft Entra activée, les administrateurs Microsoft Entra peuvent être ajoutés en tant que principaux de sécurité avec l’autorisation d’ajouter des utilisateurs Microsoft Entra au serveur MySQL.

    Remarque

    Un seul administrateur Microsoft Entra peut être créé par serveur MySQL, et la sélection d’un autre administrateur remplace l’administrateur Microsoft Entra existant configuré pour le serveur.

Accorder des autorisations à l’Identité managée affectée par l’utilisateur

L’exemple de script PowerShell suivant accorde les autorisations nécessaires pour une Identité managée affectée par l’utilisateur (UMI). Cet exemple affecte des autorisations à l’UMI umiservertest.

Pour exécuter le script, vous devez vous connecter en tant qu’utilisateur avec un rôle Administrateur général ou Administrateur de rôle privilégié.

Le script accorde les autorisations User.Read.All, GroupMember.Read.All et Application.Read.ALL à une Identité managée affectée par l’utilisateur pour accéder à 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

Dans les dernières étapes du script, si vous avez plusieurs UMI avec des noms similaires, vous devez utiliser le nombre $MSI[ ]array approprié, par exemple $AAD_SP.ObjectId[0].

Vérifier les autorisations de l’identité managée affectée par l’utilisateur

Pour vérifier les autorisations d’une UMI, accédez au portail Azure. Dans la ressource Microsoft Entra ID, allez dans Applications d'entreprise. Sélectionnez Toutes les applications pour Type d’application, puis recherchez l’UMI qui a été créée.

Sélectionnez l’UMI, puis allez dans les paramètres Autorisations sous Sécurité.

Une fois les autorisations accordées à l’Identité managée affectée par l’utilisateur, elles sont activées pour l’ensemble des serveurs créés avec l’Identité managée affectée par l’utilisateur (UMI) attribuée en tant qu’identité de serveur.

Se connecter au serveur flexible Azure Database pour MySQL à l’aide de Microsoft Entra ID

1 – Authentifiez-vous auprès de Microsoft Entra ID

Commencez par vous authentifier auprès de Microsoft Entra ID à l’aide de l’outil Azure CLI.
(Cette étape n’est pas obligatoire dans Azure Cloud Shell.)

  • Connectez-vous au compte Azure à l’aide de la commande az login. Notez la propriété ID, qui fait référence à l’ID d’abonnement de votre compte Azure :

    az login
    

La commande ouvre une fenêtre de navigateur sur la page d’authentification Microsoft Entra. Pour ce faire, vous devez fournir votre ID d’utilisateur Microsoft Entra et le mot de passe.

  • Si vous avez plusieurs abonnements, choisissez l’abonnement approprié en utilisant la commande az account set :

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

2 – Récupérez le jeton d’accès Microsoft Entra

Appelez l’outil Azure CLI afin d’obtenir un jeton d’accès permettant à l’utilisateur authentifié auprès de Microsoft Entra à l’étape 1 d’accéder au serveur flexible Azure Database pour MySQL.

  • Exemple (pour le cloud public) :

    az account get-access-token --resource https://ossrdbms-aad.database.windows.net
    
  • La valeur de la ressource ci-dessus doit être spécifiée exactement comme indiqué. Pour les autres clouds, la valeur de la ressource peut être recherchée à l’aide de ce qui suit :

    az cloud show
    
  • Pour Azure CLI version 2.0.71 et les versions ultérieures, la commande peut être spécifiée dans la version plus pratique suivante pour tous les clouds :

    az account get-access-token --resource-type oss-rdbms
    
  • Avec PowerShell, vous pouvez utiliser la commande suivante pour obtenir le jeton d’accès :

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

Une fois que l’authentification a réussi, Microsoft Entra ID retourne un jeton d’accès :

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

Le jeton est une chaîne en base 64 qui code toutes les informations relatives à l’utilisateur authentifié et qui est destinée au service Azure Database pour MySQL.

La validité du jeton d’accès est comprise entre 5 minutes et 60 minutes. Nous vous recommandons d’obtenir le jeton d’accès avant de lancer la connexion au serveur flexible Azure Database pour MySQL.

  • Vous pouvez utiliser la commande PowerShell suivante pour voir la validité du jeton.
    $accessToken.ExpiresOn.DateTime

3 – Utiliser un jeton comme mot de passe pour la connexion avec MySQL

Lors de la connexion, vous avez besoin d’utiliser le jeton d’accès comme mot de passe utilisateur MySQL. Vous pouvez utiliser la méthode décrite ci-dessus pour récupérer le jeton à l’aide de clients GUI comme MySQL Workbench.

Se connecter au serveur flexible Azure Database pour MySQL avec l’interface CLI MySQL

Quand vous utilisez l’interface CLI, vous pouvez utiliser ce raccourci pour vous connecter :

Exemple (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`

Exemple (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)

Se connecter au serveur flexible Azure Database pour MySQL à l’aide de MySQL Workbench

  • Lancez MySQL Workbench et sélectionnez l’option Base de données, puis sélectionnez Se connecter à la base de données.
  • Dans le champ de nom d’hôte, entrez le nom de domaine complet MySQL, par exemple mysql.database.azure.com.
  • Dans le champ de nom d’utilisateur, entrez le nom de l’administrateur Microsoft Entra MySQL. Par exemple : user@tenant.onmicrosoft.com.
  • Dans le champ du mot de passe, sélectionnez Stocker dans le coffre et collez le jeton d’accès à partir du fichier, par exemple C:\temp\MySQLAccessToken.txt.
  • Sélectionnez l’onglet Avancé et n’oubliez pas de cocher Activer le plug-in d’authentification en texte clair.
  • Sélectionnez OK pour vous connecter à la base de données.

Considérations importantes à prendre en compte lors de la connexion

  • user@tenant.onmicrosoft.com est le nom d’utilisateur ou de groupe Microsoft Entra avec lequel vous essayez de vous connecter
  • Veillez à orthographier correctement le nom d’utilisateur ou de groupe Microsoft Entra.
  • Les noms d’utilisateurs et de groupes Microsoft Entra respectent la casse
  • Quand vous vous connectez en tant que groupe, utilisez uniquement le nom du groupe (par exemple, GroupName)
  • Si le nom contient des espaces, utilisez \ avant chaque espace pour le placer dans une séquence d’échappement

Remarque

Concernant le paramètre « enable-cleartext-plugin », vous devez utiliser une configuration similaire avec d’autres clients pour vous assurer que le jeton est envoyé au serveur sans être haché.

Vous êtes à présent authentifié auprès de votre serveur flexible MySQL à l’aide de l’authentification Microsoft Entra.

Autres commandes d’administration Microsoft Entra

  • Gérer l’administrateur Active Directory du serveur

    az mysql flexible-server ad-admin
    
  • Créer un administrateur Active Directory

    az mysql flexible-server ad-admin create
    

    Exemple : Créer un administrateur Active Directory avec l’utilisateur « john@contoso.com », l’ID d’administrateur « 00000000-0000-0000-0000-000000000000 » et 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
    
  • Supprimer un administrateur Active Directory

    az mysql flexible-server ad-admin delete
    

    Exemple : Supprimer un administrateur Active Directory

    az mysql flexible-server ad-admin delete -g testgroup -s testsvr
    
  • Lister tous les administrateurs Active Directory

    az mysql flexible-server ad-admin list
    

    Exemple : Lister les administrateurs Active Directory

    az mysql flexible-server ad-admin list -g testgroup -s testsvr
    
  • Obtenir un administrateur Active Directory

    az mysql flexible-server ad-admin show
    

    Exemple : Obtenir l’administrateur Active Directory

    az mysql flexible-server ad-admin show -g testgroup -s testsvr
    
  • Attendre que l’administrateur Active Directory réponde à certaines conditions

    az mysql flexible-server ad-admin wait
    

    Exemples :

    • Attendre que l’administrateur Active Directory existe
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
    
    • Attendre que l’administrateur Active Directory soit supprimé
    az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
    

Créer des utilisateurs Microsoft Entra dans Azure Database pour MySQL

Pour ajouter un utilisateur Microsoft Entra à votre base de données Azure Database pour MySQL, effectuez les étapes suivantes après la connexion :

  1. Tout d’abord, assurez-vous que l’utilisateur <user>@yourtenant.onmicrosoft.com Microsoft Entra est un utilisateur valide dans le locataire Microsoft Entra.
  2. Connectez-vous à votre instance Azure Database pour MySQL en tant qu’utilisateur administrateur Microsoft Entra.
  3. Créer l’utilisateur <user>@yourtenant.onmicrosoft.com dans Azure Database pour MySQL.

Exemple :

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

Pour les noms d’utilisateur dépassant 32 caractères, il est recommandé d’utiliser un alias à la place, à utiliser lors de la connexion :

Exemple :

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

Notes

  1. MySQL ignore les espaces de début et de fin. Le nom d’utilisateur ne doit donc pas en contenir.
  2. L’authentification d’un utilisateur par le biais de Microsoft Entra ID ne lui donne pas d’autorisation d’accès aux objets dans la base de données Azure Database pour MySQL. Vous devez accorder manuellement les autorisations requises à l’utilisateur.

Créer des groupes Microsoft Entra dans Azure Database pour MySQL

Pour permettre à un groupe Microsoft Entra d’accéder à votre base de données, utilisez le même mécanisme que pour les utilisateurs, mais spécifiez plutôt le nom du groupe :

Exemple :

CREATE AADUSER 'Prod_DB_Readonly';

Pendant la connexion, les membres du groupe utilisent leurs jetons d’accès personnels, mais se connectent avec le nom du groupe spécifié comme nom d’utilisateur.

Compatibilité avec des pilotes d’application

La plupart des pilotes sont pris en charge, mais veillez à utiliser les paramètres d’envoi du mot de passe en texte clair, afin que le jeton soit envoyé sans modification.

  • C/C++

    • libmysqlclient : Prise en charge
    • mysql-connector-c++ : Prise en charge
  • Java

    • Connecteur/J (mysql-connector-java) : Pris en charge, doit utiliser le paramètre useSSL
  • Python

    • Connecteur/Python : Prise en charge
  • Ruby

    • mysql2 : Prise en charge
  • .NET

    • mysql-connector-net : Pris en charge, il faut ajouter un plug-in pour mysql_clear_password
    • mysql-net/MySqlConnector : Prise en charge
  • Node.js

    • mysqljs : Non pris en charge (n’envoie pas de jeton en texte clair sans correctif)
    • node-mysql2 : Prise en charge
  • Perl

    • DBD::mysql : Prise en charge
    • Net::MySQL : Non pris en charge
  • Go

    • go-sql-driver : Pris en charge, ajouter ?tls=true&allowCleartextPasswords=true à la chaîne de connexion
  • PHP

    • Extension mysqli : prise en charge

    • Pilote PDO_MYSQL : pris en charge

Étape suivante