Compartir vía


Tutorial: Uso de una máquina virtual o VMSS Windows para acceder a los recursos de Azure

Las identidades administradas para recursos de Azure es 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.

Requisitos previos

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

En este tutorial se muestra cómo usar una identidad administrada asignada por el sistema para una máquina virtual Windows para acceder a una 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

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.

Captura de pantalla de la pestaña Asignado por el sistema de una máquina virtual en la que se puede activar el estado asignado por el sistema.

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

  1. Inicie sesión en Azure Portal.

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

Conceder acceso

Puede conceder a la máquina virtual acceso a archivos y carpetas en 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 instancia de Data Lake Store mediante Azure Portal, consulte 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, después, Seleccionar.
  6. Seleccione Seleccionar permisos, y a continuación Leer y ejecutar. Agregue a Esta carpeta, y seleccione Un permiso de acceso solo.
  7. Seleccione Aceptar, y a continuación, cierre la hoja Acceso. El permiso se debe haber agregado correctamente.
  8. A continuación, cree una nueva carpeta. Seleccione Nueva carpeta en la barra de comandos y asigne un nombre a la nueva carpeta. Por ejemplo, TestFolder, y a continuación, seleccione Aceptar.
  9. Seleccione la carpeta que ha creado y a continuación, seleccione Acceso en la barra de comandos.
  10. Seleccione Agregar, y después, en el campo Seleccionar escriba el nombre de la máquina virtual y seleccione Seleccionar.
  11. Seleccione Seleccionar permisos, y a continuación Leer, Escribir y Ejecutar. Agregue a Esta carpeta, y a continuación, agregue como Una entrada de permiso de acceso y una entrada de permiso predeterminada.
  12. Seleccione Aceptar. El permiso debe agregarse 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 obtener información sobre cómo administrar el acceso a Data Lake Store, consulte 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, de modo que pueda aceptar directamente tokens de acceso obtenidos mediante identidades administradas para recursos de Azure. 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, consulte 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.

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 Máquinas virtuales, vaya a la máquina virtual de Windows. A continuación en Información general, seleccione Conectar.

  2. Escriba en Nombre de usuario y la Contraseña que ha usado al crear 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. Con el cmdlet Invoke-WebRequest de PowerShell, realice una solicitud a las identidades administradas locales para el punto de conexión de recursos de Azure para obtener un token de acceso para Azure Data Lake Store. El identificador de recurso de Data Lake Store es https://datalake.azure.net/. Data Lake hace una coincidencia exacta en el identificador de recurso, por lo que 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 cmdlet Invoke-WebRequest de PowerShell, realice una solicitud al punto de conexión de REST de Data Lake Store para enumerar las carpetas de la carpeta raíz. Es importante que la cadena Bearer en el encabezado Authorization tenga un mayúscula "B". 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 intente cargar un archivo en Data Lake Store. En primer lugar, cree un archivo para cargarlo.

    echo "Test file." > Test1.txt
    
  7. Con el cmdlet 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 ha creado anteriormente. Esta solicitud implica dos pasos.

    1. Realice una solicitud y obtenga una redirección a la ubicación donde se debe cargar el archivo.
    2. Cargar el archivo. Recuerde establecer el nombre de la carpeta y el archivo correctamente si usó valores diferentes de los indicados 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
    

Por último, puede usar otras API del sistema de archivos de Data Lake Store para anexar y descargar archivos, etc.

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.

Captura de pantalla de la pestaña Asignado por el sistema de una máquina virtual en la que se puede desactivar el estado asignado por el sistema.

Uso de las identidades administradas asignadas por el sistema de una máquina virtual Windows para acceder a Azure Storage

En este tutorial se muestra cómo usar una identidad administrada asignada por el sistema en una máquina virtual Windows para acceder a Azure Storage. Aprenderá a:

  • Crear un contenedor de blobs en una cuenta de almacenamiento
  • Conceder a la identidad administrada asignada por el sistema de la máquina virtual Windows acceso a una cuenta de almacenamiento
  • Obtener un acceso y usarlo para llamar a Azure Storage

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.

Captura de pantalla de la pestaña Asignado por el sistema de una máquina virtual en la que se puede activar el estado asignado por el sistema.

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

  1. Inicie sesión en Azure Portal.

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

Crear cuenta de almacenamiento

En esta sección se creará una cuenta de almacenamiento.

  1. Seleccione el botón + Crear un recurso que se encuentra en la esquina superior izquierda de Azure Portal.

  2. Seleccione Almacenamiento y después Cuenta de almacenamiento: blob, archivo, tabla, cola.

  3. En el campoNombre, escriba un nombre para la cuenta de almacenamiento.

  4. Deployment model (Modelo de implementación) y Account kind (Clase de cuenta) se deben establecer en Resource Manager y Storage (general purpose v1) (Almacenamiento [de uso general v1]).

  5. Asegúrese de que Suscripción y Grupo de recursos coinciden con los que especificó cuando creó la máquina virtual en el paso anterior.

  6. Seleccione Crear.

    Captura de pantalla en la que se muestra cómo crear una cuenta de almacenamiento.

Creación de un contenedor de blobs y carga de un archivo a la cuenta de almacenamiento

