Cryptage des données Object Storage

Découvrez comment le service Object Storage crypte et crypte tous les objets à l'aide de la norme de cryptage avancée AES (Advanced Encryption Standard) 256 bits (AES-256) pour crypter les données d'objet sur le serveur.

Chaque objet est crypté à l'aide de sa propre clé de cryptage de données. Les clés de cryptage de données sont toujours cryptées avec une clé de cryptage maître affectée au bucket. Le cryptage est activé par défaut et ne peut pas être désactivé. Par défaut, Oracle gère la clé de cryptage maître.

En plus de ce cryptage par défaut, vous pouvez utiliser les stratégies suivantes pour crypter les données :
  • Utilisez le cryptage côté client pour crypter les objets avec leurs clés de cryptage avant de les stocker dans des buckets Object Storage. Il est possible d'utiliser l'API de compatibilité Amazon S3, ainsi que la prise en charge du cryptage d'objet côté client disponible dans le kit SDK AWS pour Java. Pour plus d'informations sur ce kit SDK, reportez-vous à API de compatibilité Amazon S3 .

  • Utilisez le cryptage côté serveur avec vos propres clés. Pour plus d'informations, reportez-vous à Utilisation de vos propres clés pour le cryptage côté serveur.

  • Affectez une clé de cryptage maître Oracle Cloud Infrastructure Vault que vous contrôlez et sur laquelle vous faites pivoter selon votre propre programmation. Pour plus d'informations, reportez-vous à Utilisation de vos propres clés dans Vault pour le cryptage côté serveur.

Utilisation de vos propres clés pour le cryptage côté serveur

Cette rubrique fournit des détails sur l'implémentation et l'utilisation du cryptage côté serveur avec des clés fournies par le client (SSE-C).

A propos de SSE-C

A l'aide des en-têtes d'API facultatifs, vous pouvez fournir votre propre clé de cryptage AES 256 bits qui est utilisée pour crypter et décrypter les objets téléchargés vers le serveur et téléchargés en local à partir d'Object Storage.

  • Lorsque vous téléchargez un objet vers le serveur, vous fournissez la clé de cryptage. Object Storage crypte l'objet à l'aide de cette clé et la supprime immédiatement.
  • Lorsque vous souhaitez télécharger un objet en local, vous fournissez la même clé que celle utilisée pour crypter l'objet, puis Object Storage le décrypte et vous le renvoie.

Vous gérez les clés de cryptage et Object Storage gère le cryptage ainsi que le décryptage.

Important

Object Storage ne stocke pas vos clés de cryptage. Vous êtes responsable du suivi de la clé associée à chaque objet et de sa rotation si nécessaire. Si vous perdez votre clé de cryptage, vous ne pouvez pas extraire votre objet.

Portée et contraintes

Familiarisez-vous avec la portée et les contraintes suivantes concernant SSE-C :

  • Une clé SSE-C ne peut pas être associée à un bucket et peut uniquement être utilisée pour crypter des objets individuels.
  • Vous pouvez crypter des objets avec votre propre clé de cryptage à l'aide de demandes pré-authentifiées. Pour extraire un objet crypté SSE-C à l'aide d'une demande pré-authentifiée, vous devez indiquer votre clé de cryptage.
  • Pour supprimer ou renommer un objet crypté SSE-C, vous n'avez pas besoin d'indiquer votre clé de cryptage.
  • Vous avez la possibilité d'indiquer uniquement kmsKeyId ou sseCustomerKey dans la charge utile de la demande ReencryptObject, mais pas les deux. Si la charge utile de la demande est vide, l'objet est crypté à l'aide de la clé de cryptage affectée au bucket. Le mécanisme de cryptage de bucket peut être une clé de cryptage maître gérée par Oracle ou le service Vault.
  • Vous pouvez uniquement utiliser les API Object Storage et l'interface de ligne de commande pour fournir des clés SSE-C. Vous ne pouvez pas utiliser la console pour télécharger vers le serveur ou extraire des objets à l'aide d'une clé fournie par le client.
  • L'API de compatibilité Amazon S3 prend également en charge SSE-C.

Utilisation de l'API REST pour SSE-C

Si vous souhaitez utiliser vos propres clés pour le cryptage côté serveur, indiquez les trois en-têtes de demande suivants avec les informations de clé de cryptage :

En-têtes Description API prises en charge
opc-sse-customer-algorithm Indique "AES256" en tant qu'algorithme de cryptage. CopyObject

GetObject

HeadObject

PutObject

CreateMultipartUpload

UploadPart

opc-sse-customer-key Indique la clé de cryptage 256 bits encodée en base64 à utiliser pour crypter ou décrypter les données.
opc-sse-customer-key-sha256 Indique le hachage SHA256 encodé en base64 de la clé de cryptage.

Pour CopyObject :

Si l'objet source est crypté avec une clé SSE-C, vous devez également indiquer les trois en-têtes suivants afin qu'Object Storage puisse décrypter l'objet.

