Spécifier une clé fournie par le client sur une demande au stockage d’objets blob avec .NET

Les clients qui effectuent des requêtes auprès du Stockage Blob Azure ont la possibilité de fournir une clé de chiffrement AES-256 sur une requête individuelle. L’inclusion de la clé de chiffrement dans la requête offre un contrôle précis des paramètres de chiffrement pour les opérations de stockage d’objets blob. Les clés fournies par le client peuvent être stockées dans Azure Key Vault ou dans un autre magasin de clés.

Cet article explique comment spécifier une clé fournie par le client sur une demande avec .NET.

Installer des packages de bibliothèque de client

Notes

Les exemples illustrés ici utilisent la version 12 de la bibliothèque de client du stockage Azure. La bibliothèque de client version 12 fait partie du SDK Azure. Pour plus d’informations sur le SDK Azure, consultez le dépôt du SDK Azure sur GitHub.

Pour installer le package du stockage d’objets blob, exécutez la commande suivante dans la console du gestionnaire de package NuGet :

Install-Package Azure.Storage.Blobs

Les exemples de cet article utilisent également la dernière version de la bibliothèque de client Azure Identity pour .NET afin de s’authentifier avec des informations d’identification Microsoft Entra. Pour installer le package, exécutez la commande suivante dans la console du gestionnaire de package NuGet :

Install-Package Azure.Identity

Pour savoir comment s’authentifier avec la bibliothèque de client Azure Identity, consultez Bibliothèque de client Azure Identity pour .NET.

Utilisation d’une clé fournie par le client pour écrire dans un objet blob

Dans l’exemple suivant est fournie une clé AES-256 lors du chargement d’un objet blob avec la bibliothèque de client v12 pour le Stockage Blob. Ici, c’est l’objet DefaultAzureCredential qui est utilisé pour autoriser la demande d’écriture auprès de Microsoft Entra ID, mais il est également possible de se servir à cet effet des informations d’identification de la clé partagée. Pour plus d’informations sur l’utilisation de la classe DefaultAzureCredential pour autoriser une identité managée à accéder à Stockage Azure, consultez Bibliothèque de client d’identité Azure pour .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;
    }
}

Étapes suivantes