Los archivos requieren almacenamiento de blobs, por lo que es necesario crear un contenedor de blobs donde se almacenará el archivo. Luego cargará un archivo en el contenedor de blobs de la cuenta de almacenamiento nueva.

  1. Vaya a la cuenta de almacenamiento recién creada.

  2. En la sección Blob Service, seleccione Contenedores.

  3. Seleccione + Contenedor en la parte superior de la página.

  4. En el campo Nuevo contenedor, escriba un nombre para el contenedor y a continuación, en la opciónNivel de acceso público, mantenga el valor predeterminado.

    Captura de pantalla que muestra cómo crear un contenedor de almacenamiento.

  5. Elija un editor de su preferencia y cree un archivo denominado hello world.txt en la máquina local. Abra el archivo y agregue el texto Hola mundo, guárdelo.

  6. Seleccione el nombre del contenedor para cargar el archivo en el contenedor recién creado y a continuación, seleccione Cargar.

  7. En el panel Cargar blob, en la sección Archivos, seleccione el icono de carpeta y vaya al archivo hello_world.txt en la máquina local. A continuación, seleccione el archivo y Cargar. Captura de pantalla que muestra la pantalla cargar archivo de texto.

Conceder acceso

En esta sección se muestra cómo conceder acceso a un contenedor de Azure Storage para la máquina virtual. Puede usar la identidad administrada asignada por el sistema de la máquina virtual para recuperar los datos en Azure Storage Blob.

  1. Vaya a la cuenta de almacenamiento recién creada.

  2. Seleccione Access Control (IAM) .

  3. Seleccione Agregar>Agregar asignación de roles para abrir la página Agregar asignación de roles.

  4. Asigne el siguiente rol. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

    Configuración Valor
    Role Lector de datos de blobs de almacenamiento
    Asignar acceso a Identidad administrada
    Asignada por el sistema Máquina virtual
    Seleccionar <la máquina virtual>

    Captura de pantalla que muestra la página para añadir una asignación de roles.

Acceso a los datos

Azure Storage admite de manera nativa la autenticación de Microsoft Entra, por lo que puede aceptar directamente los tokens de acceso obtenidos mediante una identidad administrada. Este enfoque usa la integración de Azure Storage con Microsoft Entra ID y es diferente de proporcionar las credenciales en la cadena de conexión.

Este es un ejemplo de código de .NET de apertura de una conexión a Azure Storage. En el ejemplo se usa un token de acceso y, a continuación, se lee el contenido del archivo que creó anteriormente. Este código se debe ejecutar en la máquina virtual para poder acceder al punto de conexión de la identidad administrada de la máquina virtual. Se requiere .NET framework 4.6 o posterior para usar el método de token de acceso. Reemplace el valor de <URI to blob file> según corresponda. Para obtener este valor, vaya al archivo que creó y cargó en el almacenamiento de blobs y copie la dirección URL bajo Propiedades en la página Información general.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Web.Script.Serialization;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace StorageOAuthToken
{
    class Program
    {
        static void Main(string[] args)
        {
            //get token
            string accessToken = GetMSIToken("https://storage.azure.com/");

            //create token credential
            TokenCredential tokenCredential = new TokenCredential(accessToken);

            //create storage credentials
            StorageCredentials storageCredentials = new StorageCredentials(tokenCredential);

            Uri blobAddress = new Uri("<URI to blob file>");

            //create block blob using storage credentials
            CloudBlockBlob blob = new CloudBlockBlob(blobAddress, storageCredentials);

            //retrieve blob contents
            Console.WriteLine(blob.DownloadText());
            Console.ReadLine();
        }

        static string GetMSIToken(string resourceID)
        {
            string accessToken = string.Empty;
            // Build request to acquire MSI token
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=" + resourceID);
            request.Headers["Metadata"] = "true";
            request.Method = "GET";

            try
            {
                // Call /token endpoint
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Pipe response Stream to a StreamReader, and extract access token
                StreamReader streamResponse = new StreamReader(response.GetResponseStream());
                string stringResponse = streamResponse.ReadToEnd();
                JavaScriptSerializer j = new JavaScriptSerializer();
                Dictionary<string, string> list = (Dictionary<string, string>)j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
                accessToken = list["access_token"];
                return accessToken;
            }
            catch (Exception e)
            {
                string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
                return accessToken;
            }
        }
    }
}

La respuesta incluye el contenido del archivo:

Hello world! :)

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.

Captura de pantalla de la pestaña Asignado por el sistema de una máquina virtual en la que se puede desactivar el estado asignado por el sistema.

Uso de las identidades administradas asignadas por el sistema de una máquina virtual Windows para acceder a Azure Storage utilizando una credencial de SAS

Este tutorial muestra cómo usar una identidad asignada por el sistema para una máquina virtual Windows a fin de obtener una credencial de Firma de acceso compartido (SAS) del almacenamiento.

Una SAS de servicio proporciona la capacidad de conceder acceso limitado a objetos en una cuenta de almacenamiento durante un tiempo limitado y para un servicio específico (en este caso, un servicio de blobs). SAS lo hace sin exponer una clave de acceso de cuenta. Puede usar una credencial de SAS como de costumbre para las operaciones de almacenamiento; por ejemplo, cuando se usa un SDK de almacenamiento. En este tutorial se muestra cómo cargar y descargar un blob mediante PowerShell de Azure Storage.

