Tutorial: Uso de una identidad administrada asignada por el sistema de una máquina virtual Windows para acceder a Azure SQL

En este tutorial se muestra cómo usar una identidad asignada por el sistema en una máquina virtual de Windows para acceder a Azure SQL Database. Las identidades de MSI son administradas automáticamente por Azure y le permiten autenticar los servicios que admiten la autenticación de Microsoft Entra sin necesidad de insertar credenciales en el código. Aprenderá a:

  • Dar a una máquina virtual acceso a Azure SQL Database
  • Habilitar la autenticación de Microsoft Entra
  • Cree un usuario contenido en la base de datos que represente la identidad asignada por el sistema de la máquina virtual.
  • Obtener un token de acceso mediante la identidad de máquina virtual y usarlo para hacer consultas a Azure SQL Database

Requisitos previos

Habilitar

La habilitación de una identidad administrada asignada por el sistema es una experiencia de un solo clic. Puede habilitarla durante la creación de una máquina virtual o en las propiedades de una máquina virtual existente.

Screenshot shows the System assigned tab for a virtual machine where you can turn on the System assigned status.

Para habilitar una identidad administrada asignada por el sistema en una máquina virtual nueva:

  1. Inicie sesión en el Portal de Azure

  2. Crear una máquina virtual que tenga habilitada la identidad asignada por el sistema

Conceder acceso

Para conceder a la máquina virtual acceso a una base de datos de Azure SQL Server, puede usar un servidor SQL lógico existente o crear uno. Para crear un servidor y una base de datos con Azure Portal, siga esta Guía de inicio rápido de Azure SQL. También hay guías de inicio rápido que utilizan la CLI de Azure y Azure PowerShell en la documentación de Azure SQL.

Hay dos pasos para conceder a la máquina virtual acceso a una base de datos:

  1. Habilite la autenticación de Microsoft Entra para el servidor.
  2. Cree un usuario contenido en la base de datos que represente la identidad asignada por el sistema de la máquina virtual.

Habilitar la autenticación de Microsoft Entra

Para configurar la autenticación de Microsoft Entra:

  1. En Azure Portal, seleccione Servidores SQL Server en el panel de navegación izquierdo.
  2. Haga clic en el servidor SQL para habilitarlo para la autenticación de Microsoft Entra.
  3. En la sección Configuración de la hoja, haga clic en Administrador de Active Directory.
  4. En la barra de comandos, haga clic en Establecer administrador.
  5. Seleccione una cuenta de usuario de Microsoft Entra para que se convierta en administrador del servidor y haga clic en Seleccionar.
  6. En la barra de comandos, haga clic en Guardar

Creación del usuario contenido

En esta sección se muestra cómo crear un usuario contenido en la base de datos que represente la identidad asignada por el sistema de la máquina virtual. En este paso, necesita Microsoft SQL Server Management Studio (SSMS). Antes de comenzar, también puede ser útil revisar los artículos siguientes para obtener información sobre la integración de Microsoft Entra:

SQL DB requiere nombres únicos para mostrar de Microsoft Entra ID. Con esto, las cuentas de Microsoft Entra tales como usuarios, grupos y entidades de servicio (aplicaciones) y nombres de máquina virtual habilitados para la identidad administrada deben definirse de forma única en Microsoft Entra ID en relación con sus nombres para mostrar. La base de datos de SQL comprueba el nombre para mostrar de Microsoft Entra ID durante la creación de T-SQL de dichos usuarios y, si no es único, el comando no puede solicitar que se proporcione un nombre para mostrar de Microsoft Entra ID que sea único para una cuenta especificada.

