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 microsoft Entra Administración.
  • Conectar al servidor flexible de Azure Database for MySQL mediante el identificador de Microsoft Entra.

Requisitos previos

Configuración de Microsoft Entra Administración

Para crear un usuario de Microsoft Entra Administración, siga estos pasos.

  • En Azure Portal, seleccione la instancia del servidor flexible de Azure Database for MySQL que desea habilitar para el identificador de Microsoft Entra.

  • En el panel Seguridad, seleccione Autenticación: Diagram of how to configure Microsoft Entra authentication.

  • 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.

    • Autenticación de Microsoft Entra solo: 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 UMI 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

Estos permisos solo puede concederlos un Administrador global o un Administrador de roles con privilegios.

  • Seleccione un usuario válido de Microsoft Entra o un grupo de Microsoft Entra en el inquilino del cliente para que sea administrador de Microsoft Entra. Una vez habilitada la compatibilidad con la autenticación de Microsoft Entra, los Administración 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 seleccionar otro sobrescribe el 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[0]  -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[0]  -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[0]  -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.

Conectar al servidor flexible de Azure Database for MySQL mediante el identificador de Microsoft Entra

1- Autenticación con el identificador de Microsoft Entra

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 inicia 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 de la 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. Se recomienda obtener el token de acceso antes de iniciar el inicio de 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.

Conexión a un 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 a Azure Database for MySQL con la opción Servidor flexible 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 que está intentando conectarse como
  • 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 el servidor flexible de MySQL mediante la autenticación de 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
    

Creación de usuarios de Microsoft Entra en Azure Database for MySQL

Para agregar un usuario de Microsoft Entra a la base de datos de Azure Database for MySQL, realice los pasos siguientes después de conectarse:

  1. 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.
  2. Inicie sesión en la instancia de Azure Database for MySQL como usuario administrador de Microsoft Entra.
  3. 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

  1. MySQL omite los espacios iniciales y finales, por lo que el nombre de usuario no debe tener espacios de este tipo.
  2. 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 un grupo de Microsoft Entra para acceder a la base de datos, use el mecanismo exacto como para los usuarios, pero 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
  • 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

Pasos siguientes