Entidades de servicio de Microsoft Entra con Azure SQL

Se aplica a:Azure SQL DatabaseAzure SQL Managed Instance

Los recursos de Azure SQL admiten el acceso mediante programación para aplicaciones que usan entidades de servicio e identidades administradas en Microsoft Entra ID (anteriormente Azure Active Directory).

Soporte para la entidad de servicio (aplicaciones de Microsoft Entra)

Este artículo se aplica a las aplicaciones registradas en Microsoft Entra ID. El uso de credenciales de aplicación para acceder a Azure SQL admite el principio de seguridad de separación de tareas, lo que permite a las organizaciones configurar el acceso preciso para cada aplicación que se conecta a sus bases de datos. Las identidades administradas, una forma especial de entidades de servicio, se recomiendan especialmente ya que no tienen contraseña y eliminan la necesidad de credenciales administradas por el desarrollador.

Microsoft Entra ID permite además escenarios de autenticación avanzados, como OAuth 2.0 On-Behalf-Of Flow (OBO). OBO permite a las aplicaciones solicitar credenciales de usuario que hayan iniciado sesión, en escenarios en los que las propias aplicaciones no deben tener acceso a la base de datos sin permisos delegados.

Para obtener más información sobre las aplicaciones de Microsoft Entra, consulte Objetos de aplicación y de entidad de servicio de Microsoft Entra ID y Creación de una entidad de servicio de Azure con Azure PowerShell.

Creación de usuarios de Microsoft Entra mediante entidades de servicio

La compatibilidad con esta funcionalidad es útil en los procesos de automatización de aplicaciones de Microsoft Entra donde se crean y mantienen entidades de Microsoft Entra en SQL Database o SQL Managed Instance sin interacción humana. Las entidades de servicio pueden ser un administrador de Microsoft Entra para el servidor lógico o la instancia administrada de SQL, como parte de un grupo o una identidad individual. La aplicación puede automatizar la creación de objetos de Microsoft Entra en SQL Database o SQL Managed Instance, lo que permite la automatización completa de la creación de usuarios de base de datos.

Habilitación de entidades de servicio para crear usuarios de Microsoft Entra

Al usar aplicaciones para acceder a Azure SQL, la creación de usuarios e inicios de sesión de Microsoft Entra requiere permisos que no están asignados a entidades de servicio o identidades administradas de forma predeterminada: la capacidad de leer usuarios, grupos y aplicaciones en un inquilino de Microsoft Graph. Estos permisos son necesarios para que el motor de SQL valide la identidad especificada en CREATE LOGIN o CREATE USER y extraiga información importante, incluido el objeto de la identidad o el identificador de aplicación, que se usa para crear el inicio de sesión o el usuario.

Cuando un usuario de Microsoft Entra ejecuta estos comandos, la aplicación Microsoft de Azure SQL usa permisos delegados para suplantar al usuario que ha iniciado sesión y consulta Microsoft Graph con sus permisos. Este flujo no es posible con entidades de servicio, ya que una aplicación no puede suplantar a otra aplicación. En su lugar, el motor de SQL intenta usar su identidad de servidor, que es la identidad administrada principal asignada a una instancia administrada de SQL, un servidor lógico de Azure SQL o un área de trabajo de Azure Synapse. La identidad del servidor debe existir y tener los permisos de consulta de Microsoft Graph, de lo contrario, se produce un error en las operaciones.