Aprenderá a:

  • Crear una cuenta de almacenamiento
  • Conceder acceso a la máquina virtual a una SAS de cuenta de almacenamiento en Resource Manager
  • Obtener un token de acceso mediante la identidad de la máquina virtual y utilizarlo para recuperar la credencial SAS desde Resource Manager

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Crear una cuenta de almacenamiento

Si aún no tiene una, debe crear una cuenta de almacenamiento. De lo contrario, siga estos pasos para conceder acceso a la identidad administrada asignada por el sistema de la máquina virtual a la credencial de SAS de una cuenta de almacenamiento existente.

  1. Seleccione Storage, y después Cuenta de almacenamiento.

  2. En el panel Crear cuenta de almacenamiento, escriba un nombre para la cuenta de almacenamiento.

  3. Asegúrese de que el Modelo de implementación y el Tipo de cuenta están configurados como Administrador de recursos y Propósito general.

  4. Compruebe que la Suscripción y el Grupo de Recursos coincidan con los elementos que especificó al crear su máquina virtual en el paso anterior.

  5. Seleccione Crear para crear la cuenta de almacenamiento.

    Captura de pantalla en la que se muestra cómo crear una cuenta de almacenamiento

Creación de un contenedor de blobs en la cuenta de almacenamiento

Más adelante en el tutorial, cargará y descargará un archivo en la nueva cuenta de almacenamiento. Dado que los archivos requieren almacenamiento de blobs, debe crear un contenedor de blobs para almacenar el archivo.

  1. Vaya a la cuenta de almacenamiento recién creada.

  2. Seleccione el vínculo Contenedores en el panel de la izquierda, en Blob service.

  3. Seleccione + Contenedor en la parte superior de la página y a continuación, aparecerá un panel Nuevo contenedor.

  4. Asigne un nombre al contenedor, determine el nivel de acceso y seleccioneAceptar. El nombre que especifique aquí se usará más adelante en el tutorial.

    Captura de pantalla que muestra cómo crear un contenedor de almacenamiento

Concesión de acceso a la identidad administrada asignada por el sistema de la máquina virtual para usar una SAS de almacenamiento

Azure Storage no admite la autenticación de Microsoft Entra de forma nativa. No obstante, puede usar una identidad administrada para recuperar una SAS de almacenamiento de Resource Manager y usar la SAS para acceder al almacenamiento. En este paso, va a conceder a la identidad administrada asignada por el sistema de la máquina virtual acceso a la SAS de la cuenta de almacenamiento.

  1. Vuelva a la cuenta de almacenamiento recién creada.

  2. Seleccione Access Control (IAM) .

  3. Seleccione Agregar>Agregar asignación de roles para abrir la página Agregar asignación de roles.

  4. Asigne el siguiente rol. Para asignar roles, consulte Asignación de roles de Azure mediante Azure Portal.

    Configuración Valor
    Role Colaborador de la cuenta de almacenamiento
    Asignar acceso a Identidad administrada
    Asignada por el sistema Máquina virtual
    Seleccionar <La máquina virtual Windows>

    Captura de pantalla que muestra la página para añadir una asignación de roles.

Obtención de un token de acceso utilizando la identidad de la máquina virtual y su uso para llamar a Azure Resource Manager

En el resto de este tutorial, trabajará desde la máquina virtual. Para ello, debe usar los cmdlets de PowerShell de Azure Resource Manager. Si no tiene PowerShell instalado, descargue la versión más reciente antes de continuar.

  1. En Azure Portal, vaya a Máquinas virtuales, vaya a la máquina virtual Windows y, a continuación, desde la página Información general, seleccione Conectar en la parte superior.

  2. Escriba en Nombre de usuario y la Contraseña que ha usado al crear la máquina virtual de Windows.

  3. Establezca una Conexión de Escritorio Remoto con la máquina virtual.

  4. Abra PowerShell en la sesión remota y a continuación, use el cmdlet Invoke-WebRequest de PowerShell para obtener un token de Azure Resource Manager de la identidad administrada local para el punto de conexión de recursos de Azure.

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

    Nota:

    El valor del parámetro resource debe coincidir exactamente con el que espera Microsoft Entra ID. Al usar el id. de recurso de Azure Resource Manager, debe incluir la barra diagonal final en el URI.

    A continuación, extraiga el elemento content, que se almacena como una cadena con formato de notación de objetos JavaScript (JSON) en el objeto $response.

    $content = $response.Content | ConvertFrom-Json
    

    Luego, extraiga el token de acceso de la respuesta.

    $ArmToken = $content.access_token
    

Obtención de una credencial SAS desde Azure Resource Manager para realizar llamadas de almacenamiento

Por último, use PowerShell para llamar a Resource Manager mediante el token de acceso que recuperó en la sección anterior. Use este token para crear una credencial de SAS de almacenamiento. Una vez que tenga la credencial de SAS, puede llamar a otras operaciones de almacenamiento.

Para esta solicitud, use los parámetros de solicitud HTTP de seguimiento para crear la credencial SAS:

