Clés de chiffrement fournies par le client

Configuration

Cette page traite des clés de chiffrement fournies par le client. Pour en savoir plus sur les autres options de chiffrement, consultez la page Options de chiffrement des données.

Présentation

Pour ajouter une couche de protection en plus du chiffrement Cloud Storage standard, vous pouvez fournir votre propre clé de chiffrement AES-256 encodée en base64 standard. Il s'agit d'une clé de chiffrement fournie par le client. Si vous spécifiez une clé de ce type, Cloud Storage ne la stocke pas de manière permanente sur ses serveurs et ne la gère pas.

Vous devez la fournir pour chaque opération Cloud Storage, et elle est supprimée définitivement des serveurs Cloud Storage une fois l'opération terminée. Cloud Storage ne stocke qu'un hachage chiffré de la clé afin que les requêtes ultérieures puissent être validées par rapport à celui-ci. Vous ne pouvez pas la récupérer à partir de ce hachage, et le hachage ne peut pas être utilisé pour déchiffrer vos données.

Nous vous recommandons de sauvegarder chaque clé dans un emplacement sécurisé et de prendre des précautions pour vous assurer que vos clés ne sont pas partagées avec des parties non fiables. Si un fichier ou une machine contenant votre clé de chiffrement est compromis, vous devez immédiatement effectuer une rotation des clés pour tous les objets chiffrés avec cette clé.

Utilisation de la clé

Lorsque vous appliquez une clé de chiffrement gérée par le client à un objet, Cloud Storage utilise cette clé pour chiffrer :

  • les données de l'objet ;
  • la somme de contrôle CRC32C de l'objet ;
  • le hachage MD5 de l'objet.

Cloud Storage utilise le chiffrement au repos par défaut pour chiffrer les métadonnées restantes de l'objet, y compris son nom. Vous pouvez ainsi lire et mettre à jour les métadonnées générales, mais aussi lister, écraser et supprimer des objets, sans devoir disposer de la clé de chiffrement fournie par le client. Toutefois, pour effectuer ces opérations, vous devez disposer d'une autorisation suffisante.

Par exemple, si un objet est chiffré avec une clé de chiffrement fournie par le client, vous devez utiliser cette clé pour exécuter des opérations sur l'objet telles qu'un téléchargement ou un déplacement. Si vous tentez de lire les métadonnées de l'objet sans fournir la clé, vous recevrez des informations telles que le nom de l'objet et l'élément Content-Type, mais pas sa somme de contrôle CRC32C ni son hachage MD5. Si vous spécifiez la clé avec la requête relative aux métadonnées de l'objet, la somme de contrôle CRC32C et le hachage MD5 de l'objet sont fournis avec les métadonnées.

Comportement de réécriture

Si vous réécrivez un objet chiffré à l'aide d'une clé de chiffrement fournie par le client, sans fournir de clé pour chiffrer l'objet réécrit, les événements suivants se produisent :

Vérification HTTPS

Pour protéger vos données lorsqu'elles sont transférées via Internet pendant les opérations de lecture et d'écriture, utilisez le protocole Transport Layer Security (couramment appelé TLS ou HTTPS). Lorsque vous fournissez une clé de chiffrement, vous devez utiliser le protocole TLS. Si vous utilisez accidentellement votre clé de chiffrement sur une connexion non chiffrée (HTTP), un pirate informatique peut l'intercepter. Par conséquent, l'API Cloud Storage renvoie un message d'erreur vous avertissant que votre clé risque d'être piratée. Si cela se produit, vous devez immédiatement procéder à la rotation de vos clés.

Restrictions

Les restrictions ci-dessous s'appliquent lors de l'utilisation de clés de chiffrement fournies par le client.

  • Vous ne pouvez pas utiliser Google Cloud Console pour télécharger des objets chiffrés avec une clé de chiffrement fournie par le client. De même, lorsque vous utilisez Google Cloud Console pour importer un objet, vous ne pouvez pas le chiffrer avec une clé de chiffrement fournie par le client.

  • Actuellement, le service de transfert de stockage Cloud Storage et Cloud Dataflow n'acceptent pas les objets chiffrés à l'aide de clés fournies par le client.

  • Vous ne pouvez définir des clés de chiffrement fournies par le client que pour des objets spécifiques. Il est impossible de définir une clé de chiffrement fournie par le client par défaut pour un bucket.

  • Si vous effectuez une opération compose sur des objets chiffrés par des clés de chiffrement fournies par le client, les objets de composant doivent être chiffrés par la même clé. Celle-ci doit également être fournie avec la requête compose. L'objet composite obtenu est chiffré par la même clé.

  • Lors de la diffusion d'un objet chiffré par une clé de chiffrement fournie par le client, Cloud Storage ignore les métadonnées Cache-Control associée à l'objet et le diffuse avec le paramètre Cache-Control défini sur private, max-age=0.

Utiliser les clés de chiffrement avec les API REST

