Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.
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.
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Introducción a Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para obtener más información, consulte Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
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.
- Para obtener más información sobre cómo crear un usuario de Microsoft Entra, vea Agregar o eliminar usuarios mediante el identificador de Microsoft Entra.
- Para obtener más información sobre los usuarios permitidos de Microsoft Entra para SQL Database, consulte Características y limitaciones de Microsoft Entra en SQL Database.
- Para obtener más información sobre cómo agregar un administrador de Azure SQL Server, consulte Aprovisionamiento de un administrador de Microsoft Entra para el servidor.
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.
Use
az ad user listcon eldisplay-name,filteroupnpara obtener el identificador de objeto del usuario de Microsoft Entra ID al que desea hacer administrador. Ejecuteaz ad user listde 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-namedel 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"Agregue el usuario de Microsoft Entra ID como administrador en Azure SQL Server mediante
az sql server ad-admin createcon el parámetroobject-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 valoridde la salida del comando anterioraz 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.
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 eluserPrincipalNamedel usuario administrador de la salida del comando anterioraz ad user list.sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30Siga las indicaciones para iniciar sesión.
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.
- 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.
- 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.
En la consola del Administrador de paquetes de Visual Studio, agregue el paquete NuGet Microsoft.Data.SqlClient.
Install-Package Microsoft.Data.SqlClientEn appsettings.json, reemplace el valor de la cadena de conexión por el código siguiente, reemplazando
<server-namey<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
DefaultAzureCredentialclase 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.
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.
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.
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.
Contenido relacionado
- Tutorial: Uso de un dominio personalizado y un certificado administrado para proteger la aplicación
- Tutorial: conexión de una aplicación de App Service a SQL Database en nombre del usuario que haya iniciado sesión
- Tutorial: Conexión a bases de datos de Azure desde App Service sin secretos mediante una identidad administrada
- Tutorial: Conexión a servicios de Azure que no admiten identidades administradas mediante Key Vault
- Tutorial: Aislamiento de la comunicación de back-end con la integración de red virtual