{
    "canonicalizedResource":"/blob/<STORAGE ACCOUNT NAME>/<CONTAINER NAME>",
    "signedResource":"c",              // The kind of resource accessible with the SAS, in this case a container (c).
    "signedPermission":"rcw",          // Permissions for this SAS, in this case (r)ead, (c)reate, and (w)rite. Order is important.
    "signedProtocol":"https",          // Require the SAS be used on https protocol.
    "signedExpiry":"<EXPIRATION TIME>" // UTC expiration time for SAS in ISO 8601 format, for example 2017-09-22T00:06:00Z.
}

Los parámetros aquí se incluyen en el cuerpo POST de la solicitud para la credencial de SAS. Para obtener más información sobre los parámetros para crear una credencial de SAS, consulte la Referencia de REST de SAS de List Service.

  1. Convierta los parámetros en JSON y a continuación, llame al punto de conexión listServiceSas de almacenamiento para crear la credencial de SAS:

    $params = @{canonicalizedResource="/blob/<STORAGE-ACCOUNT-NAME>/<CONTAINER-NAME>";signedResource="c";signedPermission="rcw";signedProtocol="https";signedExpiry="2017-09-23T00:00:00Z"}
    $jsonParams = $params | ConvertTo-Json
    
    $sasResponse = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>/providers/Microsoft.Storage/storageAccounts/<STORAGE-ACCOUNT-NAME>/listServiceSas/?api-version=2017-06-01 -Method POST -Body $jsonParams -Headers @{Authorization="Bearer $ArmToken"}
    

    Nota:

    La dirección URL distingue mayúsculas de minúsculas, por lo que debe asegurarse de que usa el mismo caso exacto que se usa al llamar al grupo de recursos, incluido el "G" en mayúsculas en resourceGroups.

  2. A continuación, extraiga la credencial de SAS de la respuesta:

    $sasContent = $sasResponse.Content | ConvertFrom-Json
    $sasCred = $sasContent.serviceSasToken
    
  3. Si inspecciona la credencial de SAS, debería ver algo parecido a esto:

    PS C:\> $sasCred
    sv=2015-04-05&sr=c&spr=https&se=2017-09-23T00%3A00%3A00Z&sp=rcw&sig=JVhIWG48nmxqhTIuN0uiFBppdzhwHdehdYan1W%2F4O0E%3D
    
  4. Cree un archivo denominado test.txt. A continuación, use la credencial de SAS para autenticarse con el cmdlet New-AzStorageContent, cargue el archivo en el contenedor de blob y a continuación, descargue el archivo.

    echo "This is a test text file." > test.txt
    
  5. Asegúrese de instalar en primer lugar los cmdlets de Azure Storage, mediante Install-Module Azure.Storage. A continuación, cargue el blob que acaba de crear mediante el cmdlet Set-AzStorageBlobContent de PowerShell:

    $ctx = New-AzStorageContext -StorageAccountName <STORAGE-ACCOUNT-NAME> -SasToken $sasCred
    Set-AzStorageBlobContent -File test.txt -Container <CONTAINER-NAME> -Blob testblob -Context $ctx
    

    Respuesta:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    
  6. También puede descargar el blob que ha cargado mediante el cmdlet Get-AzStorageBlobContent de PowerShell:

    Get-AzStorageBlobContent -Blob testblob -Container <CONTAINER-NAME> -Destination test2.txt -Context $ctx
    

    Respuesta:

    ICloudBlob        : Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
    BlobType          : BlockBlob
    Length            : 56
    ContentType       : application/octet-stream
    LastModified      : 9/21/2017 6:14:25 PM +00:00
    SnapshotTime      :
    ContinuationToken :
    Context           : Microsoft.WindowsAzure.Commands.Storage.AzureStorageContext
    Name              : testblob
    

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

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

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.

Captura de pantalla de la pestaña Asignado por el sistema de una máquina virtual en la que se puede activar el estado asignado por el sistema.

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

  1. Inicie sesión en Azure Portal.

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

Conceder acceso

Para conceder a la máquina virtual acceso a una base de datos de Azure SQL Database, use un servidor SQL server lógico existente o cree uno nuevo. Para crear un nuevo servidor y una base de datos mediante Azure Portal, siga el 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.

Siga estos 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 SQL Server en el panel de navegación izquierdo.
  2. Seleccione el servidor SQL server que desea habilitar 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, seleccione Establecer administrador.
  5. Seleccione una cuenta de usuario de Microsoft Entra para que sea un administrador para el servidor y seleccione Seleccionar.
  6. En la barra de comandos, seleccione Guardar.

Creación del usuario contenido

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

Las bases de datos SQL requieren nombres para mostrar únicos de Microsoft Entra ID. Con esto, las cuentas de Microsoft Entra, como usuarios, grupos y entidades de servicio (aplicaciones), y los nombres de máquina virtual habilitados para la identidad administrada deben definirse de forma única en Microsoft Entra ID específica para sus correspondientes nombres de pantalla. SQL comprueba los nombres para mostrar Microsoft Entra ID durante la creación de estos usuarios en T-SQL. Si los nombres para mostrar no son únicos, se produce un error en el comando y se le pide que proporcione un nombre para mostrar único de Microsoft Entra ID para cada cuenta determinada.

