Tutorial: Conectar una aplicación de funciones a Azure SQL con enlaces de identidad y SQL administrados

Azure Functions proporciona una identidad administrada, la cual constituye una solución inmediata para proteger el acceso a Azure SQL Database y a otros servicios de Azure. Las identidades administradas hacen que su aplicación sea más segura mediante la eliminación de los secretos de aplicación como, por ejemplo, las credenciales en las cadenas de conexión. En este tutorial, añades una identidad gestionada a una aplicación de funciones que utiliza enlaces de Azure SQL.

Este tutorial utiliza una identidad gestionada asignada por el usuario (UAMI), que se recomienda porque puede compartirse entre recursos y es independiente del ciclo de vida de la aplicación. Para más información sobre conexiones basadas en identidad en Azure Functions, consulte Configurar conexiones a servicios remotos.

Cuando termines este tutorial, tu app de funciones se conecta a Azure SQL Database sin necesidad de nombre de usuario ni contraseña.

Una visión general de los pasos que sigues:

Concesión de acceso de base de datos al usuario de Microsoft Entra

Primero, habilitar la autenticación de Microsoft Entra en la base de datos SQL asignando a un usuario de Microsoft Entra como administrador de Active Directory del servidor. Este usuario no es la cuenta Microsoft que usó para suscribirse a Azure. Debe ser un usuario que haya creado, importado, sincronizado o invitado en Microsoft Entra ID. Para obtener más información sobre los usuarios permitidos de Microsoft Entra, consulte Características y limitaciones de Microsoft Entra en la base de datos SQL.

Puedes habilitar la autenticación de Microsoft Entra a través del portal de Azure, PowerShell o CLI de Azure. Las instrucciones para CLI de Azure se encuentran en la siguiente sección. Para información sobre cómo realizar esta tarea a través del portal de Azure y PowerShell, consulte la documentación de Azure SQL sobre autenticación de Microsoft Entra.

  1. Si el inquilino de Microsoft Entra aún no tiene un usuario, cree uno siguiendo los pasos descritos en Agregar o eliminar usuarios mediante Microsoft Entra ID.

  2. Encuentra el ID del objeto del usuario de Microsoft Entra usando el az ad user list comando y reemplaza <usuario-nombre-principal>. Guarda el resultado en una variable.

    Para la CLI de Azure 2.37.0 y versiones más recientes:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Para versiones anteriores de la CLI de Azure:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)
    

    Sugerencia

    Para ver la lista de todos los nombres principales de usuario en Microsoft Entra ID, ejecute az ad user list --query [].userPrincipalName.

  3. Añade a este usuario de Microsoft Entra como administrador de Active Directory usando el az sql server ad-admin create comando en Cloud Shell. En el siguiente comando, reemplace <server-name> por el nombre del servidor (sin el sufijo .database.windows.net).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Para más información sobre cómo añadir un administrador de Active Directory, consulte Provisionar un administrador de Microsoft Entra para su servidor.

Creación de una identidad administrada asignada por el usuario

Crea una identidad gestionada asignada por el usuario y asignala a tu aplicación funcional. Usa una identidad asignada por el usuario porque puedes reutilizarla en varios recursos y su ciclo de vida es independiente de tu aplicación funcional.

  1. En el portal de Azure, busca Identidades gestionadas y selecciona Crear.

  2. Elige tu suscripción, grupo de recursos, región y asigna un nombre a la identidad (por ejemplo, my-sql-identity).

  3. Seleccione Revisar y crear y, a continuación, seleccione Crear.

  4. Después de crear la identidad, vaya a su aplicación de funciones en el portal.

  5. En Configuración, selecciona Identidad y luego selecciona la pestaña asignada por el usuario.

  6. Selecciona Añadir, elige la identidad gestionada que has creado y selecciona Añadir.

Sugerencia

También puedes usar una identidad gestionada asignada por el sistema. Si prefieres la opción asignada por el sistema, actívala en la pestaña Asignado por el sistema de la página Identidad. Cuando uses una identidad asignada por el sistema, el valor de <identity-name> en los comandos SQL es el nombre de la aplicación de funciones, y no necesitas el parámetro User Id en la cadena de conexión.

Conceder a SQL Database acceso a la identidad administrada

En este paso, conéctate a la base de datos SQL usando una cuenta de usuario de Microsoft Entra y concede a la identidad gestionada acceso a la base de datos.

  1. Abre tu herramienta SQL preferida e inicia sesión usando una cuenta de usuario de Microsoft Entra, como el usuario de Microsoft Entra que has asignado como administrador. Puedes realizar este paso en Cloud Shell usando el comando SQLCMD.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. En el prompt de SQL para la base de datos que desees, ejecuta los siguientes comandos para conceder permisos a tu función. Por ejemplo,

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> es el nombre de la identidad administrada en Microsoft Entra ID. Para una identidad asignada por el usuario, este nombre es el nombre que le diste a la identidad cuando la creaste (por ejemplo, my-sql-identity). Para una identidad asignada por el sistema, el nombre siempre es el mismo que el nombre de tu aplicación funcional.

    Note

    Si usa el desencadenador Azure SQL, la identidad administrada requiere permisos adicionales más allá de db_datareader y db_datawriter. Para obtener más información, consulte conceder permisos para el desencadenador de Azure SQL.

Configuración de la cadena de conexión SQL de Azure Function

En el paso final, configura la cadena de conexión SQL de la aplicación de funciones para que use la autenticación de identidad administrada de Microsoft Entra.

Identifica el nombre de la configuración de la cadena de conexión en el código de la función como el atributo de enlace ConnectionStringSetting, como se muestra en los atributos y anotaciones del enlace de entrada SQL.

En la configuración de la aplicación de tu aplicación de funciones, actualiza la configuración de la cadena de conexión SQL para que siga este formato:

Server=<server-name>.database.windows.net; Authentication=Active Directory Default; Database=<database-name>; User Id=<client-id-of-user-assigned-identity>

Sustituye <server-name> por el nombre de tu servidor SQL, <database-name> por el nombre de tu base de datos y <client-id-of-user-assigned-identity> por el ID de cliente de la identidad gestionada asignada por el usuario. Puedes encontrar el ID del cliente en la página de Resumen de tu recurso de identidad gestionada en el portal de Azure.

Sugerencia

La Active Directory Default palabra clave de autenticación funciona tanto localmente (usando tus credenciales de desarrollador) como en Azure (usando la identidad gestionada). Esta función significa que puedes usar la misma cadena de conexión en ambos entornos. Para la identidad gestionada asignada al sistema, omite el User Id parámetro.

Para más información sobre conexiones basadas en identidad, consulte Configurar conexiones a servicios remotos.

Pasos siguientes