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, agregará una identidad administrada a una Azure Function que usa enlaces de Azure SQL. En el ejemplo de backend ToDo hay disponible un proyecto de ejemplo de Azure Function con enlaces SQL.
Cuando haya terminado este tutorial, Azure Function se conectará a la base de datos de Azure SQL sin necesidad de nombre de usuario ni contraseña.
Información general de los pasos que se van a dar:
Concesión de acceso de base de datos al usuario de Microsoft Entra
En primer lugar, habilite la autenticación Microsoft Entra para la base de datos SQL asignando un usuario Microsoft Entra como administrador del servidor de Active Directory. 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.
La habilitación de la autenticación de Microsoft Entra puede realizarse a través de Azure Portal, PowerShell o la CLI de Azure. A continuación se indican las instrucciones para la CLI de Azure y la información para completar esto a través de Azure Portal y PowerShell está disponible en la documentación de Azure SQL sobre la autenticación de Microsoft Entra.
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.
Busque el identificador de objeto del usuario de Microsoft Entra mediante
az ad user list
y reemplace <user-principal-name>. El resultado se guardará 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
.Agregue este usuario de Microsoft Entra como administrador de Active Directory mediante el comando
az sql server ad-admin create
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 agregar un administrador de Active Directory, consulte Aprovisionar un administrador de Microsoft Entra para su servidor
Habilitación de una identidad administrada asignada por el sistema en Azure Function
En este paso agregaremos una identidad asignada por el sistema a Azure Function. En pasos posteriores, esta identidad tendrá acceso a la base de datos SQL.
Para habilitar una identidad administrada asignada por el sistema en Azure Portal:
- Cree una función de Azure en el portal como lo haría normalmente. Navegue hasta el portal.
- Desplácese hacia abajo hasta el grupo Configuración en el panel de navegación izquierdo.
- Seleccione Identidad.
- En la pestaña Asignado por el sistema, cambie Estado a Activado. Haga clic en Save(Guardar).
Para obtener información sobre cómo habilitar la identidad administrada asignada por el sistema mediante la CLI de Azure o PowerShell, consulte más información sobre el uso de identidades administradas con Azure Functions.
Sugerencia
Para la identidad administrada asignada por el usuario, cambie a la pestaña Asignado por el usuario. Haga clic en Agregar y seleccione una identidad administrada. Para obtener más información sobre cómo crear una identidad administrada asignada por el usuario, vea Administración de identidades administradas asignadas por el usuario.
Conceder a SQL Database acceso a la identidad administrada
En este paso, nos conectaremos a la base de datos SQL con una cuenta de usuario de Microsoft Entra y concederemos a la identidad administrada acceso a la base de datos.
Abra la herramienta SQL preferida e inicie sesión con una cuenta de usuario de Microsoft Entra (por ejemplo, el usuario de Microsoft Entra asignado como administrador). Esto se puede lograr en Cloud Shell con el comando SQLCMD.
sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
En el símbolo del sistema de SQL para la base de datos que desee, ejecute los siguientes comandos para conceder permisos a la 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. Si la identidad la ha asignado el sistema, el nombre siempre coincide con el nombre de la aplicación de funciones.
Configuración de la cadena de conexión SQL de Azure Function
En el paso final configuraremos la cadena de conexión de Azure Function SQL para utilizar la autenticación de identidad gestionada por Microsoft Entra.
El nombre de la configuración de la cadena de conexión se identifica en nuestro código de Functions como el atributo de enlace "ConnectionStringSetting", como se muestra en atributos y anotaciones de enlace de entrada SQL.
En la configuración de la aplicación de nuestra aplicación de funciones, la configuración de la cadena de conexión SQL debe actualizarse para seguir este formato:
Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Database=testdb
testdb es el nombre de la base de datos a la que nos conectamos y demo.database.windows.net es el nombre del servidor al que nos conectamos.
Sugerencia
Para la identidad administrada asignada por el usuario, use Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; User Id=ClientIdOfManagedIdentity; Database=testdb
.