En-têtes Description API prises en charge
opc-source-sse-customer-algorithm Indique "AES256" comme algorithme de cryptage à utiliser pour décrypter l'objet source. CopyObject
opc-source-sse-customer-key Indique la clé de cryptage 256 bits encodée en base64 à utiliser pour décrypter l'objet source.
opc-source-sse-customer-key-sha256 Indique le hachage SHA256 encodé en base64 de la clé de cryptage utilisée pour décrypter l'objet source.

Utilisation de l'interface de ligne de commande pour SSE-C

Vous pouvez également utiliser vos propres clés de cryptage pour crypter les objets à l'aide de l'interface de ligne de commande.

Vous pouvez fournir votre propre clé de cryptage à l'aide du paramètre facultatif --encryption-key-file filename pour les commandes suivantes :

  • oci os object put
  • oci os object get
  • oci os object head
  • oci os object resume-put
  • oci os object bulk-upload
  • oci os object bulk-download
  • oci os object copy
  • oci os object reencrypt

filename pointe vers un fichier contenant la chaîne codée base64 de la clé de cryptage AES-256. Aucun autre paramètre n'est requis. Object Storage décode la clé pour calculer le hachage SHA256 de la clé de cryptage.

Si l'objet source est crypté avec une clé SSE-C, vous devez également indiquer le paramètre facultatif --source-encryption-key-file filename pour les commandes suivantes :

  • oci os object copy
  • oci os object reencrypt

filename pointe vers un fichier contenant la chaîne encodée base64 de la clé de cryptage source AES-256. Aucun autre paramètre n'est requis. Object Storage décode la clé pour calculer le hachage SHA256 de la clé de cryptage source.

Pour plus d'informations sur l'utilisation de l'interface de ligne de commande, reportez-vous à Interface de ligne de commande (CLI). Afin d'obtenir la liste complète des indicateurs et des options disponibles pour les commandes de l'interface de ligne de commande, reportez-vous à Référence de ligne de commande.

Utilisation de vos propres clés dans Vault pour le cryptage côté serveur

Cette rubrique fournit des détails sur l'implémentation du cryptage côté serveur à l'aide de vos propres clés dans Vault.

Le service Oracle Cloud Infrastructure Object Storage crypte vos données et métadonnées (paires clé-valeur fournies par le client) à l'aide de clés de cryptage de données générées de façon aléatoire. Object Storage vous permet d'indiquer votre propre clé de cryptage maître gérée par le service Vault pour les buckets (reportez-vous à Utilisation de la console) et les objets individuels. Vous pouvez indiquer la clé de cryptage maître à utiliser pour un objet donné sans avoir à gérer vos propres clés.

Vous devez disposer des droits d'accès requis dans les stratégies IAM pour pouvoir indiquer votre propre clé de cryptage maître. Reportez-vous à Stratégie IAM requise et à Autoriser un groupe d'utilisateurs à déléguer l'utilisation des clés dans un compartiment.

Utilisation de l'interface de ligne de commande pour SSE avec vos clés dans Vault

Vous pouvez utiliser vos propres clés de cryptage dans Vault pour crypter des objets à l'aide de l'interface de ligne de commande.

Vous pouvez indiquer votre propre clé de cryptage à l'aide du paramètre facultatif --opc-sse-kms-key-id <id_clé_cible> pour les commandes suivantes :

  • oci os object put
  • oci os object copy

<target_key_id> est l'OCID de la clé existante dans OCI Vault à utiliser pour crypter l'objet.

Exemple de téléchargement d'un objet vers le bucket à l'aide d'une clé dans Vault :

oci os object put -bn "MyKeyBucket" --name "MyObjectName" --file "InputFile" --opc-sse-kms-key-id "ocid1.key.region1.sea..exampleuniqueID"

