Указание ключа, предоставленного клиентом, для запроса к Хранилищу 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;
    }
}

Следующие шаги