Para crear un usuario independiente

  1. Abra 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, cjensen@fabrikam.com.

  5. Seleccione 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. Seleccione Conectar, y 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 una base de datos de usuario y seleccione Nueva consulta.

  10. En la ventana de consulta, escriba la línea siguiente y seleccione 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 debe completarse correctamente mediante la creación del usuario contenido para la identidad asignada por el sistema de la máquina virtual.

  11. Desactive la ventana de consulta, escriba la línea siguiente y seleccione 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 debe completarse correctamente concediéndole al usuario contenido la capacidad de leer toda la base de datos.

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 mediante la 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.

O bien, use PowerShell para probar la configuración de un extremo a otro sin tener que escribir e implementar una aplicación en la máquina virtual.

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

  2. Escriba la Credencial de administrador de máquina virtual que ha agregado al crear la máquina virtual Windows.

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

  4. Con el cmdlet 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)
    

Por último, 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.

Captura de pantalla de la pestaña Asignado por el sistema de una máquina virtual en la que se puede desactivar el estado asignado por el sistema.

Uso de las identidades administradas asignadas por el sistema de una máquina virtual Windows para acceder a Azure Key Vault

En este tutorial se muestra cómo puede usar una máquina virtual Windows una identidad administrada asignada por el sistema para acceder a Azure Key Vault. Actuando como un arranque, Key Vault hace posible que la aplicación cliente use un secreto para acceder a recursos que no están protegidos por Microsoft Entra ID. Azure administra automáticamente las identidades administradas. Permiten autenticarse en servicios que admiten la autenticación de Microsoft Entra, sin incluir información de autenticación en el código.

Aprenderá a:

  • Concesión de acceso a la máquina virtual a un secreto almacenado en un almacén de claves
  • Obtener un token de acceso mediante la identidad de máquina virtual y usarlo para recuperar el secreto de Key Vault

Creación de un almacén de claves

Sugerencia

Los pasos de este artículo pueden variar ligeramente en función del portal desde donde comienza.

En esta sección se muestra cómo conceder acceso a la máquina virtual a un secreto almacenado en un almacén de claves. Al usar identidades administradas para recursos de Azure, el código puede obtener tokens de acceso para autenticarse en aquellos recursos que admitan la autenticación de Microsoft Entra. 

Sin embargo, no todos los servicios de Azure admiten la autenticación de Microsoft Entra. Para usar Managed Identities for Azure Resources con esos servicios, almacene las credenciales del servicio en Azure Key Vault y use una identidad administrada de la máquina virtual a fin de acceder a Key Vault y recuperar las credenciales.

En primer lugar, debe crear una instancia de Key Vault y conceder a la máquina virtual de acceso a la identidad administrada asignada por el sistema a Key Vault.

  1. Inicie sesión en Azure Portal.

  2. En la parte superior de la barra de navegación izquierda, seleccione Crear recurso.

  3. En el cuadro Buscar en Marketplace escriba Key Vault y presione Entrar.

  4. Seleccione Key Vault en los resultados y a continuación, seleccione Crear.

  5. Proporcione un Nombre para el nuevo almacén de claves.

    Captura de pantalla de la pantalla Crear un almacén de claves.

  6. Rellene toda la información necesaria. Asegúrese de elegir la suscripción y el grupo de recursos que va a usar para este tutorial.

  7. Seleccione Revisar y crear.

  8. Seleccione Crear.

Crear un secreto

A continuación, debe agregar un secreto al almacén de claves, de forma que más adelante pueda recuperarlo mediante código que se ejecuta en la máquina virtual. En esta sección se usa PowerShell, pero los mismos conceptos se aplican a cualquier código que ejecute en la máquina virtual.

  1. Vaya al almacén de claves recién creado.

  2. Seleccione Secretos y, después, Agregar.

  3. Seleccione Generar o importar.

  4. En la pantalla Crear un secreto, en las Opciones Cargar deje Manual seleccionado.

  5. Escriba un nombre y un valor para el secreto. El valor puede ser cualquiera de su elección. 

  6. Deje la fecha de activación y la fecha de expiración y deje la opción Habilitado en

  7. Seleccione Crear para crear el secreto.

    Captura de pantalla en la que se muestra cómo crear un secreto.

Conceder acceso

Es necesario conceder acceso a la identidad administrada usada por la máquina virtual para leer el secreto que almacena Key Vault.

  1. Vaya al almacén de claves recién creado.

  2. Seleccione Directiva de acceso en el menú de la izquierda.

  3. Seleccione Agregar directiva de acceso.

    Captura de pantalla en la que se muestra la pantalla Directiva de acceso del almacén de claves.

  4. En la sección Agregar directiva de acceso, en Configurar desde la plantilla (opcional), elija Administración de secretos en el menú desplegable.

  5. Elija Seleccionar la entidad de seguridad y, a continuación, en el campo de búsqueda, escriba el nombre de la máquina virtual que creó anteriormente. 

  6. Seleccione la máquina virtual en la lista de resultados y elija Seleccionar.

  7. Seleccione Agregar.

  8. Seleccione Guardar.

