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
- Si no está familiarizado con la característica Managed Identities for Azure Resources, consulte esta introducción.
- Si no tiene una cuenta de Azure, regístrese para obtener una cuenta gratuita antes de continuar.
- Para realizar la creación de recursos necesarios y la administración de roles, la cuenta debe tener permisos de "Propietario" en el ámbito adecuado (en su suscripción o en un grupo de recursos). Si necesita ayuda con la asignación de roles, consulte Asignación de roles de Azure para administrar el acceso a los recursos de una suscripción de Azure.
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.
Para habilitar una identidad administrada asignada por el sistema en una máquina virtual nueva:
Inicie sesión en el Portal de Azure
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.
Seleccione el botón + Crear un recurso de la esquina superior izquierda de Azure Portal.
Seleccione Almacenamiento y después Cuenta de almacenamiento: blob, archivo, tabla, cola.
En Name (Nombre), escriba un nombre para la cuenta de almacenamiento.
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]).
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.
Seleccione Crear.
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.
Vuelva a la cuenta de almacenamiento recién creada.
En Blob service, seleccione Contenedores.
Seleccione + Contenedor en la parte superior de la página.
En Nuevo contenedor, escriba un nombre para el contenedor, y mantenga el valor predeterminado en Nivel de acceso público.
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.
Para cargar el archivo en el contenedor recién creado, haga clic en el nombre del contenedor y en Cargar.
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.
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.
Vuelva a la cuenta de almacenamiento recién creada.
Seleccione Access Control (IAM) .
Seleccione Agregar>Agregar asignación de roles para abrir la página Agregar asignación de roles.
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>
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.
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: