Entidad de servicio de Azure Active Directory con Azure SQL

SE APLICA A: Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (solo grupos de SQL dedicados)

Azure Active Directory (Azure AD) admite la creación de usuarios en Azure SQL Database (SQL DB) en nombre de las aplicaciones de Azure AD (entidades de servicio). Es compatible con Azure SQL Database y Azure SQL Managed Instance, así como con los grupos de SQL dedicados de áreas de trabajo de Azure Synapse y los grupos de SQL dedicados (anteriormente SQL DW).

Compatibilidad con entidades de servicio (aplicaciones de Azure AD)

Este artículo se aplica a las aplicaciones que están integradas en Azure AD y forman parte del registro de Azure AD. A menudo, estas aplicaciones necesitan acceso de autenticación y autorización a Azure SQL para realizar diversas tareas. Esta característica permite a las entidades de servicio crear usuarios de Azure AD en SQL Database. Había una limitación que impedía la creación de objetos de Azure AD en nombre de aplicaciones de Azure AD, pero se han eliminado.

Cuando se registra una aplicación de Azure AD mediante Azure Portal o un comando de PowerShell, se crean dos objetos en el inquilino de Azure AD:

  • Un objeto de aplicación
  • Un objeto de entidad de servicio.

Para obtener más información sobre las aplicaciones de Azure AD, consulteObjetos de aplicación y de entidad de servicio de Azure Active Directory y Creación de una entidad de servicio de Azure con Azure PowerShell.

Tanto SQL Database como SQL Managed Instance admiten los siguientes objetos de Azure AD:

  • Usuarios de Azure AD (administrados, federados e invitados)
  • Grupos de Azure AD (administrados y federados)
  • Aplicaciones de Azure AD

Ahora se admite el comando de T-SQL CREATE USER [Azure_AD_Object] FROM EXTERNAL PROVIDER en nombre de una aplicación de Azure AD para SQL Database.

Funcionalidad de la creación de usuarios de Azure AD mediante entidades de servicio

La compatibilidad con esta funcionalidad es útil en los procesos de automatización de aplicaciones de Azure AD donde objetos de Azure AD se crean y mantienen en SQL Database sin interacción humana. Las entidades de servicio pueden ser un administrador de Azure AD para el servidor lógico de SQL, como parte de un grupo o un usuario individual. La aplicación puede automatizar la creación de objetos de Azure AD en SQL Database cuando se ejecuta como administrador del sistema y no requiere ningún privilegio de SQL adicional. Esto permite una automatización completa de la creación de usuarios de base de datos. Esta característica también admite una identidad administrada asignada por el sistema de Azure AD y una identidad administrada asignada por el usuario que se pueden crear como usuarios en SQL Database en nombre de las entidades de servicio. Para obtener más información, consulte ¿Qué son las identidades administradas para recursos de Azure?

Habilitación de entidades de servicio para crear usuarios de Azure AD

Para habilitar la creación de un objeto de Azure AD en SQL Database en nombre de una aplicación de Azure AD, se requiere la siguiente configuración:

  1. Asigne la identidad del servidor. La identidad del servidor asignada representa la identidad del servicio administrado (MSI). La identidad del servidor puede ser una identidad administrada asignada por el usuario o el sistema. Para más información, vea Administración de una identidad administrada asignada por el usuario en Azure AD para Azure SQL.

    • Para un nuevo servidor lógico de Azure SQL, ejecute el siguiente comando de PowerShell:
    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 los servidores lógicos existentes de Azure SQL, ejecute el siguiente comando:
    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.

    Nota:

    La identidad del servidor se puede asignar mediante los comandos de la API 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. Conceder el permiso Lectores de directorio de Azure AD a la identidad del servidor creada o asignada al servidor

    • Para conceder este permiso, siga la descripción que se usa para SQL Managed Instance que está disponible en el siguiente artículo: Aprovisionamiento de un administrador de Azure AD (Instancia administrada de SQL)
    • El usuario de Azure AD que concede este permiso debe formar parte del rol Administrador global o Administrador de roles con privilegios de Azure AD.
    • Para los grupos de SQL dedicados de un área de trabajo de Azure Synapse, use la identidad administrada del área de trabajo en lugar de la identidad del servidor de Azure SQL.

Importante

Con la compatibilidad de Microsoft Graph para Azure SQL, el rol Lectores de directorios se puede reemplazar con el uso de permisos de nivel inferior. Para más información, vea Administración de una identidad administrada asignada por el usuario en Azure AD para Azure SQL

Los pasos 1 y 2 se deben ejecutar en el orden anterior. En primer lugar, cree o asigne la identidad del servidor, conceda el permiso Lectores de directorio o los permisos de nivel inferior que se tratan en Identidad administrada asignada por el usuario en Azure AD para Azure SQL. Si se omite uno de estos pasos, o ambos, se producirá un error de ejecución durante la creación de un objeto de Azure AD en Azure SQL en nombre de una aplicación de Azure AD.

Puede asignar el rol Lectores de directorio a un grupo en Azure AD. A continuación, los propietarios del grupo pueden agregar la identidad administrada como miembro de este grupo, lo que omitiría la necesidad de que un usuario Administrador global o Administrador de roles con privilegios concedieran el rol Lectores de directorio. Para más información sobre esta característica, vea Rol Lectores de directorio en Azure Active Directory de Azure SQL.

Solución de problemas y limitaciones

  • Al crear objetos de Azure AD en Azure SQL en nombre de una aplicación de Azure AD sin habilitar la identidad del servidor y conceder el permiso Lectores de directorio o los permisos de nivel inferior que se tratan en Identidad administrada asignada por el usuario en Azure AD para Azure SQL se producirá un error en la operación con los siguientes errores posibles. El siguiente error de ejemplo es para la ejecución de un comando de PowerShell para crear un usuario de SQL Database myapp en el artículo Tutorial: Creación de usuarios de Azure AD con aplicaciones de Azure AD.
    • Exception calling "ExecuteNonQuery" with "0" argument(s): "'myapp' is not a valid login or you do not have permission. Cannot find the user 'myapp', because it does not exist, or you do not have permission."
    • Exception calling "ExecuteNonQuery" with "0" argument(s): "Principal 'myapp' 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)'"
    • Se admite la definición de la entidad de servicio (aplicación de Azure AD) como administrador de Azure AD para SQL Database con los comandos de Azure Portal, PowerShell y la API REST y la CLI.
  • El uso de una aplicación de Azure AD con la entidad de servicio de otro inquilino de Azure AD producirá un error al acceder a la instancia de SQL Database o SQL Managed Instance creada en otro inquilino. Una entidad de servicio asignada a esta aplicación debe provenir del mismo inquilino que el servidor lógico de SQL o Managed Instance.
  • Se necesita el módulo Az.Sql 2.9.0 o posterior cuando se usa PowerShell para configurar una aplicación de Azure AD individual como administrador de Azure AD para Azure SQL. Asegúrese de que ha actualizado al módulo más reciente.

Pasos siguientes