Uploading object  [####################################]  100%
{
  "etag": "cadb9f8a-3292-45e6-a1e8-f075699fb619",
  "last-modified": "Tue, 13 Jul 2021 05:52:47 GMT",
  "opc-content-md5": "9KJsgOK/X5C1sARb2tkhVA=="
}

Exemple d'exécution d'un téléchargement multipart à l'aide d'une clé dans Vault :

oci os object put --namespace MyNamespace --bucket-name MyBucket --file ~/path/to/file --name MyObject --parallel-upload-count 10 --part-size 500
Upload ID: 277ffff5-e1b5-e81d-5f81-c374a8f33998 --opc-sse-kms-key-id "ocid1.key.region1.sea..exampleuniqueID"
Split file into 10 parts for upload.
Uploading object ################################### 100%
{ "etag": "861c8341-74d8-4142-8da4-28e1ce7783ba", "last-modified": "Wed, 25 Sep 2019 19:59:15 GMT", "opc-multipart-md5": "9Qn1eyou2yMiyOO9Bc7o1A==-12" } 

Exemple de copie d'un objet à l'aide d'une clé dans Vault :

oci os object put --namespace MyNamespace --bucket-name MyBucket --file ~/path/to/file --name MyObject --parallel-upload-count 10 --part-size 500
Upload ID: 277ffff5-e1b5-e81d-5f81-c374a8f33998 --opc-sse-kms-key-id "ocid1.key.region1.sea..exampleuniqueID"
Split file into 10 parts for upload.
Uploading object ################################### 100%
{ "etag": "861c8341-74d8-4142-8da4-28e1ce7783ba", "last-modified": "Wed, 25 Sep 2019 19:59:15 GMT", "opc-multipart-md5": "9Qn1eyou2yMiyOO9Bc7o1A==-12" } 
Remarque

Les exemples de cette section utilisent la syntaxe complète pour les paramètres, par exemple --namespace et --bucket-name. Dans certains cas, des termes de paramètre raccourcis peuvent être utilisés à la place des termes de paramètre complets, par exemple -ns pour --namespace et -bn pour --bucket-name. L'instruction en ligne --help utilisée pour une commande particulière dans l'interface de ligne de commande affiche les paramètres raccourcis que vous pouvez utiliser.

Pour plus d'informations sur l'utilisation de l'interface de ligne de commande, reportez-vous à Interface de ligne de commande (CLI). Afin d'obtenir la liste complète des indicateurs et des options disponibles pour les commandes de l'interface de ligne de commande, reportez-vous à Référence de ligne de commande.

Utilisation de l'API REST pour SSE avec des clés dans Vault

Si vous voulez utiliser vos propres clés dans Vault pour le cryptage côté serveur, indiquez l'en-tête de demande suivant avec l'OCID de la clé dans Vault :

En-têtes Description API prises en charge
opc-sse-kms-key-id Permet d'indiquer l'OCID de la clé existante dans Vault à utiliser pour crypter l'objet.

PutObject

CopyObject

CreateMultipartUpload

UploadPart

Pour plus d'informations sur l'utilisation de l'API et la signature des demandes, reportez-vous à la documentation relative à l'API REST et à Informations d'identification de sécurité. Pour plus d'informations sur les kits SDK, reportez-vous à Kits SDK et interface de ligne de commande.

Recryptage d'un bucket

Si vous avez effectué une rotation sur une clé de cryptage maître depuis son affectation à un bucket, vous pouvez avoir besoin de recrypter ce bucket. Tant que vous n'avez pas explicitement recrypté un bucket, la version de clé associée à ce dernier lors de l'insertion d'un objet dans le bucket continue à décrypter toutes les clés de cryptage des données. Pour crypter et décrypter toutes les clés de cryptage des données avec la même version la plus récente de la clé de cryptage maître affectée, recryptez le bucket.

Pour savoir comment effectuer cette tâche à l'aide de la console, reportez-vous à Procédure de recryptage d'un bucket avec des clés de cryptage de données à l'aide de la console.

Pour savoir comment effectuer cette tâche à l'aide de l'interface de ligne de commande, reportez-vous à Procédure de recryptage d'un bucket avec des clés de cryptage de données à l'aide de l'interface de ligne de commande.

Recryptage d'un objet

Pour crypter et décrypter les clés de cryptage des données d'un objet avec une autre clé de cryptage maître, vous pouvez recrypter l'objet. Lors du recryptage d'un objet, vous pouvez choisir une clé différente de celle affectée au bucket ou la version la plus récente de cette clé. Tant que vous n'avez pas explicitement recrypté un objet, la version de clé associée au bucket (lors de l'insertion de l'objet dans le bucket) continue à décrypter toutes les clés de cryptage des données de l'objet.

Vous pouvez recrypter les clés de cryptage des données d'un objet avec une clé gérée par Oracle, une clé que vous avez créée et que vous contrôlez via un coffre que vous gérez, ou une clé de cryptage fournie par le client (SSE-C).

Remarque

Si vous utilisez le cryptage côté serveur avec les clés fournies par le client (SSE-C), vous devez utiliser l'interface de ligne de commande pour fournir la clé SSE-C au cours du processus de cryptage ou de recryptage. A l'aide de l'interface de ligne de commande, vous pouvez recrypter un objet avec une clé SSE-C différente, une clé gérée par Oracle ou une clé que vous gérez via le service Vault. Dans la console, vous pouvez uniquement recrypter un objet pour qu'il utilise la dernière version de la clé gérée par Oracle et affectée au bucket, ou la dernière version d'une clé Vault. Le fait que la version de clé choisie soit celle affectée au bucket ou non n'a pas d'importance.

Pour savoir comment effectuer cette tâche à l'aide de la console, reportez-vous à Procédure de recryptage d'un objet à l'aide de la console.

Pour savoir comment effectuer cette tâche à l'aide de l'interface de ligne de commande, reportez-vous à Procédure de recryptage d'un objet à l'aide de l'interface de ligne de commande.