Especificar uma chave fornecida pelo cliente em uma solicitação para o Armazenamento de blobs com o .NET
Os clientes que fazem solicitações no Armazenamento de blobs do Azure têm a opção de fornecer uma chave de criptografia AES-256 por solicitação individual. A inclusão da chave de criptografia na solicitação proporciona controle granular das configurações de criptografia para operações de armazenamento de blobs. As chaves fornecidas pelo cliente podem ser armazenadas no Azure Key Vault ou em outro repositório de chaves.
Este artigo mostra como especificar uma chave fornecida pelo cliente em uma solicitação com o .NET.
Instalar os pacotes da biblioteca de clientes
Observação
Os exemplos mostrados aqui usam a biblioteca de clientes do Armazenamento do Azure versão 12. A biblioteca de clientes versão 12 faz parte do SDK do Azure. Para obter mais informações sobre o SDK do Azure, confira o repositório do SDK no GitHub.
Para instalar o pacote de armazenamento de BLOBs, execute o comando a seguir 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 clientes da Identidade do Azure para .NET para autenticação com as credenciais do Microsoft Entra. No console do gerenciador de pacotes NuGet, execute o comando a seguir para instalar o pacote:
Install-Package Azure.Identity
Para saber mais sobre como autenticar com a biblioteca de clientes da Identidade do Azure, veja Biblioteca de clientes da Identidade do Azure 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 clientes vV12 no Armazenamento de blobs. 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 a acessar o Armazenamento do Azure, consulte a Biblioteca de cliente da Identidade do Azure 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;
}
}