Para crear un usuario contenido:

  1. Inicie SQL Server Management Studio.

  2. En el cuadro de diálogo Conectar al servidor, escriba el nombre de su servidor en el campo Nombre del servidor.

  3. En el campo Autenticación, seleccione Active Directory - Universal compatible con MFA.

  4. En el campo Nombre de usuario, escriba el nombre de la cuenta de Microsoft Entra que estableció como administradora del servidor, por ejemplo, helen@woodgroveonline.com

  5. Haga clic en Opciones.

  6. En el campo Conectar una base de datos, escriba el nombre de la base de datos que no es del sistema y que desea configurar.

  7. Haga clic en Conectar. Complete el proceso de inicio de sesión.

  8. En el Explorador de objetos, expanda la carpeta Bases de datos.

  9. Haga clic con el botón derecho en la base de datos de usuario y seleccione Nueva consulta.

  10. En la ventana de consulta, escriba la línea siguiente y haga clic en Ejecutar en la barra de herramientas:

    Nota:

    VMName en el siguiente comando es el nombre de la máquina virtual en la que habilitó la identidad asignada por el sistema en la sección de requisitos previos.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    El comando se completará correctamente y se creará el usuario contenido para la identidad asignada por el sistema de la máquina virtual.

  11. Limpie la ventana de consulta, escriba la línea siguiente y haga clic en Ejecutar en la barra de herramientas:

    Nota:

    VMName en el siguiente comando es el nombre de la máquina virtual en la que habilitó la identidad asignada por el sistema en la sección de requisitos previos.

    Si encuentra el error "La entidad de seguridad VMName tiene un nombre para mostrar duplicado", anexe la instrucción CREATE USER con WITH OBJECT_ID='xxx'.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    El comando debería completarse correctamente, concediendo al usuario contenido la capacidad de leer la base de datos completa.

El código que se ejecuta en la máquina virtual ahora puede obtener un token con su identidad administrada asignada por el sistema y usarlo para autenticarse en el servidor.

Acceso a los datos

En esta sección se muestra cómo obtener un token de acceso con una identidad administrada asignada por el sistema de la máquina virtual y usarla para llamar a Azure SQL. Azure SQL admite de forma nativa la autenticación de Microsoft Entra, por lo que puede aceptar directamente los tokens de acceso obtenidos con la característica identidades administradas para recursos de Azure. En este método no es necesario proporcionar credenciales en la cadena de conexión.

Este es un código .NET de ejemplo que abre una conexión a SQL mediante la autenticación de identidad administrada de Active Directory. El código se debe ejecutar en la máquina virtual para poder acceder al punto de conexión de la identidad administrada asignada por el sistema de la máquina virtual. Se requiere .NET Framework 4.6.2 o posterior o .NET Core 3.1 o posterior para usar este método. Reemplace los valores de AZURE-SQL-SERVERNAME y DATABASE según corresponda y agregue una referencia de NuGet a la biblioteca Microsoft.Data.SqlClient.

using Microsoft.Data.SqlClient;

try
{
//
// Open a connection to the server using Active Directory Managed Identity authentication.
//
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>; Authentication=Active Directory Managed Identity; Encrypt=True";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

Nota:

Puede usar identidades administradas mientras trabaja con otras opciones de programación mediante nuestros SDK.

Como alternativa, un método rápido para probar la configuración de un extremo a otro sin tener que escribir e implementar una aplicación en la máquina virtual es usar PowerShell.

  1. En el portal, vaya a Virtual Machines y diríjase a la máquina virtual Windows. A continuación, en Introducción, haga clic en Conectar.

  2. Escriba su credencial de administrador de máquina virtual que ha agregado cuando ha creado la máquina virtual Windows.

  3. Ahora que ha creado una conexión a Escritorio remoto con la máquina virtual, abra PowerShell en la sesión remota.

  4. Mediante Invoke-WebRequest de PowerShell, realice una solicitud al punto de conexión de la identidad administrada local para obtener un token de acceso para Azure SQL.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Convierta la respuesta de un objeto JSON a un objeto de PowerShell.

    $content = $response.Content | ConvertFrom-Json
    

    Extraiga el token de acceso de la respuesta.

    $AccessToken = $content.access_token
    
  5. Abra una conexión con el servidor. No olvide reemplazar los valores de AZURE-SQL-SERVERNAME y DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>; Encrypt=True;"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

    Después, cree una consulta y envíela al servidor. No olvide reemplazar el valor de TABLE.

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Examine el valor de $DataSet.Tables[0] para ver los resultados de la consulta.

Disable

Para deshabilitar la identidad asignada por el sistema en la máquina virtual, establezca el estado de la identidad asignada por el sistema en desactivado.

Screenshot shows the System assigned tab for a virtual machine where you can turn off the System assigned status.

Pasos siguientes

En este tutorial, ha aprendido a utilizar una identidad administrada asignada por el sistema para acceder a Azure SQL Database. Para más información acerca de Azure SQL Database, consulte: