Tutorial: Acceso a Azure Storage desde una aplicación web

Aprenda a establecer el acceso a Azure Storage para una aplicación web (no para un usuario con la sesión iniciada) que se ejecuta en Azure App Service mediante identidades administradas.

Diagrama que muestra cómo obtener acceso a Storage.

Puede que desee agregar acceso al plano de datos de Azure (Azure Storage, Azure SQL Database, Azure Key Vault u otros servicios) desde la aplicación web. Podría usar una clave compartida, pero tendría que preocuparse de la seguridad operativa de quién puede crear, implementar y administrar el secreto. También es posible que la clave pudiera insertarse en GitHub, donde los hackers saben cómo buscar. Una manera más segura de dar acceso a los datos a la aplicación web es usar identidades administradas.

Una identidad administrada de Azure Active Directory (Azure AD) permite a App Service acceder a los recursos a través del control de acceso basado en roles, sin necesidad de credenciales de aplicación. Después de asignar una identidad administrada a la aplicación web, Azure se encarga de la creación y distribución de un certificado. Los usuarios no tienen que preocuparse de administrar secretos ni credenciales de aplicaciones.

En este tutorial, aprenderá a:

  • Crear una identidad administrada asignada por el sistema en una aplicación web.
  • Crear una cuenta de almacenamiento y un contenedor de Azure Blob Storage.
  • Acceder a Storage desde una aplicación web mediante identidades administradas.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Requisitos previos

Habilitación de la identidad administrada en una aplicación

Si crea y publica la aplicación web mediante Visual Studio, habilitará la identidad administrada en la aplicación. En la instancia de App Service, seleccione Identidad en el panel izquierdo y, a continuación, Asignado por el sistema. Compruebe que el Estado está establecido en Activo. Si no es así, seleccione Guardar y, a continuación, para habilitar la identidad administrada asignada por el sistema. Una vez habilitada la identidad administrada, el estado se establece en Activo y el identificador del objeto está disponible.

Captura de pantalla que muestra la opción de identidad asignada por el sistema.

Este paso crea un nuevo identificador de objeto, diferente del identificador de la aplicación que se creó en el panel Autenticación o autorización. Copie el identificador de objeto de la identidad administrada asignada por el sistema. Lo necesitará más adelante.

Creación de una cuenta de almacenamiento y un contenedor de Blob Storage

Ahora ya está listo para crear una cuenta de almacenamiento y un contenedor de Blob Storage.

Cada cuenta de almacenamiento debe pertenecer a un grupo de recursos de Azure. Un grupo de recursos es un contenedor lógico para agrupar servicios de Azure. Al crear una cuenta de almacenamiento, puede elegir entre crear un grupo de recursos o usar uno existente. En este artículo se muestra cómo crear un nuevo grupo de recursos.

Una cuenta de almacenamiento de uso general v2 proporciona acceso a todos los servicios de Azure Storage: Blob, File, Queue, Table y Disk. Los pasos indicados aquí crean una cuenta de almacenamiento de uso general v2, pero los pasos para crear cualquier otro tipo de cuenta de almacenamiento son similares.

Los blobs de Azure Storage se organizan en contenedores. Antes de poder cargar un blob más adelante en este tutorial, primero debe crear un contenedor.

Para crear una cuenta de almacenamiento de uso general v2 en Azure Portal, siga estos pasos.

  1. En el menú de Azure Portal, seleccione Todos los servicios. En la lista de recursos, escriba Cuentas de almacenamiento. Cuando comience a escribir, la lista se filtrará en función de la entrada. Seleccione Cuentas de almacenamiento.

  2. En la ventana Cuentas de almacenamiento que aparece, seleccione Agregar.

  3. Seleccione la suscripción en la que se va a crear la cuenta de almacenamiento.

  4. En el campo Grupo de recursos, seleccione en el menú desplegable el grupo de recursos que contiene la aplicación web.

  5. Después, escriba un nombre para la cuenta de almacenamiento. El nombre que elija debe ser único en Azure. El nombre debe tener también una longitud de entre 3 y 24 caracteres y solo puede contener números y letras minúsculas.

  6. Seleccione una ubicación para la cuenta de almacenamiento o utilice la ubicación predeterminada.

  7. Deje estos campos con sus valores predeterminados:

    Campo Value
    Modelo de implementación Resource Manager
    Rendimiento Estándar
    Tipo de cuenta StorageV2 (uso general v2)
    Replicación Almacenamiento con redundancia geográfica con acceso de lectura (RA-GRS)
    Nivel de acceso Acceso frecuente
  8. Seleccione Revisar y crear para revisar la configuración de la cuenta de almacenamiento y crear la cuenta.

  9. Seleccione Crear.

