Especificar una clave proporcionada por el cliente en una solicitud a Blob Storage con .NET

Los clientes que realizan solicitudes en Azure Blob Storage tienen la opción de proporcionar una clave de cifrado AES-256 en una solicitud individual. La inclusión de la clave de cifrado en la solicitud proporciona un control detallado sobre la configuración de cifrado para las operaciones de almacenamiento de blobs. Las claves proporcionadas por el cliente se pueden almacenar en Azure Key Vault o en otro almacén de claves.

En este artículo se muestra cómo especificar una clave proporcionada por el cliente en una solicitud con .NET.

Instalación de los paquetes de biblioteca cliente

Nota

Los ejemplos que se muestran aquí usan la biblioteca cliente de Azure Storage versión 12. La biblioteca cliente de la versión 12 forma parte de Azure SDK. Para más información sobre Azure SDK, consulte el repositorio de Azure SDK en GitHub.

Para instalar el paquete de almacenamiento de blobs, ejecute el siguiente comando desde la consola del administrador de paquetes NuGet:

Install-Package Azure.Storage.Blobs

En los ejemplos que se muestran aquí también se usa la versión más reciente de la biblioteca cliente de identidades de Azure para .NET para autenticarse con credenciales de Microsoft Entra. Para instalar el paquete, ejecute el siguiente comando desde la consola del administrador de paquetes NuGet:

Install-Package Azure.Identity

Para obtener más información sobre cómo autenticarse con la biblioteca de cliente de identidad de Azure, consulte Biblioteca cliente de identidades de Azure para .NET.

Uso de una clave proporcionada por el cliente para escribir en un blob

En el ejemplo siguiente se proporciona una clave AES-256 al cargar un blob con la biblioteca cliente v12 para Blob Storage. En el ejemplo se usa el objeto DefaultAzureCredential para autorizar la solicitud de escritura con Microsoft Entra ID, pero también se puede autorizar la solicitud con credenciales de clave compartida. Para más información sobre el uso de la clase DefaultAzureCredential para autorizar a una identidad administrada el acceso a Azure Storage, consulte Biblioteca cliente de Azure Identity para .NET.

async static Task UploadBlobWithClientKey(Uri blobUri,
                                          Stream data,
                                          byte[] key,
                                          string keySha256)
{
    // Create a new customer-provided key.
    // Key must be AES-256.
    var cpk = new CustomerProvidedKey(key);

    // Check the key's encryption hash.
    if (cpk.EncryptionKeyHash != keySha256)
    {
        throw new InvalidOperationException("The encryption key is corrupted.");
    }

    // Specify the customer-provided key on the options for the client.
    BlobClientOptions options = new BlobClientOptions()
    {
        CustomerProvidedKey = cpk
    };

    // Create the client object with options specified.
    BlobClient blobClient = new BlobClient(
        blobUri,
        new DefaultAzureCredential(),
        options);

    // If the container may not exist yet,
    // create a client object for the container.
    // The container client retains the credential and client options.
    BlobContainerClient containerClient =
        blobClient.GetParentBlobContainerClient();

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

        // Upload the data using the customer-provided key.
        await blobClient.UploadAsync(data);
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

Pasos siguientes