Acceso a los datos

En esta sección se muestra cómo obtener un token de acceso mediante la identidad de máquina virtual y usarlo para recuperar el secreto de Key Vault. Si no tiene PowerShell 4.3.1 o superior instalado, necesitará descargar e instalar la versión más reciente.

Nota:

El método de usar PowerShell para autenticar y recuperar el secreto es preferible en escenarios en los que se requieren específicamente identidades administradas o al insertar el proceso dentro del código de una aplicación.

En primer lugar, use la identidad administrada asignada por el sistema de la máquina virtual para obtener un token de acceso para autenticarse en Key Vault:

  1. En el portal, vaya a Máquinas virtuales y vaya a la máquina virtual Windows y a continuación, en Información general, seleccione Conectar.
  2. Escriba en el Nombre de usuario y Contraseña que ha agregado al crear la Máquina virtual Windows.
  3. Ahora que ha creado una Conexión a Escritorio remoto con la máquina virtual, abra PowerShell en una sesión remota.
  4. En PowerShell, invoque la solicitud web en el inquilino para obtener el token del host local en el puerto específico de la máquina virtual.

Nota:

Si usa una nube soberana, como GCC-H, use el punto de conexión vault.usgovcloudapi.net en lugar de vault.azure.net en el cmdlet de PowerShell.

Solicitud de PowerShell de ejemplo:

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

Nota:

Al trabajar con nubes soberanas, debe realizar ajustes en el punto de conexión especificado al final del cmdlet.

Por ejemplo, vault.usgovcloudapi.net debe usarse al trabajar con la nube de Azure Government, con este resultado final:

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

Para confirmar que el sufijo coincide con el entorno, consulte el artículo Información general de seguridad de Azure Key Vault.

La respuesta debería tener este aspecto:

Captura de pantalla en la que se muestra una solicitud con una respuesta de token.

Luego, extraiga el token de acceso de la respuesta.

   $KeyVaultToken = $Response.access_token

Por último, use el cmdlet Invoke-WebRequest de PowerShell para recuperar el secreto que ha creado anteriormente en Key Vault, pasando el token de acceso en el encabezado Autorización. Necesitará la dirección URL de su almacén de claves, que se encuentra en la sección de Información esencial de la página Introducción del almacén de claves.

Invoke-RestMethod -Uri https://<your-key-vault-URL>/secrets/<secret-name>?api-version=2016-10-01 -Method GET -Headers @{Authorization="Bearer $KeyVaultToken"}

La respuesta debería tener este aspecto:

  value       id                                                                                    attributes
  -----       --                                                                                    ----------
  'My Secret' https://mi-lab-vault.vault.azure.net/secrets/mi-test/50644e90b13249b584c44b9f712f2e51 @{enabled=True; created=16…

Cuando haya recuperado el secreto del almacén de claves, podrá usarlo para autenticarse en un servicio que requiere un nombre y una contraseña.

Limpieza de recursos

Por último, cuando quiera limpiar los recursos, inicie sesión en el Azure Portal, seleccione Grupos de recursos, y a continuación, busque y seleccione el grupo de recursos que se ha creado en el proceso de este tutorial (por ejemplo, mi-test). A continuación, use el comando Eliminar grupo de recursos.

O bien, también puede limpiar los recursos mediante PowerShell o la CLI.

Uso de las identidades administradas asignadas por el sistema de una máquina virtual Windows para acceder a Resource Manager

Sugerencia

Los pasos de este artículo podrían variar ligeramente en función del portal desde donde comienza.

En este tutorial se explica cómo crear una identidad asignada por el sistema, asignarla a una máquina virtual (VM) Windows y, a continuación, usar esa identidad para acceder a la API de Azure Resource Manager. Azure administra automáticamente las identidades de servicio administradas. Estas identidades permiten autenticarse en servicios que admiten la autenticación de Microsoft Entra, sin necesidad de incluir credenciales en el código.

Aprenderá a:

  • Conceda a la máquina virtual acceso a Azure Resource Manager.
  • Obtenga un token de acceso mediante la identidad administrada asignada por el sistema de la máquina virtual para acceder a Resource Manager.
  1. Inicie sesión en Azure Portal con su cuenta de administrador.

  2. Vaya a la pestaña Grupos de recursos.

  3. Seleccione el grupo de recursos al que desea conceder acceso a la identidad administrada de la máquina virtual.

  4. En el panel izquierdo, seleccione Control de acceso (IAM).

  5. Seleccione Agregar y, luego, Agregar asignación de roles.

  6. En la pestaña Rol, seleccione Lector. Este rol permite ver todo recursos, pero no realizar cambios.

  7. En la pestaña Miembros, en la opción Asignar acceso a, seleccione Identidad administrada, luego seleccione + Seleccionar miembros.

  8. Asegúrese de que la suscripción adecuada aparece en la lista desplegable Suscripción. En Grupo de recursos, seleccione Todos los grupos de recursos.

  9. En la lista desplegable Administrar identidad, seleccione Máquina virtual.

  10. En Seleccionar, elija la máquina virtual en la lista desplegable y seleccione Guardar.

    Captura de pantalla que muestra cómo agregar el rol de lector a la identidad administrada.

