Configuración de la autenticación de Microsoft Entra para Azure Database for MySQL: Servidor flexible
SE APLICA A: Azure Database for MySQL: servidor flexible
En este tutorial se muestra cómo configurar la autenticación de Microsoft Entra para el servidor flexible de Azure Database for MySQL.
En este tutorial, aprenderá a:
- Configure el administrador de Microsoft Entra.
- Conectarse al servidor flexible de Azure DB for MySQL utilizando Microsoft Entra ID.
Requisitos previos
Una cuenta de Azure con una suscripción activa.
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Nota:
Con una cuenta gratuita de Azure, ahora puede probar el servidor flexible de Azure Database for MySQL de forma gratuita durante 12 meses. Para más información, consulte Probar el servidor flexible de Azure Database for MySQL de forma gratuita.
Instale la CLI de Azure más reciente o actualice la que ya tiene a la versión más reciente. Consulte Instalación de la CLI de Azure.
Configurar el administrador de Microsoft Entra
Para crear un usuario administrador de Microsoft Entra, siga estos pasos.
En Azure Portal, seleccione la instancia del servidor flexible de Azure Database for MySQL que quiere habilitar para Microsoft Entra ID.
En el panel Seguridad, seleccione Autenticación:
Hay tres tipos de autenticación disponibles:
Solo autenticación de MySQL: de forma predeterminada, MySQL usa el complemento de autenticación mysql_native_password integrado, que realiza la autenticación mediante el método hash de contraseña nativo.
Únicamente autenticación de Microsoft Entra: solo permite la autenticación con una cuenta de Microsoft Entra. Deshabilita la autenticación mysql_native_password y activa el parámetro de servidor aad_auth_only.
Autenticación de MySQL y Microsoft Entra: permite la autenticación mediante una contraseña nativa de MySQL o una cuenta de Microsoft Entra. Desactiva el parámetro de servidor aad_auth_only.
Seleccionar identidad: seleccione o agregue una identidad administrada asignada por el usuario. Se requieren los siguientes permisos para permitir que la UMI lea de Microsoft Graph como identidad del servidor. Como alternativa, asigne a la identidad administrada asignada por el usuario el rol Lectores de directorio..
- User.Read.All: permite acceder a la información de usuarios de Microsoft Entra.
- GroupMember.Read.All: permite acceder a la información de grupos de Microsoft Entra.
- Application.Read.ALL: permite acceder a la información (de aplicaciones) de las entidades de servicio de Microsoft Entra.
Importante
Solo un usuario con al menos el rol Administrador de roles con privilegios puede conceder estos permisos.
Seleccione un usuario válido de Microsoft Entra o un grupo de Microsoft Entra en la tenencia del cliente para ser administrador de Microsoft Entra. Una vez habilitada la compatibilidad con la autenticación de Microsoft Entra, los administradores de Microsoft Entra se pueden agregar como entidades de seguridad con permiso para agregar usuarios de Microsoft Entra al servidor MySQL.
Nota:
Solo se puede crear un administrador de Microsoft Entra por servidor MySQL y la selección de otro sobrescribirá al administrador de Microsoft Entra existente configurado para el servidor.
Concesión de permisos a la identidad administrada asignada por el usuario
A continuación, se muestra un script de PowerShell de ejemplo que concede los permisos necesarios para las UMI. En este ejemplo se asignan permisos a la UMI umiservertest
.
Para ejecutar el script, debe iniciar sesión como usuario con un rol de administrador global o administrador de roles con privilegios.
El script concede los permisos User.Read.All
, GroupMember.Read.All
y Application.Read.ALL
a una UMI para acceder 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
En los pasos finales del script, si tiene más UMI con nombres similares, debe usar el número $MSI[ ]array
adecuado. Un ejemplo es $AAD_SP.ObjectId[0]
.
Comprobación de los permisos de la identidad administrada asignada por el usuario
Para comprobar los permisos de una UMI, vaya a Azure Portal. En el recurso Microsoft Entra ID, vaya a Aplicaciones empresariales. Seleccione Todas las aplicaciones para el Tipo de aplicación y busque la UMI que se creó.
Seleccione la UMI y vaya a la configuración de Permisos en Seguridad.
Una vez que se conceden los permisos a la UMI, se habilitan para todos los servidores o todas las instancias creadas con la UMI asignada como una identidad de servidor.
Conectarse al servidor flexible de Azure Database for MySQL utilizando Microsoft Entra ID
1 - Autenticarse con Microsoft Entra ID
Para empezar, autentíquese en Microsoft Entra ID con la CLI de Azure.
(Este paso no es necesario en Azure Cloud Shell)
Inicie sesión en la cuenta de Azure mediante el comando az login. Tenga en cuenta la propiedad ID, que hace referencia al id. de suscripción de su cuenta de Azure:
az login
El comando abre una ventana del explorador en la página de autenticación de Microsoft Entra. Requiere que proporcione el identificador de usuario y contraseña de Microsoft Entra.
Si tiene varias suscripciones, elija la más adecuada mediante el comando az account set:
az account set --subscription \<subscription id\>
2 - recuperación del token de acceso de Microsoft Entra
Invoque la herramienta CLI de Azure para adquirir un token de acceso para el usuario autenticado de Microsoft Entra del paso 1 para acceder al servidor flexible de Azure Database for MySQL.
Ejemplo (para la nube pública):
az account get-access-token --resource https://ossrdbms-aad.database.windows.net
El valor del recurso anterior debe especificarse exactamente como se muestra. En el caso de otras nubes, el valor del recurso se puede buscar usando lo siguiente:
az cloud show
En la versión 2.0.71 de CLI de Azure y posteriores, el comando se puede especificar en la siguiente versión más conveniente para todas las nubes:
az account get-access-token --resource-type oss-rdbms
Con PowerShell puede usar el siguiente comando para adquirir tokens de acceso:
$accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
Una vez que la autenticación se realiza correctamente, Microsoft Entra ID devuelve un token de acceso:
{
"accessToken": "TOKEN",
"expiresOn": "...",
"subscription": "...",
"tenant": "...",
"tokenType": "Bearer"
}
El token es una cadena de Base 64 que codifica toda la información sobre el usuario autenticado, y que está dirigida al servicio de Azure Database for MySQL.
La validez del token de acceso es de entre 5 y 60 minutos. Le recomendamos que obtenga el token de acceso antes de iniciar la sesión en el servidor flexible de Azure Database for MySQL.
- Puede usar el siguiente comando de PowerShell para ver la validez del token.
$accessToken.ExpiresOn.DateTime
3. Uso del token como contraseña para iniciar sesión con MySQL
Debe usar el token de acceso como contraseña de usuario de MySQL cuando se conecte. Puede utilizar el método anterior para recuperar el token al usar clientes de GUI, como MySQLWorkbench.
Conectarse al servidor flexible de Azure Database for MySQL mediante la CLI de MySQL
Al usar la CLI, puede usar este atajo para conectarse:
Ejemplo (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`
Ejemplo (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)
Conectarse al servidor flexible de Azure Database for MySQL mediante MySQL Workbench
- Inicie MySQL Workbench, seleccione la opción Base de datos y luego seleccione Conectar a base de datos.
- En el campo de nombre de host, escriba el FQDN de MySQL, por ejemplo, mydb.mysql.database.azure.com.
- En el campo nombre de usuario, escriba el nombre de administrador de Microsoft Entra de MySQL. Por ejemplo, user@tenant.onmicrosoft.com.
- En el campo Contraseña seleccione Almacenar en almacén y pegue el token de acceso del archivo, por ejemplo, C:\temp\MySQLAccessToken.txt.
- Seleccione la pestaña Opciones avanzadas y asegúrese de activar la casilla Habilitar el complemento de autenticación Cleartext.
- Seleccione Aceptar para conectarse a la base de datos.
Consideraciones importantes al conectarse
user@tenant.onmicrosoft.com
es el nombre del usuario o grupo de Microsoft Entra como el que intenta conectarse- Asegúrese de escribir de forma exacta el nombre del usuario o grupo de Microsoft Entra.
- Los nombres de usuario y grupo de Microsoft Entra distinguen mayúsculas de minúsculas
- Al conectarse como un grupo, use solo el nombre de grupo (por ejemplo,
GroupName
) - Si el nombre contiene espacios, utilice
\
antes de cada espacio para escaparlo.
Nota
Para el valor "enable-cleartext-plugin" debe usar una configuración similar a otros clientes para asegurarse de que el token se envíe al servidor sin hash.
Ahora está autenticado en su servidor MySQL flexible utilizando la autenticación Microsoft Entra.
Otros comandos de administrador de Microsoft Entra
Administración del administrador de Active Directory de un servidor
az mysql flexible-server ad-admin
Creación de un administrador de Active Directory
az mysql flexible-server ad-admin create
Ejemplo: Creación de un administrador de Active Directory con el usuario "john@contoso.com", el id. de administrador "00000000-0000-0000-0000-000000000000" y la identidad "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
Eliminación de un administrador de Active Directory
az mysql flexible-server ad-admin delete
Ejemplo: Eliminación de un administrador de Active Directory
az mysql flexible-server ad-admin delete -g testgroup -s testsvr
Enumeración de todos los administradores de Active Directory
az mysql flexible-server ad-admin list
Ejemplo: Enumeración de los administradores de Active Directory
az mysql flexible-server ad-admin list -g testgroup -s testsvr
Obtención de un administrador de Active Directory
az mysql flexible-server ad-admin show
Ejemplo: Obtención de un administrador de Active Directory
az mysql flexible-server ad-admin show -g testgroup -s testsvr
Espera a que el administrador de Active Directory cumpla ciertas condiciones
az mysql flexible-server ad-admin wait
Ejemplos:
- Espera hasta que exista el administrador de Active Directory
az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
- Espera a que se elimine el administrador de Active Directory
az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
Crear usuarios de Microsoft Entra en Azure Database for MySQL
Para agregar un usuario de Azure AD a la base de datos de Azure Database for MySQL, siga estos pasos después de la conexión:
- En primer lugar, asegúrese de que el usuario de Microsoft Entra
<user>@yourtenant.onmicrosoft.com
sea un usuario válido en el inquilino de Microsoft Entra. - Inicie sesión en la instancia de Azure Database for MySQL como usuario administrador de Microsoft Entra.
- Cree el usuario
<user>@yourtenant.onmicrosoft.com
en Azure Database for MySQL.
Ejemplo:
CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';
En el caso de los nombres de usuario que superen los 32 caracteres, se recomienda usar un alias en su lugar, para usarlo al conectarse:
Ejemplo:
CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';
Nota
- MySQL omite los espacios iniciales y finales, por lo que el nombre de usuario no debe tener espacios de este tipo.
- La autenticación de un usuario mediante Microsoft Entra ID no concede al usuario ningún permiso para tener acceso a los objetos de la base de datos de Azure Database for MySQL. Asegúrese de concederle al usuario los permisos necesarios de forma manual.
Creación de grupos de Microsoft Entra en Azure Database for MySQL
Para habilitar el acceso de un grupo de Microsoft Entra a la base de datos, use el mismo mecanismo que para los usuarios, pero en su lugar especifique el nombre del grupo:
Ejemplo:
CREATE AADUSER 'Prod_DB_Readonly';
Al iniciar sesión, los miembros del grupo usan sus tokens de acceso personal, pero inician sesión con el nombre del grupo especificado como nombre de usuario.
Compatibilidad con controladores de aplicaciones
Se admite la mayoría de los controladores; sin embargo, asegúrese de usar la configuración para enviar la contraseña en texto sin cifrar, de modo que el token se envíe sin modificaciones.
C/C++
- libmysqlclient: Compatible
- mysql-connector-c++: Compatible
Java
- Connector/J (mysql-connector-java): Compatible, debe usar la configuración
useSSL
- Connector/J (mysql-connector-java): Compatible, debe usar la configuración
Python
- Connector/Python: Compatible
Ruby
- mysql2: Compatible
.NET
- mysql-connector-net: Compatible, debe agregar complementos para mysql_clear_password
- mysql-net/MySqlConnector: Compatible
Node.js
- mysqljs: No compatible (no envía el token en texto no cifrado sin revisión)
- node-mysql2: Compatible
Perl
- DBD::mysql: Compatible
- Net::MySQL: No compatible
Go
- go-sql-driver: Compatible, agregue
?tls=true&allowCleartextPasswords=true
a la cadena de conexión
- go-sql-driver: Compatible, agregue
PHP
Extensión mysqli: compatible
controlador de PDO_MYSQL: compatible
Pasos siguientes
- Revisión de los conceptos generales de la autenticación de Microsoft Entra con el servidor flexible de Azure Database for MySQL