En los pasos siguientes se explica cómo asignar una identidad administrada al servidor y asignarle los permisos de Microsoft Graph para permitir que las entidades de servicio creen usuarios e inicios de sesión de Microsoft Entra en la base de datos.

  1. Asigne la identidad del servidor. La identidad del servidor puede ser una identidad administrada asignada por el usuario o el sistema. Para más información, vea Identidad administrada asignada por el usuario en Microsoft Entra ID para Azure SQL.

    • El siguiente comando de PowerShell crea un nuevo servidor lógico aprovisionado con una identidad administrada asignada por el sistema:
    New-AzSqlServer -ResourceGroupName <resource group> -Location <Location name> -ServerName <Server name> -ServerVersion "12.0" -SqlAdministratorCredentials (Get-Credential) -AssignIdentity
    

    Para más información, consulte el comando New-AzSqlServer o el comando New-AzSqlInstance de SQL Managed Instance.

    • Para un servidor lógico existente, ejecute el siguiente comando para agregarle una identidad administrada asignada por el sistema:
    Set-AzSqlServer -ResourceGroupName <resource group> -ServerName <Server name> -AssignIdentity
    

    Para más información, consulte el comando Set-AzSqlServer o el comando Set-AzSqlInstance de SQL Managed Instance.

    • Para comprobar si la identidad del servidor está asignada al servidor, ejecute el comando Get-AzSqlServer o el comando Get-AzSqlInstance para SQL Managed Instance.

    Nota:

    La identidad del servidor se puede asignar mediante los comandos de la API de REST y la CLI también. Para más información, consulte az sql server create, az sql server update y Servidores: API REST.

  2. Conceda permisos de identidad de servidor para consultar Microsoft Graph. Esto puede hacerse de varias maneras: agregando la identidad al rol Lectores de directorio de Microsoft Entra, asignando la identidad a los permisos individuales de Microsoft Graph o agregando la identidad a un grupo asignable de roles que tenga el rol Lectores de directorio:

    • Incorporación de la identidad del servidor a un grupo asignable de roles

      En entornos de producción, se recomienda que un administrador de inquilinos cree un grupo asignable a roles y le asigne el rol Lectores de directorio. A continuación, los propietarios del grupo pueden agregar identidades de servidor al grupo, heredando esos permisos. Esto elimina el requisito de un Administrador global o Administrador de roles con privilegios para conceder permisos a cada identidad de servidor individual, lo que permite a los administradores delegar la asignación de permisos a los propietarios del grupo para este escenario. Para obtener más información, consulte Rol Lectores de directorio en Microsoft Entra ID para Azure SQL.

    • Asignación de permisos de Microsoft Graph a la identidad del servidor

      Para asignar los permisos individuales de Microsoft Graph a la identidad del servidor, debe tener el rol de Administrador global o Administrador de roles con privilegios de Microsoft Entra. Esto se recomienda antes que la asignación del rol Lectores de directorio, ya que hay permisos incluidos en el rol que no necesita la identidad del servidor. Asignar solo los permisos de lectura individuales de Microsoft Graph limita los permisos de la identidad del servidor dentro del inquilino y mantiene el principio de privilegios mínimos. Para obtener instrucciones, consulte Identidad administrada asignada por el usuario en Microsoft Entra ID para Azure SQL.

    • Adición de la identidad del servidor al rol Lectores de directorio

      Para agregar la identidad del servidor al rol Lectores de directorio, debe ser miembro del rol Administrador global o Administrador de roles con privilegios de Microsoft Entra. En entornos de producción, esta opción no se recomienda por dos motivos: el rol Lector de directorios proporciona más permisos de los que requiere la identidad del servidor y el proceso de asignación de roles todavía requiere aprobaciones de administrador para cada identidad de servidor (a diferencia del uso de grupos). Siga las instrucciones de SQL Managed Instance disponibles en el artículo Aprovisionamiento del administrador de Microsoft Entra (SQL Managed Instance).

Solución de problemas

Al solucionar problemas, es posible que encuentre el siguiente error:

Msg 33134, Level 16, State 1, Line 1
Principal 'test-user' could not be resolved.
Error message: 'Server identity is not configured. Please follow the steps in "Assign an Azure AD identity to your server and add Directory Reader permission to your identity" (https://aka.ms/sqlaadsetup)'

Este error indica que no se ha creado la identidad del servidor o que no se le han asignado permisos de Microsoft Graph. Siga los pasos para asignar una identidad al servidor lógico y asignar el permiso Lectores de directorio a la identidad del servidor lógico.

Limitaciones

  • Las entidades de servicio no se pueden autenticar entre los límites de los inquilinos. Se produce un error al intentar acceder a SQL Database o SQL Managed Instance mediante una aplicación de Microsoft Entra creada en otro inquilino.

  • Se necesita el módulo Az.Sql 2.9.0 o posterior para configurar una aplicación de Microsoft Entra como administrador de Microsoft Entra para Azure SQL. Asegúrese de que ha actualizado al módulo más reciente.

Pasos siguientes