Obtención de un token de acceso

Use la identidad administrada asignada por el sistema de la máquina virtual para llamar a Resource Manager y obtener un token de acceso.

Para completar estos pasos, necesitará un cliente SSH. Si usa Windows, puede usar el cliente SSH en el Subsistema de Windows para Linux. Si necesita ayuda para configurar las claves del cliente de SSH, consulte Uso de SSH con Windows en Azure o Creación y uso de un par de claves SSH pública y privada para máquinas virtuales Linux en Azure.

  1. En el portal, vaya a la máquina virtual Linux y, en Información general, seleccione Conectar.
  2. Conéctese a la máquina virtual con el cliente SSH que elija.
  3. En la ventana del terminal, use curl para realizar una solicitud al punto de conexión local de Managed Identities for Azure Resources para obtener un token de acceso para Azure Resource Manager.   La solicitud de curl para el token de acceso está a continuación.
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/' -H Metadata:true

Nota:

El valor del parámetro resource debe coincidir exactamente con el que espera Microsoft Entra ID. En el caso del identificador de recurso de Resource Manager, debe incluir la barra diagonal final en el URI.

La respuesta incluye el token de acceso que necesita para acceder a Azure Resource Manager.

Respuesta:

{
  "access_token":"eyJ0eXAiOi...",
  "refresh_token":"",
  "expires_in":"3599",
  "expires_on":"1504130527",
  "not_before":"1504126627",
  "resource":"https://management.azure.com",
  "token_type":"Bearer"
}

Use este token de acceso para acceder a Azure Resource Manager; por ejemplo, para leer los detalles del grupo de recursos al que ha concedido previamente acceso a esta máquina virtual. Reemplace los valores de <SUBSCRIPTION-ID>, <RESOURCE-GROUP> y <ACCESS-TOKEN> con los que creó anteriormente.

Nota:

La dirección URL distingue mayúsculas de minúsculas, por lo tanto, asegúrese de que usa las mismas mayúsculas y minúsculas que al asignar el nombre al grupo de recursos, así como la "G" mayúscula de "resourceGroups".

curl https://management.azure.com/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>?api-version=2016-09-01 -H "Authorization: Bearer <ACCESS-TOKEN>" 

La respuesta devuelta con la información específica del grupo de recursos:

{
"id":"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/DevTest",
"name":"DevTest",
"location":"westus",
"properties":
{
  "provisioningState":"Succeeded"
  }
} 

Uso de identidades administradas asignadas por el usuario en máquinas virtuales Windows para acceder a Azure Resource Manager

En este tutorial se explica cómo crear una identidad asignada por el usuario, asignarla a una máquina virtual (VM) Windows y, a continuación, usar esa identidad para acceder a la API de Azure Resource Manager. Azure administra automáticamente las identidades de servicio administradas. Estas identidades permiten autenticarse en servicios que admiten la autenticación de Microsoft Entra, sin necesidad de incluir credenciales en el código.

Aprenderá a:

  • Crear una identidad administrada asignada por el usuario
  • Asignar la identidad asignada por el usuario a la máquina virtual Windows.
  • Conceder a la identidad asignada por el usuario acceso a un grupo de recursos de Azure Resource Manager.
  • Obtener un token de acceso utilizando la identidad asignada por el usuario y usarlo para llamar a Azure Resource Manager.
  • Leer las propiedades de un grupo de recursos

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Configuración de Azure PowerShell de forma local

Para ejecutar scripts en este ejemplo, tiene dos opciones:

  • Use el servicio Azure Cloud Shell, que puede abrir mediante el botón Probar, ubicado en la esquina superior derecha de los bloques de código.
  • Ejecute los scripts localmente con Azure PowerShell, tal como se describe en la sección siguiente.

Para usar Azure PowerShell localmente para este tutorial (en lugar de usar Cloud Shell), complete los pasos siguientes:

  1. Instale la versión más reciente de Azure PowerShell si aún no lo ha hecho.

  2. Inicie de sesión en Azure:

    Connect-AzAccount
    
  3. Instalar la versión más reciente de PowerShellGet.

    Install-Module -Name PowerShellGet -AllowPrerelease
    

    Es posible que necesite Exit fuera de la sesión de PowerShell actual después de ejecutar este comando para el paso siguiente.

  4. Instale la versión publicada del módulo Az.ManagedServiceIdentity. Necesita esto para realizar las operaciones de identidad administrada asignadas por el usuario en este tutorial:

    Install-Module -Name Az.ManagedServiceIdentity -AllowPrerelease
    

Habilitar

Para escenarios basados en una identidad asignada por el usuario, debe realizar los pasos siguientes en esta sección:

  1. Creación de una identidad.
  2. Asignación de la identidad recién creada.

Creación de la identidad

En esta sección se muestra cómo crear una identidad asignada por el usuario, que se crea como un recurso de Azure independiente. Con el cmdlet New-AzUserAssignedIdentity, Azure crea una identidad en el inquilino de Microsoft Entra que puede asignar a una o varias instancias de servicio de Azure.

Importante

