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

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.

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

Nota:

La autenticación de Microsoft Entra para Azure Storage está en versión preliminar pública.

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.

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 el Portal de Azure

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

Conceder acceso

Crear cuenta de almacenamiento

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

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

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

  3. En Name (Nombre), 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. Vuelva a la cuenta de almacenamiento recién creada.

  2. En Blob service, seleccione Contenedores.

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

  4. En Nuevo contenedor, escriba un nombre para el contenedor, y mantenga el valor predeterminado en Nivel de acceso público.

    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 (sin comillas) "Hola mundo :)" y guárdelo.

  6. Para cargar el archivo en el contenedor recién creado, haga clic en el nombre del contenedor y en Cargar.

  7. En el panel Cargar blob, en Archivos, seleccione el icono de carpeta y vaya al archivo hello_world.txt en la máquina local, selecciónelo y seleccione 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. 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 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.

Pasos siguientes

En este tutorial, ha aprendido a habilitar una identidad asignada por el sistema de una máquina virtual Windows para acceder a Azure Storage. Para más información sobre Azure Storage, consulte: