Compartir a través de


Tutorial: Uso de la identidad administrada para conectar una aplicación web de Azure a una base de datos de Azure SQL sin secretos

Azure App Service proporciona un servicio de hospedaje web muy escalable y con aplicación de revisiones de un modo automático en Azure. App Service también proporciona una identidad administrada para la aplicación, que es una solución llave en mano para proteger el acceso a Azure SQL y a otros servicios de Azure. Las identidades administradas de App Service hacen que la aplicación sea más segura mediante la eliminación de secretos, como las credenciales de las cadenas de conexión.

En este tutorial se muestra cómo agregar una identidad administrada a una aplicación de .NET de ejemplo que tiene un back-end de Azure SQL. Después de finalizar, la aplicación puede conectarse a la base de datos de Azure SQL de forma segura sin necesidad de un nombre de usuario y una contraseña.

Diagrama de arquitectura para el escenario del tutorial.

En este tutorial, usted hará lo siguiente:

  • Habilite las identidades administradas.
  • Conceda a Azure SQL Database acceso a la identidad administrada.
  • Configure Entity Framework para utilizar la autenticación de Microsoft Entra con SQL Database.
  • Conéctese a SQL Database desde Visual Studio mediante la autenticación de Microsoft Entra.

Para obtener instrucciones sobre el uso de Azure Database for MySQL o Azure Database for PostgreSQL en marcos de Node.js, Python y Java, consulte Tutorial: Conexión a bases de datos de Azure desde App Service sin secretos mediante una identidad administrada.

Nota:

  • El identificador y las identidades administradas de Microsoft Entra no se admiten para SQL Server local.

  • La autenticación de Microsoft Entra es diferente de la autenticación integrada de Windows en Active Directory (AD) Domain Services (DS) local. AD DS y Microsoft Entra ID usan protocolos de autenticación completamente diferentes. Para obtener más información, consulte Documentación de Microsoft Entra Domain Services.

Requisitos previos

  • Si no tiene una cuenta de Azure, cree una cuenta gratuita antes de comenzar.

  • Tenga una aplicación básica de Azure App Service ASP.NET MVC o ASP.NET Core MVC de tipo create-read-update-delete (CRUD) que utiliza Azure SQL Database con autenticación SQL como servidor. Los pasos de este tutorial admiten las siguientes versiones de .NET:

    • .NET Framework 4.8 y versiones posteriores
    • .NET 6.0 y versiones posteriores
  • Permitir la conexión del cliente desde su equipo a Azure para que pueda depurar su aplicación en el entorno de desarrollo. Puede agregar la dirección IP del cliente siguiendo los pasos descritos en Administración de reglas de firewall de IP de nivel de servidor mediante Azure Portal.

  • Inicie sesión en Azure Cloud Shell o prepare su entorno para usar la CLI de Azure.

Concesión de acceso de administrador de base de datos a un usuario de Microsoft Entra

Habilite la autenticación de Microsoft Entra en la base de datos de Azure SQL mediante la asignación de un usuario de Microsoft Entra como administrador de Azure SQL Server. El administrador de Microsoft Entra debe ser un usuario creado, importado, sincronizado o invitado en Microsoft Entra ID. Es posible que este usuario no sea el mismo que el usuario de la cuenta Microsoft para su suscripción de Azure.

Ejecute los siguientes comandos en el entorno de Bash de Azure Cloud Shell o después de iniciar sesión en la CLI de Azure localmente.

  1. Use az ad user list con el display-name, filter o upn para obtener el identificador de objeto del usuario de Microsoft Entra ID al que desea hacer administrador. Ejecute az ad user list de forma independiente para mostrar información de todos los usuarios del directorio de Microsoft Entra.

    Por ejemplo, el siguiente comando muestra la información de un usuario de Microsoft Entra ID con el display-name del nombre y apellido.

    az ad user list --display-name "Firstname Lastname"
    

    Esta es la salida de ejemplo:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Agregue el usuario de Microsoft Entra ID como administrador en Azure SQL Server mediante az sql server ad-admin create con el parámetro object-id. En el siguiente comando, reemplace <server-name> por el nombre de su servidor, sin el sufijo .database.windows.net, y reemplace <entra-id> por el valor id de la salida del comando anterior az ad user list.

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

Configuración de la conectividad de identidad administrada para la aplicación

Los pasos siguientes configuran la aplicación para conectarse a Azure SQL Database mediante una identidad administrada asignada por el sistema. Para usar una identidad asignada por el usuario, consulte Tutorial: Conexión a bases de datos de Azure desde App Service sin secretos mediante una identidad administrada.

Habilitación de la identidad administrada para la aplicación

Para habilitar una identidad administrada para la aplicación de Azure, use el comando az webapp identity assign , reemplazando por <app-name> el nombre de la aplicación. El nombre de una identidad asignada por el sistema siempre es el mismo que el nombre de la aplicación.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Este es un ejemplo de la salida:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Para habilitar la identidad administrada para una ranura de implementación, agregue --slot <slot-name> al comando anterior y use el nombre de la ranura en <slot-name>. El nombre de una identidad asignada por el sistema para una ranura de implementación es <app-name>/slots/<slot-name>.

También puede agregar la identidad a un grupo de Microsoft Entra y, a continuación, conceder a SQL Database acceso al grupo Microsoft Entra en lugar de a la identidad. Para conceder permisos a un grupo de Microsoft Entra, utilice el nombre para mostrar del grupo. Los comandos siguientes agregan la identidad administrada de ejemplo a un nuevo grupo denominado myAzureSQLDBAccessGroup.

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Concesión de permisos a la identidad administrada