Para crear un contenedor de Blob Storage en Azure Storage, siga estos pasos.

  1. Vaya a la nueva cuenta de almacenamiento en Azure Portal.

  2. En el menú izquierdo de la cuenta de almacenamiento, desplácese a la sección Blob service y seleccione Contenedores.

  3. Seleccione el botón + Contenedor.

  4. Escriba un nombre para el nuevo contenedor. El nombre del contenedor debe escribirse en minúsculas, comenzar por una letra o un número, y solo puede incluir letras, números y el carácter de guión (-).

  5. Establezca el nivel de acceso público al contenedor. El nivel predeterminado es Private (no anonymous access) [Privado (sin acceso anónimo)].

  6. Seleccione Aceptar para crear el contenedor.

Concesión de acceso a la cuenta de almacenamiento

Debe conceder a la aplicación web acceso a la cuenta de almacenamiento antes de poder crear, leer o eliminar blobs. En un paso anterior, configuró la aplicación web que se ejecuta en App Service con una identidad administrada. Con el control de acceso basado en roles de Azure puede conceder a la identidad administrada acceso a otro recurso, igual que cualquier entidad de seguridad. El rol Colaborador de datos de Storage Blob proporciona a la aplicación web (representada por la identidad administrada asignada por el sistema) acceso de lectura, escritura y eliminación al contenedor de blobs y a los datos.

En Azure Portal, vaya a la cuenta de almacenamiento para conceder acceso a la aplicación web. Seleccione Control de acceso (IAM) en el panel izquierdo y, después, Asignaciones de roles. Verá una lista de quién tiene acceso a la cuenta de almacenamiento. Ahora quiere agregar una asignación de roles a un robot, la instancia de App Service que necesita acceso a la cuenta de almacenamiento. Seleccione Agregar > Agregar asignación de roles.

En Rol, seleccione Colaborador de datos de Storage Blob para dar a la aplicación web acceso para leer blobs de almacenamiento. En Asignar acceso a, seleccione App Service. En Suscripción, seleccione su suscripción. Seleccione la instancia de App Service a la que desea proporcionar acceso. Seleccione Guardar.

Captura de pantalla que muestra la pantalla Agregar asignación de roles.

Ahora, la aplicación web ya tiene acceso a la cuenta de almacenamiento.

Acceso a Blob Storage (.NET)

Para obtener una credencial de token que el código pueda usar para autorizar solicitudes para Azure Storage, se utiliza la clase DefaultAzureCredential. Cree una instancia de la clase DefaultAzureCredential, que usa la identidad administrada para capturar los tokens y asociarlos al cliente del servicio. En el ejemplo de código siguiente se obtiene la credencial de token autenticada y se usa para crear un objeto de cliente del servicio que, luego, carga un nuevo blob.

Para ver este código como parte de una aplicación de ejemplo, consulte el ejemplo en GitHub.

Instalación de los paquetes de biblioteca cliente

Instale el paquete NuGet de Blob Storage para que funcione con este servicio y la biblioteca cliente de Azure Identity del paquete NuGet de .NET para autenticarse con las credenciales de Azure AD. Instale las bibliotecas cliente mediante la interfaz de la línea de comandos de .NET Core o la Consola del Administrador de paquetes en Visual Studio.

Abra una línea de comandos y cambie al directorio que contiene el archivo del proyecto.

Ejecute los comandos de instalación.

dotnet add package Azure.Storage.Blobs

dotnet add package Azure.Identity

Ejemplo

using System;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using System.IO;
using Azure.Identity;

// Some code omitted for brevity.

static public async Task UploadBlob(string accountName, string containerName, string blobName, string blobContents)
{
    // Construct the blob container endpoint from the arguments.
    string containerEndpoint = string.Format("https://{0}.blob.core.windows.net/{1}",
                                                accountName,
                                                containerName);

    // Get a credential and create a client object for the blob container.
    BlobContainerClient containerClient = new BlobContainerClient(new Uri(containerEndpoint),
                                                                    new DefaultAzureCredential());

    try
    {
        // Create the container if it does not exist.
        await containerClient.CreateIfNotExistsAsync();

        // Upload text to a new block blob.
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            await containerClient.UploadBlobAsync(blobName, stream);
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}

Limpieza de recursos

Si ya ha terminado con este tutorial y no necesita la aplicación web ni los recursos asociados, elimine los recursos que creó.

Pasos siguientes

En este tutorial ha aprendido a:

  • Crear una identidad administrada asignada por el sistema.
  • Crear una cuenta de almacenamiento y un contenedor de Blob Storage.
  • Acceder a Storage desde una aplicación web mediante identidades administradas.