Указание ключа, предоставленного клиентом, для запроса к Хранилищу BLOB-объектов с помощью .NET
Клиенты, выполняющие запросы к Хранилищу BLOB-объектов Azure, могут предоставлять ключ шифрования AES-256 для каждого отдельного запроса. Включение ключа шифрования по запросу обеспечивает детальный контроль над параметрами шифрования для операций с хранилищем BLOB-объектов. Предоставляемые клиентом ключи могут храниться в службе Azure Key Vault или в другом хранилище ключей.
В этой статье описано, как указать в запросе ключ, предоставленный клиентом, с помощью .NET.
Установка пакетов клиентских библиотек
Примечание.
В показанных примерах используется клиентская библиотека службы хранилища Azure, версия 12. Клиентская библиотека версии 12 является частью пакета Azure SDK. Дополнительные сведения о пакете Azure SDK см. в репозитории Azure SDK на сайте GitHub.
Чтобы установить пакет хранилища BLOB-объектов, выполните следующую команду в консоли диспетчера пакетов NuGet:
Install-Package Azure.Storage.Blobs
В примерах ниже также используется последняя версия клиентской библиотеки удостоверений Azure для .NET для проверки подлинности с помощью учетных данных Microsoft Entra. Чтобы установить пакеты NuGet., в консоли диспетчера пакетов выполните следующие команды:
Install-Package Azure.Identity
Дополнительные сведения о проверке подлинности с помощью клиентской библиотеки удостоверений Azure для .NET см. здесь.
Использование ключа, предоставляемого пользователем, для записи BLOB-объекта
В следующем примере предоставляется ключ AES-256 при отправке BLOB-объекта с использованием клиентской библиотеки версии 12 для Хранилища BLOB-объектов. В примере используется объект DefaultAzureCredential для авторизации запроса на запись с помощью идентификатора Microsoft Entra, но вы также можете авторизовать запрос с учетными данными общего ключа. Дополнительные сведения об использовании класса DefaultAzureCredential для авторизации управляемого удостоверения для доступа к Службе хранилища Azure см. в статье Клиентская библиотека Azure Identity для .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;
}
}