Conceda a la identidad los permisos mínimos que necesita la aplicación.

  1. Abra una línea de comandos de PowerShell e inicie sesión en SQL Database mediante el siguiente comando SQLCMD. Reemplace por <server-name> el nombre del servidor, <db-name> por el nombre de la base de datos y <admin-user> por el userPrincipalName del usuario administrador de la salida del comando anterior az ad user list .

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Siga las indicaciones para iniciar sesión.

  2. En el indicador SQL, ejecute los siguientes comandos para conceder a la aplicación los permisos mínimos que necesita en la base de datos. Reemplace <identity-name> por el nombre de la identidad administrada en Microsoft Entra ID, que es igual al nombre de la aplicación.

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

Nota:

Los servicios de identidad administrada de back-end mantienen una caché de tokens que actualiza el token de un recurso de destino solo cuando expira. Si intenta modificar los permisos de SQL Database después de obtener primero un token con la aplicación, no obtendrá un nuevo token con permisos actualizados hasta que expire el token almacenado en caché.

Quitar la cadena de conexión original

Los cambios realizados en web.config o appsettings.json funcionan con la identidad administrada. Puede quitar la cadena de conexión original que usó al implementar la aplicación la primera vez. Para eliminar la cadena de conexión, ejecute el siguiente comando de la CLI de Azure, reemplazando <app-name> por el nombre de la aplicación y <connection-string-name> por el nombre de la cadena de conexión.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names <connection-string-name>

Configure tu entorno de desarrollo

Configure el entorno de desarrollo elegido e inicie sesión en Azure. Para más información sobre cómo configurar el entorno de desarrollo para la autenticación de Microsoft Entra, consulte Biblioteca cliente de identidad de Azure para .NET.

Visual Studio para Windows es integrado con la autenticación de Microsoft Entra.

  1. Para habilitar el desarrollo y la depuración en Visual Studio, agregue su usuario de Microsoft Entra en Visual Studio seleccionando Archivo>Configuración de la cuenta en el menú superior y, a continuación, seleccione Iniciar sesión o Agregar.
  2. Para establecer el usuario de Microsoft Entra para la autenticación del servicio de Azure, seleccione Opciones de herramientas>en el menú superior y, a continuación, seleccioneSelección de cuenta> de servicio de Azure. Seleccione el usuario de Microsoft Entra que agregó y seleccione Aceptar.

Modificación del proyecto y publicación de la aplicación

La aplicación web respaldada por la base de datos de Azure SQL usa un contexto de base de datos para conectarse a la base de datos. Para usar la autenticación de Microsoft Entra para trabajar con la aplicación, debe actualizar el contexto de la base de datos para hacer referencia al proveedor de Entity Framework para SQL Server, que depende del moderno controlador ADO.NET Microsoft.Data.SqlClient.

El proveedor de Entity Framework reemplaza al proveedor integrado de SQL Server System.Data.SqlClient e incluye compatibilidad con los métodos de autenticación de Microsoft Entra ID. Para obtener más información, vea Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] funciona localmente para usar Microsoft.Data.SqlClient para el contexto de la base de datos, pero dado que System.Data.SqlClient está codificado de forma rígida como proveedor en Azure App Service, debe ampliar MicrosoftSqlDbConfiguration para redirigir System.Data.SqlClient las referencias a Microsoft.Data.SqlClient en su lugar. Los pasos difieren en función de si tiene una aplicación ASP.NET o ASP.NET Core.

Una aplicación ASP.NET Core usa Entity Framework Core de forma predeterminada.

  1. En la consola del Administrador de paquetes de Visual Studio, agregue el paquete NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. En appsettings.json, reemplace el valor de la cadena de conexión por el código siguiente, reemplazando <server-name y <database-name> por el nombre del servidor y el nombre de la base de datos.

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Nota:

    Puede usar la autenticación predeterminada de Active Directory tanto en el equipo local como en Azure App Service. El controlador puede adquirir un token de Microsoft Entra ID de varias maneras diferentes.

    Si se implementa la aplicación, el controlador obtiene un token de la identidad administrada de la aplicación asignada por el sistema. El controlador también puede autenticarse con una identidad administrada asignada por el usuario si se incluye User Id=<client-id-of-user-assigned-managed-identity>; en la cadena de conexión.

    La DefaultAzureCredential clase almacena en caché el token en memoria y lo recupera de Microsoft Entra ID antes de la expiración. Para actualizar el token no es necesario ningún código personalizado.

    Ahora tiene todo lo que necesita para conectarse a Azure SQL Database al depurar en Visual Studio. El código usa el usuario de Microsoft Entra que configuró al configurar el entorno de desarrollo.

  3. Ejecute la aplicación. La aplicación CRUD del explorador se conecta directamente a la base de datos de Azure SQL mediante la autenticación de Microsoft Entra. Esta configuración permite ejecutar migraciones de base de datos desde Visual Studio.

  4. Publique los cambios mediante los siguientes comandos de Git:

    git commit -am "configure managed identity"
    git push azure main
    

Prueba de la aplicación

Cuando la página web nueva muestra su lista de tareas pendientes, la aplicación se conecta a la base de datos mediante la identidad administrada.

Captura de pantalla que muestra la aplicación de Azure después de la migración de Code First.

Ahora puede editar la lista de tareas pendientes.

Limpieza de recursos

En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si prevé que no necesitará estos recursos en el futuro, elimine el grupo de recursos ejecutando el siguiente comando en Cloud Shell:

az group delete --name myResourceGroup

Este comando puede tardar un par de minutos en ejecutarse.