Tutorial: Acceso a servicios de Azure desde una aplicación web .NET

Aprenda a acceder a los servicios de Azure, como Azure Storage, desde una aplicación web (no para un usuario con la sesión iniciada) que se ejecuta en Azure App Service mediante identidades administradas. En este tutorial se muestra un ejemplo de cómo conectarse a Azure Storage.

Se puede acceder de manera segura a cualquier servicio que admita identidades administradas (B en la imagen siguiente) mediante este tutorial:

  • Azure Storage
  • Azure SQL Database
  • Azure Key Vault

Diagram that shows how to access storage.

Puede que desee agregar acceso seguro a los servicios 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 Microsoft Entra ID 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 de Azure 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 Activado y, a continuación, Guardar. Seleccione en el cuadro de diálogo de confirmació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.

Screenshot that shows the System assigned identity option.

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 Crear.

  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 (región) para la cuenta de almacenamiento o utilice el valor predeterminado.

  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 Almacenamiento de datos y, después, 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.

Nota:

Algunas operaciones en contenedores de blobs privados no son compatibles con RBAC de Azure, como ver blobs o copiar blobs entre cuentas. Un contenedor de blobs con nivel de acceso privado requiere un token de SAS para cualquier operación que no esté autorizada por RBAC de Azure. Para obtener más información, consulte Cuándo usar una firma de acceso compartido.

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 para abrir la página Agregar asignación de roles.

Asigne el rol Colaborador de datos de Storage Blob a App Service en el ámbito de la suscripción. Para acceder a los pasos detallados, vea Asignación de roles de Azure mediante Azure Portal.

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

Acceso a Blob Storage

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 Microsoft Entra. 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.

Línea de comandos de .NET Core

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

  2. Ejecute los comandos de instalación.

    dotnet add package Azure.Storage.Blobs
    
    dotnet add package Azure.Identity
    

Consola del Administrador de paquetes

  1. Abra el proyecto o la solución en Visual Studio y abra la consola mediante Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes.

  2. Ejecute los comandos de instalación.

    Install-Package Azure.Storage.Blobs
    
    Install-Package Azure.Identity
    

Ejemplo de .NET

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ó.

Eliminar el grupo de recursos

En Azure Portal, seleccione Grupos de recursos en el menú del portal y seleccione el grupo de recursos que contenga su instancia de App Service y el plan de esta.

Seleccione Eliminar grupo de recursos para eliminar el grupo de recursos y todos los recursos.

Screenshot that shows deleting the resource group.

Este comando puede tardar varios minutos en ejecutarse.

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.