Lorsque vous utilisez une clé de chiffrement fournie par le client et travaillez directement avec l'API JSON ou XML, vous devez indiquer à la fois la clé AES-256 et un hachage SHA256 de la clé. La clé AES-256 et le hachage SHA256 doivent être stockés de manière sécurisée. Cloud Storage enregistre le hachage SHA256 de votre clé dans les métadonnées de l'objet, où vous pourrez le récupérer ultérieurement. Ce hachage ne peut pas être utilisé par Cloud Storage (ni par personne d'autre) pour déchiffrer vos données. Il est stocké pour permettre d'identifier de manière unique la clé AES-256 employée pour chiffrer un objet particulier.

En-têtes de requête

Incluez les en-têtes HTTP ci-dessous dans votre requête JSON ou XML :

Nom de l'en-tête Valeur Description
x-goog-encryption-algorithm chaîne Algorithme de chiffrement à utiliser. Vous devez employer la valeur AES256.
x-goog-encryption-key chaîne Chaîne au format Base64 RFC 4648 de la clé de chiffrement AES-256.
x-goog-encryption-key-sha256 chaîne Chaîne au format Base64 RFC 4648 du hachage SHA256 de la clé de chiffrement.

Si vous exécutez une opération rewrite avec l'API JSON, les en-têtes répertoriés ci-dessus sont utilisés pour chiffrer l'objet de destination. Les en-têtes ci-dessous servent à déchiffrer l'objet source.

Nom de l'en-tête Valeur Description
x-goog-copy-source-encryption-algorithm chaîne Algorithme de chiffrement à utiliser. Vous devez employer la valeur AES256.
x-goog-copy-source-encryption-key chaîne Chaîne au format Base64 RFC 4648 de la clé de chiffrement AES-256 de l'objet source.
x-goog-copy-source-encryption-key-sha256 chaîne Chaîne au format Base64 RFC 4648 du hachage SHA256 de la clé de chiffrement de l'objet source.

Réponse

JSON

Lorsque vous utilisez l'API JSON, les métadonnées d'une clé de chiffrement fournie par le client sont renvoyées dans le corps de la réponse, qui inclut les propriétés ci-dessous :

Nom de propriété Valeur Description
customerEncryption objet Informations relatives au mécanisme de chiffrement utilisé pour la requête.
customerEncryption.encryptionAlgorithm chaîne Algorithme de chiffrement employé. Contient toujours la valeur AES256.
customerEncryption.keySha256 chaîne Chaîne au format Base64 RFC 4648 du hachage SHA256 de la clé de chiffrement. Vous pouvez utiliser ce hachage SHA256 pour identifier de manière unique la clé de chiffrement AES-256 requise pour déchiffrer l'objet. Cette dernière doit être stockée de manière sécurisée.

XML

Lorsque vous utilisez l'API XML, la réponse inclut les en-têtes ci-dessous :

Nom de l'en-tête Valeur Description
x-goog-encryption-algorithm chaîne Algorithme de chiffrement employé. Contient toujours la valeur AES256.
x-goog-encryption-key-sha256 chaîne Chaîne au format Base64 RFC 4648 du hachage SHA256 de la clé de chiffrement. Vous pouvez utiliser ce hachage SHA256 pour identifier de manière unique la clé de chiffrement AES-256 requise pour déchiffrer l'objet. Cette dernière doit être stockée de manière sécurisée.

Vous recevez une erreur HTTP 400 dans les cas suivants :

  • Vous importez un objet à l'aide d'une clé de chiffrement fournie par le client et tentez d'exécuter une autre opération sur l'objet sans indiquer la clé. (Cette opération ne doit pas consister à demander ou mettre à jour une grande partie des métadonnées, ni à supprimer l'objet.)
  • Vous importez un objet à l'aide d'une clé de chiffrement fournie par le client et tentez d'exécuter une autre opération sur l'objet avec une clé incorrecte.
  • Vous importez un objet sans indiquer de clé de chiffrement fournie par le client et tentez d'exécuter une autre opération sur l'objet avec ce type de clé.
  • Vous spécifiez un algorithme de chiffrement, une clé ou un hachage SHA256 non valides.

Clés de chiffrement avec gcloud storage

La Google Cloud CLI permet d'utiliser des clés de chiffrement fournies par le client. Lorsque vous utilisez la gcloud CLI avec des clés de chiffrement fournies par le client, tenez compte des points suivants :

  • La clé spécifiée en tant que clé de chiffrement est utilisée dans les commandes à la fois comme clé de chiffrement et, si nécessaire, comme clé de déchiffrement.

  • Vous pouvez optionnellement spécifier jusqu'à 100 clés de déchiffrement, qui sont utilisées uniquement pour déchiffrer les objets.

  • Lors du déchiffrement, le hachage SHA256 de toute clé de chiffrement et de déchiffrement fournie est calculé. La clé correcte à utiliser pour un objet particulier est sélectionnée en recherchant le hachage SHA256 correspondant à celui stocké dans les métadonnées de l'objet.

  • Lors de l'ajout ou de la rotation d'une clé de chiffrement fournie par le client pour un objet existant, cet objet est réécrit dans le cadre de la requête. Cela est valable même pour la commande gcloud storage objects update.

  • Les commandes list pouvant renvoyer le hachage MD5 ou CRC32C d'objets chiffrés à l'aide d'une clé fournie par le client effectuent une requête GET de métadonnées supplémentaire pour chacun de ces objets. Ces requêtes supplémentaires peuvent ralentir considérablement l'opération répertoriant ces objets chiffrés par rapport à la même opération effectuée avec le chiffrement Cloud Storage standard.

  • Dans les situations où la clé de chiffrement peut changer, ou change effectivement lors d'une opération d'écriture ou de copie partiellement terminée, par exemple lorsque vous exécutez à nouveau une importation cp après une fermeture forcée ou l'expiration d'un délai du réseau, l'opération redémarre pour s'assurer que l'objet de destination est bien écrit avec la nouvelle clé.

Rotation des clés de chiffrement

Si un objet est chiffré à l'aide d'une clé de chiffrement fournie par le client, vous pouvez procéder à une rotation de la clé en réécrivant l'objet. Les réécritures sont compatibles avec l'API JSON, mais pas avec l'API XML. Pour obtenir des exemples de rotation de clé, consultez la section Effectuer une rotation de vos clés de chiffrement.

Étape suivante