分享方式:


使用 .NET 在 Blob 儲存體要求上指定客戶提供的金鑰

向 Azure Blob 儲存體提出要求的用戶端可以選擇在個別要求中提供 AES-256 加密金鑰。 在要求中包含加密金鑰,可讓您更精確地控制 Blob 儲存體作業的加密設定。 客戶提供的金鑰可以儲存在 Azure Key Vault 或另一個金鑰存放區中。

本文說明如何使用 .NET 在要求中指定客戶提供的金鑰。

安裝用戶端程式庫套件

注意

以下提供的範例使用 Azure 儲存體用戶端程式庫第 12 版。 第 12 版用戶端程式庫是 Azure SDK 的一部分。 如需有關 Azure SDK 的詳細資訊,請參閱 GitHub 上的 Azure SDK 存放庫。

若要安裝 Blob 儲存體套件,請從 NuGet 套件管理員主控台執行下列命令:

Install-Package Azure.Storage.Blobs

以下顯示的範例也使用適用於 .NET 的 Azure 身分識別用戶端程式庫最新版本,以使用 Microsoft Entra 認證進行驗證。 若要安裝套件,請從 NuGet 套件管理員主控台執行以下命令:

Install-Package Azure.Identity

若要深入了解如何使用 Azure 身分識別用戶端程式庫進行驗證,請參閱適用於 .NET 的 Azure 身分識別用戶端程式庫

使用客戶提供的金鑰來寫入 blob

下列範例會在使用適用於 Blob 儲存體的第 12 版用戶端程式庫上傳 blob 時,提供 AES-256 金鑰。 此範例使用 DefaultAzureCredential 物件來授權 Microsoft Entra ID 的寫入要求,但您也可以使用共用金鑰認證來授權要求。 如需使用 DefaultAzureCredential 類別授權受控識別以存取 Azure 儲存體的詳細資訊,請參閱適用於 .NET 的 Azure 身分識別用戶端程式庫

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;
    }
}

下一步