.NET での BLOB ストレージの要求時にカスタマー指定のキーを指定する

Azure Blob Storage に対して要求を行うクライアントには、個々の要求に対して AES-256 暗号化キーを指定するオプションがあります。 要求に暗号化キーを含めると、BLOB ストレージ操作の暗号化設定をきめ細かく制御できます。 カスタマー指定のキーは、Azure Key Vault または別のキー ストアに格納できます。

この記事では、.NET での BLOB ストレージの要求時にカスタマー指定のキーを指定する方法を示します。

クライアント ライブラリ パッケージをインストールする

注意

ここに示す例では、Azure Storage クライアント ライブラリバージョン 12 を使用します。 バージョン 12 クライアント ライブラリは、Azure SDK に含まれています。 Azure SDK の詳細については、GitHub で Azure SDK リポジトリを参照してください。

BLOB ストレージ パッケージをインストールするには、NuGet パッケージ マネージャー コンソールから次のコマンドを実行します。

Install-Package Azure.Storage.Blobs

ここで示す例では、.NET 用の Azure Identity クライアント ライブラリの最新バージョンを使用して、Microsoft Entra 資格情報で認証することもできます。 パッケージをインストールするには、NuGet パッケージ マネージャー コンソールから次のコマンドを実行します。

Install-Package Azure.Identity

Azure ID クライアント ライブラリによる認証方法の詳細については、「.NET 用 Azure ID クライアント ライブラリ」を参照してください。

カスタマー指定のキーを使用して BLOB に書き込む

次の例では、BLOB ストレージの v12 クライアント ライブラリを使用して BLOB をアップロードするときに、AES-256 キーを指定します。 この例では、DefaultAzureCredential オブジェクトを使用して、Microsoft Entra ID で書き込み要求を承認しますが、共有キー資格情報を使用して要求を承認することもできます。 DefaultAzureCredential クラスを使用し、マネージド ID を認可して Azure Storage にアクセスする方法の詳細については、.NET 用の Azure ID クライアント ライブラリに関する記事を参照してください。

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

次のステップ