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

Las identidades administradas para recursos de Azure son una característica de Microsoft Entra ID. Cada servicio de Azure compatible con Managed Identities for Azure Resources está sujeto a su propia escala de tiempo. Asegúrese de revisar el estado de disponibilidad de las identidades administradas para el recurso y los problemas conocidos antes de comenzar.

En este tutorial se muestra cómo usar una identidad administrada asignada por el sistema de una máquina virtual Windows para acceder a Azure Data Lake Store. Azure administra automáticamente las identidades administradas. Estas permiten que la aplicación se autentique en servicios que admiten la autenticación de Microsoft Entra, sin necesidad de insertar credenciales en el código.

En este artículo, aprenderá a:

  • Conceder a una máquina virtual acceso a Azure Data Lake Store
  • Obtener un token de acceso mediante la identidad de máquina virtual y usarlo para acceder a Azure Data Lake Store

Prerrequisitos

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

Ahora puede conceder a una máquina virtual el acceso a los archivos y las carpetas de una instancia de Azure Data Lake Store. En este paso, puede usar una instancia ya existente de Data Lake Store o crear una nueva. Para crear una nueva instancia de Data Lake Store mediante Azure Portal, siga esta guía de inicio rápido de Azure Data Lake Store. También se pueden encontrar guías de inicio rápido que utilizan la CLI de Azure y Azure PowerShell en la documentación de Azure Data Lake Store.

En la instancia de Data Lake Store, cree una carpeta y conceda el permiso de identidad asignada por el sistema de la máquina virtual. La identidad necesita derechos para leer, escribir y ejecutar archivos en esa carpeta:

  1. En Azure Portal, seleccione Data Lake Store en el panel de navegación izquierdo.
  2. Seleccione la instancia de Data Lake Store que quiere usar en este tutorial.
  3. Seleccione Data Explorer en la barra de comandos.
  4. Se selecciona la carpeta raíz de Data Lake Store. Seleccione Acceso en la barra de comandos.
  5. Seleccione Agregar. En el campo Seleccionar, escriba el nombre de la máquina virtual, por ejemplo DevTestVM. Seleccione la máquina virtual en los resultados de la búsqueda y luego haga clic en Seleccionar.
  6. Haga clic en Seleccionar permisos. Seleccione Lectura y Ejecutar, agréguelos a Esta carpeta y agréguelos como un solo permiso de acceso. Seleccione Aceptar. El permiso se debe haber agregado correctamente.
  7. Cierre la hoja Acceso.
  8. En este tutorial, cree una nueva carpeta. Seleccione Nueva carpeta en la barra de comandos y asígnele un nombre, por ejemplo TestFolder. Seleccione Aceptar.
  9. Seleccione la carpeta que ha creado y, luego, seleccione Acceso en la barra de comandos.
  10. Igual que en el paso 5, seleccione Agregar, en el campo Seleccionar escriba el nombre de su máquina virtual, selecciónelo y haga clic en Seleccionar.
  11. Igual que en el paso 6, haga clic en Seleccionar permisos, seleccione Lectura, Escritura y Ejecutar, agréguelos a Esta carpeta y agréguelos como Una entrada de permiso de acceso y una entrada de permiso predeterminado. Seleccione Aceptar. El permiso se debe haber agregado correctamente.

La identidad administrada asignada por el sistema de la máquina virtual puede realizar ahora todas las operaciones en los archivos de la carpeta que ha creado. Para más información sobre cómo administrar el acceso a Data Lake Store, lea este artículo sobre el control de acceso en Data Lake Store.

Acceso a los datos

Azure Data Lake Store 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 Managed Identities for Azure Resources. Para autenticarse en el sistema de archivos de Data Lake Store, se envía un token de acceso emitido por Microsoft Entra ID al punto de conexión del sistema de archivos de Data Lake Store, en un encabezado de autorización. El encabezado tiene el formato "Bearer <ACCESS_TOKEN_VALUE>". Para más información sobre la compatibilidad de Data Lake Store con la autenticación de Microsoft Entra, lea Autenticación con Data Lake Store mediante Microsoft Entra ID

Nota:

Los SDK de cliente del sistema de archivos de Data Lake Store todavía no admiten la característica Managed Identities for Azure Resources. Este tutorial se actualizará cuando se agregue esta compatibilidad al SDK.

