Especificar una clave proporcionada por el cliente en una solicitud a Blob Storage con .NETSpecify a customer-provided key on a request to Blob storage with .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.Clients making requests against Azure Blob storage have the option to provide an AES-256 encryption key on an individual request. 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.Including the encryption key on the request provides granular control over encryption settings for Blob storage operations. Las claves proporcionadas por el cliente se pueden almacenar en Azure Key Vault o en otro almacén de claves.Customer-provided keys can be stored in Azure Key Vault or in another key store.

En este artículo se muestra cómo especificar una clave proporcionada por el cliente en una solicitud con .NET.This article shows how to specify a customer-provided key on a request with .NET.

Instalación de los paquetes de biblioteca clienteInstall client library packages

Nota

Los ejemplos que se muestran aquí usan la biblioteca cliente de Azure Storage versión 12.The examples shown here use the Azure Storage client library version 12. La biblioteca cliente de la versión 12 forma parte de Azure SDK.The version 12 client library is part of the Azure SDK. Para más información sobre Azure SDK, consulte el repositorio de Azure SDK en GitHub.For more information about the Azure SDK, see the Azure SDK repository on GitHub.

Para instalar el paquete de almacenamiento de blobs, ejecute el siguiente comando desde la consola del administrador de paquetes NuGet:To install the Blob storage package, run the following command from the NuGet package manager console:

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 Azure AD.The examples shown here also use the latest version of the Azure Identity client library for .NET to authenticate with Azure AD credentials. Para instalar el paquete, ejecute el siguiente comando desde la consola del administrador de paquetes NuGet:To install the package, run the following command from the NuGet package manager console:

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.To learn more about how to authenticate with the Azure Identity client library, see Azure Identity client library for .NET.

Uso de una clave proporcionada por el cliente para escribir en un blobUse a customer-provided key to write to a blob

En el ejemplo siguiente se proporciona una clave AES-256 al cargar un blob con la biblioteca cliente v12 para Blob Storage.The following example provides an AES-256 key when uploading a blob with the v12 client library for Blob storage. En el ejemplo se usa el objeto DefaultAzureCredential para autorizar la solicitud de escritura con Azure AD, pero también se puede autorizar la solicitud con credenciales de clave compartida.The example uses the DefaultAzureCredential object to authorize the write request with Azure AD, but you can also authorize the request with Shared Key credentials.

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 siguientesNext steps