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

Aprenda a acceder a servicios de Azure, como Azure Storage, desde una aplicación web que se ejecute en Azure App Service y no requiera un usuario que haya iniciado sesión, mediante el uso de identidades administradas. En este tutorial se muestra cómo conectarse a Azure Storage como ejemplo.

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

Diagrama que muestra cómo obtener acceso a Storage.

Quiere agregar acceso seguro a los servicios de Azure, incluidos Azure Storage, Azure SQL Database y Azure Key Vault, 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 rol (RBAC), 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.
  • Cree 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 cuenta de Azure, cree una cuenta free antes de comenzar.

Requisitos previos

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

Si crea y publica la aplicación web a través de Visual Studio, la identidad administrada se ha habilitado en la aplicación automáticamente.

  1. En el servicio de aplicaciones, en el menú de la izquierda, seleccione Identidad y, a continuación, seleccione Sistema asignado. Compruebe que el Estado está establecido en Activo.

    Si no es así, seleccione Activado y, después, Guardar. Para habilitar la identidad administrada asignada por el sistema, en el cuadro de diálogo de confirmación, seleccione . 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.

  2. 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 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 Azure. Un grupo de recursos es un contenedor lógico para los servicios de Azure. Al crear una cuenta de almacenamiento, puede crear un nuevo grupo de recursos o usar un grupo de recursos 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: blobs, archivos, colas, tablas y discos. 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 el portal de Azure, siga estos pasos.

  1. En el menú del portal de Azure, 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 Grupo de recursos, seleccione el grupo de recursos que contiene la aplicación web.

  5. Escriba un nombre para la cuenta de almacenamiento. El nombre que elija debe ser único en Azure. El nombre debe tener entre 3 y 24 caracteres de longitud y solo puede incluir números y letras minúsculas.

  6. Seleccione una ubicación (región) para la cuenta de almacenamiento o utilice el valor predeterminado.

  7. En Tipo de almacenamiento preferido, seleccione Azure Blob Storage o Azure Data Lake Storage Gen 2.

  8. Deje estos campos con sus valores predeterminados:

    Campo Importancia
    Rendimiento Estándar
    Redundancia Almacenamiento con redundancia geográfica
  9. Seleccione Revisar y crear para revisar la configuración de la cuenta de almacenamiento y crear la cuenta.

  10. Seleccione Crear.

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

  1. Vaya a la nueva cuenta de almacenamiento en el portal de Azure.

  2. En el menú izquierdo de la cuenta de almacenamiento, en Almacenamiento de datos, seleccione Contenedores.

  3. Seleccione Agregar 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 una sección 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 "Storage Blob Data Contributor" le da a la aplicación web, representada por la identidad administrada asignada por el sistema, acceso de lectura, escritura y eliminación tanto al contenedor de blobs como a los datos.

Nota:

RBAC de Azure no admite algunas operaciones en contenedores de blobs privados, 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 Azure RBAC no autorice. Para obtener más información, consulte Cuándo usar una firma de acceso compartido.

  1. En el portal de Azure, acceda a su cuenta de almacenamiento para otorgar acceso a su aplicación web.
  2. En el menú izquierdo, seleccione Control de acceso (IAM) y, a continuación, seleccione Asignaciones de roles. Verá una lista de quién tiene acceso a la cuenta de almacenamiento.
  3. Quiere agregar una asignación de roles al servicio de aplicaciones 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.
  4. Asigne el rol Colaborador de datos de Storage Blob a App Service en el ámbito de la cuenta de almacenamiento. Para más información, consulte 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

La clase DefaultAzureCredential se usa para obtener una credencial de token para que el código autorice las solicitudes a Azure Storage. 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 sample 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 línea de comandos de .NET Core o la consola de Package Manager 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 el comando Tools>NuGet Package Manager>Package Manager Console.

  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 doesn't 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 finaliza este tutorial y ya no necesita la aplicación web o los recursos asociados, limpie los recursos que ha creado.

Eliminar el grupo de recursos

  1. En el portal de Azure, seleccione Grupos de recursos en el menú del portal de Azure y seleccione el grupo de recursos que contiene su servicio de aplicación y su plan de servicio de aplicación.

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

    Captura de pantalla que muestra la eliminación del grupo de recursos.

  3. Escriba el nombre del grupo de recursos para confirmarlo.

Este proceso puede tardar varios minutos en ejecutarse.

Pasos siguientes

En este tutorial ha aprendido a:

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