Especificar uma chave fornecida pelo cliente em uma solicitação para armazenamento de Blob com .NET

Os clientes que fazem solicitações no armazenamento de Blob do Azure têm a opção de fornecer uma chave de criptografia AES-256 em uma solicitação individual. A inclusão da chave de criptografia na solicitação fornece controle granular sobre as configurações de criptografia para operações de armazenamento de Blob. As chaves fornecidas pelo cliente podem ser armazenadas no Cofre de Chaves do Azure ou em outro armazenamento de chaves.

Este artigo mostra como especificar uma chave fornecida pelo cliente em uma solicitação com o .NET.

Instalar pacotes de biblioteca cliente

Nota

Os exemplos mostrados aqui usam a biblioteca de cliente do Armazenamento do Azure versão 12. A biblioteca de cliente versão 12 faz parte do SDK do Azure. Para obter mais informações sobre o SDK do Azure, consulte o repositório do SDK do Azure no GitHub.

Para instalar o pacote de armazenamento de Blob, execute o seguinte comando no console do gerenciador de pacotes NuGet:

Install-Package Azure.Storage.Blobs

Os exemplos mostrados aqui também usam a versão mais recente da biblioteca de cliente do Azure Identity para .NET para autenticação com credenciais do Microsoft Entra. Para instalar o pacote, execute o seguinte comando no console do gerenciador de pacotes NuGet:

Install-Package Azure.Identity

Para saber mais sobre como autenticar com a biblioteca de cliente do Azure Identity, consulte Biblioteca de cliente do Azure Identity para .NET.

Usar uma chave fornecida pelo cliente para gravar em um blob

O exemplo a seguir fornece uma chave AES-256 ao carregar um blob com a biblioteca de cliente v12 para armazenamento de Blob. O exemplo usa o objeto DefaultAzureCredential para autorizar a solicitação de gravação com a ID do Microsoft Entra, mas você também pode autorizar a solicitação com credenciais de Chave Compartilhada. Para obter mais informações sobre como usar a classe DefaultAzureCredential para autorizar uma identidade gerenciada para acessar o Armazenamento do Azure, consulte Biblioteca de cliente do 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;
    }
}

Próximos passos