使用 .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;
}
}