Al crear identidades administradas asignadas por el usuario, el nombre debe comenzar con una letra o un número, y puede incluir una combinación de caracteres alfanuméricos, guiones (-) y guiones bajos (_). Para que la asignación a una máquina virtual o un conjunto de escalado de máquinas virtuales funcione correctamente, el nombre está limitado a 24 caracteres. Para más información, consulte Preguntas más frecuentes y problemas conocidos.

New-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1

La respuesta contiene detalles de la identidad asignada por el usuario creada, similar al ejemplo siguiente. Defina los valores Id y ClientId para la identidad asignada por el usuario, ya que se usan en los pasos siguientes:

{
Id: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1
ResourceGroupName : myResourceGroupVM
Name: ID1
Location: westus
TenantId: aaaabbbb-0000-cccc-1111-dddd2222eeee
PrincipalId: aaaaaaaa-bbbb-cccc-1111-222222222222
ClientId: 00001111-aaaa-2222-bbbb-3333cccc4444
ClientSecretUrl: https://control-westus.identity.azure.net/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1/credentials?tid=aaaabbbb-0000-cccc-1111-dddd2222eeee&oid=aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb&aid=00001111-aaaa-2222-bbbb-3333cccc4444
Type: Microsoft.ManagedIdentity/userAssignedIdentities
}

Asignación de la identidad

En esta sección se muestra cómo asignar la identidad asignada por el usuario a una máquina virtual Windows. Los clientes pueden usar las identidades asignadas por el usuario en diversos recursos de Azure. Use los comandos siguientes para asociar la identidad asignada por el usuario con una única máquina virtual. Use la propiedad Id devuelta en el paso anterior para el parámetro -IdentityID.

$vm = Get-AzVM -ResourceGroupName myResourceGroup -Name myVM
Update-AzVM -ResourceGroupName TestRG -VM $vm -IdentityType "UserAssigned" -IdentityID "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.ManagedIdentity/userAssignedIdentities/ID1"

Conceder acceso

En esta sección se muestra cómo conceder acceso de identidad asignada por el usuario a un grupo de recursos en Azure Resource Manager. Identidades administradas para recursos de Azure dispone de identidades que el código puede utilizar para solicitar tokens de acceso que le permitan autenticarse en las API de recursos compatibles con la autenticación de Microsoft Entra. En este tutorial, el código accederá a la API de Azure Resource Manager.

Antes de que el código pueda acceder a la API, debe conceder a la identidad acceso a un recurso en Azure Resource Manager. En este caso, tendrá acceso al grupo de recursos para el que se encuentra la máquina virtual. Actualice el valor de <SUBSCRIPTIONID> según corresponda en su entorno.

$spID = (Get-AzUserAssignedIdentity -ResourceGroupName myResourceGroupVM -Name ID1).principalid
New-AzRoleAssignment -ObjectId $spID -RoleDefinitionName "Reader" -Scope "/subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/"

La respuesta contiene detalles de la asignación de roles que se ha creado, de forma similar al ejemplo siguiente:

RoleAssignmentId: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000
Scope: /subscriptions/<SUBSCRIPTIONID>/resourcegroups/myResourceGroupVM
DisplayName: ID1
SignInName:
RoleDefinitionName: Reader
RoleDefinitionId: 00000000-0000-0000-0000-000000000000
ObjectId: aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ObjectType: ServicePrincipal
CanDelegate: False

Acceso a los datos

Sugerencia

Los pasos de este artículo podrían variar ligeramente en función del portal desde donde comienza.

Obtención de un token de acceso

En el resto del tutorial, trabajará desde la máquina virtual que ha creado anteriormente.

  1. Inicie sesión en Azure Portal.

  2. En el portal, vaya a Máquinas virtuales y vaya a la máquina virtual Windows. En Información general, seleccione Conectar.

  3. Escriba el Nombre de usuario y Contraseña que ha usado al crear la máquina virtual Windows.

  4. Ahora que ha creado una Conexión a Escritorio Remoto con su máquina virtual, abra PowerShell en una sesión remota.

  5. Con el cmdlet Invoke-WebRequest de PowerShell, realice una solicitud a las identidades administradas locales para el punto de conexión de recursos de Azure para obtener un token de acceso para Azure Resource Manager. client_id es el valor que se devuelve al crear la identidad administrada asignada por el usuario.

    $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&resource=https://management.azure.com/' -Method GET -Headers @{Metadata="true"}
    $content = $response.Content | ConvertFrom-Json
    $ArmToken = $content.access_token
    

Lectura de las propiedades

Por último, use el token de acceso recuperado en el paso anterior para acceder a Azure Resource Manager y a continuación, lea las propiedades del grupo de recursos al que concedió acceso de identidad asignado por el usuario. Reemplace <SUBSCRIPTION ID> con el identificador de la suscripción de su entorno.

(Invoke-WebRequest -Uri https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroupVM?api-version=2016-06-01 -Method GET -ContentType "application/json" -Headers @{Authorization ="Bearer $ArmToken"}).content

La respuesta contiene la información específica del grupo de recursos, de forma similar al ejemplo siguiente:

{"id":"/subscriptions/<SUBSCRIPTIONID>/resourceGroups/myResourceGroupVM","name":"myResourceGroupVM","location":"eastus","properties":{"provisioningState":"Succeeded"}}

Saber más