En este tutorial, se autenticará en la API de REST del sistema de archivos de Data Lake Store mediante PowerShell para realizar solicitudes de REST. Para usar la identidad administrada asignada por el sistema de la máquina virtual para la autenticación, es preciso realizar las solicitudes desde la máquina virtual.

  1. En el portal, vaya a Virtual Machines, vaya a la máquina virtual Windows, y en Información general, seleccione Conectar.

  2. Escriba su nombre de usuario y contraseña que agregó cuando creó 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 a las identidades administradas locales del punto de conexión de recursos de Azure y obtenga un token de acceso para Azure Data Lake Store. El identificador de recurso de Data Lake Store es https://datalake.azure.net/. Data Lake busca una coincidencia exacta en el identificador del recurso y la barra diagonal final es importante.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatalake.azure.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. Compruebe que todo está configurado correctamente. Con el comando "Invoke-WebRequest" de PowerShell, realice una solicitud a su punto de conexión de REST de Data Lake Store para mostrar las carpetas que contiene la carpeta raíz. Es importante que la cadena "Bearer" del encabezado de autorización tenga la "B" en mayúscula. Puede encontrar el nombre de su instancia de Data Lake Store en la sección Información general de su instancia de Data Lake Store.

    Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS -Headers @{Authorization="Bearer $AccessToken"}
    

    Una respuesta correcta tiene el siguiente aspecto:

    StatusCode        : 200
    StatusDescription : OK
    Content           : {"FileStatuses":{"FileStatus":[{"length":0,"pathSuffix":"TestFolder","type":"DIRECTORY", "blockSize":0,"accessTime":1507934941392, "modificationTime":1507944835699,"replication":0, "permission":"770","ow..."
    RawContent        : HTTP/1.1 200 OK
                        Pragma: no-cache
                        x-ms-request-id: b4b31e16-e968-46a1-879a-3474aa7d4528
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict-Transport-Security: ma...
    Forms             : {}
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b4b31e16-e968-46a1-879a-3474aa7d4528],
                        [x-ms-webhdfs-version, 17.04.22.00], [Status, 0x0]...}
    Images            : {}
    InputFields       : {}
    Links             : {}
    ParsedHtml        : System.__ComObject
    RawContentLength  : 556
    
  6. Ahora puede intentar cargar un archivo en su instancia de Data Lake Store. En primer lugar, cree un archivo para cargarlo.

    echo "Test file." > Test1.txt
    
  7. Con el comando Invoke-WebRequest de PowerShell, realice una solicitud al punto de conexión de REST de Data Lake Store para cargar el archivo en la carpeta que creó anteriormente. Esta solicitud implica dos pasos. En el primer paso, se realiza una solicitud y se obtiene un redirección al lugar donde se debe cargar el archivo. En el segundo paso, se carga realmente el archivo. No olvide configurar el nombre de la carpeta y el archivo correctamente si ha usado valores diferentes a los que se muestran en este tutorial.

    $HdfsRedirectResponse = Invoke-WebRequest -Uri https://<YOUR_ADLS_NAME>.azuredatalakestore.net/webhdfs/v1/TestFolder/Test1.txt?op=CREATE -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Si examina el valor de $HdfsRedirectResponse, debería ser parecido a la siguiente respuesta:

    PS C:\> $HdfsRedirectResponse
    
    StatusCode        : 307
    StatusDescription : Temporary Redirect
    Content           : {}
    RawContent        : HTTP/1.1 307 Temporary Redirect
                        Pragma: no-cache
                        x-ms-request-id: b7ab492f-b514-4483-aada-4aa0611d12b3
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosn...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, b7ab492f-b514-4483-aada-4aa0611d12b3], 
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

    Para finalizar la carga, envíe una solicitud al punto de conexión de redirección:

    Invoke-WebRequest -Uri $HdfsRedirectResponse.Headers.Location -Method PUT -Headers @{Authorization="Bearer $AccessToken"} -Infile Test1.txt -MaximumRedirection 0
    

    Una respuesta correcta se parece a esta:

    StatusCode        : 201
    StatusDescription : Created
    Content           : {}
    RawContent        : HTTP/1.1 201 Created
                        Pragma: no-cache
                        x-ms-request-id: 1e70f36f-ead1-4566-acfa-d0c3ec1e2307
                        ContentLength: 0
                        x-ms-webhdfs-version: 17.04.22.00
                        Status: 0x0
                        X-Content-Type-Options: nosniff
                        Strict...
    Headers           : {[Pragma, no-cache], [x-ms-request-id, 1e70f36f-ead1-4566-acfa-d0c3ec1e2307],
                        [ContentLength, 0], [x-ms-webhdfs-version, 17.04.22.00]...}
    RawContentLength  : 0
    

Mediante otras API del sistema de archivos de Data Lake Store, puede anexar o descargar archivos, entre otras muchas cosas.

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 usar una identidad administrada asignada por el sistema en una máquina virtual Windows para acceder a Azure Data Lake Store. Para obtener más información sobre Azure Data Lake Store, vea: