Hachages et ETags : bonnes pratiques

Les utilisateurs Cloud Storage sont invités à valider les données qu'ils transfèrent vers/depuis leurs buckets à l'aide des sommes de contrôle CRC32c ou MD5. Vous trouverez dans cette section les bonnes pratiques à suivre pour ces opérations de validation.

Utiliser des hachages pour le contrôle d'intégrité

Lorsque les données sont transférées depuis ou vers le cloud, elles peuvent être corrompues pour de multiples raisons :

  • Liens réseau bruyants
  • Erreurs de mémoire sur les ordinateurs clients ou serveurs, ou sur les routeurs le long du chemin
  • Bugs logiciels (p.ex., dans une bibliothèque utilisée par les clients)

Pour se protéger contre la corruption des données, Cloud Storage est compatible avec deux types de hachages : CRC32C et MD5 (décrits ci-dessous). Google recommande aux clients d'utiliser le hachage CRC32C dans tous les cas, comme décrit dans la section "Validation" ci-après. Si vous préférez le hachage MD5, il est possible de l'utiliser, mais sachez que celui-ci n'est pas compatible avec les objets composites.

CRC32C

Tous les objets Cloud Storage comportent un hachage de type CRC32c. Le hachage CRC32C constitue un contrôle de redondance cyclique (CRC) 32 bits basé sur le polynôme de Castagnoli. Ce CRC est décrit par la spécification IETF pour SCTP. Les bibliothèques permettant de calculer un hachage CRC32c incluent CRC32C de Google et Boost pour C++, crcmod pour Python et digest-crc pour Ruby. Les utilisateurs de Java trouveront une implémentation de l'algorithme dans le projet Java GoogleCloudPlatform crc32c.

Le CRC32c encodé en base64 est classé par ordre d'octets en mode big-endian.

MD5

Cloud Storage accepte le hachage MD5 pour les objets non composites. Ce hachage ne s'applique qu'à un objet complet. Il ne peut donc pas être utilisé pour vérifier l'intégrité des téléchargements partiels en cas d'exécution d'une plage GET.

ETags

Auparavant, le hachage MD5 d'un objet était exprimé via l'en-tête ETag. Ce comportement est maintenu pour les objets non composites de l'API XML. Cependant, comme les objets composites ne sont pas compatibles avec les hachages MD5, les utilisateurs ne doivent émettre aucune hypothèse concernant ces ETags, si ce n'est qu'ils changent chaque fois que les données sous-jacentes sont modifiées, conformément à la spécification susnommée.

Validation

Une vérification de l'intégrité du téléchargement peut être effectuée en hachant les données téléchargées à la volée et en comparant les résultats aux hachages fournis par le serveur. Vous devez supprimer les données téléchargées comportant des valeurs de hachage incorrectes et appliquer une logique de répétition des tentatives pour éviter des boucles à l'infini potentiellement coûteuses.

Cloud Storage autorise la validation côté serveur pour les importations, mais la validation côté client est également une approche courante. Si votre application a déjà calculé le MD5 ou le CRC32c de l'objet avant de lancer l'importation, vous pouvez lui transmettre la requête d'importation. Cloud Storage ne créera l'objet que si le hachage que vous avez fourni correspond à la valeur calculée.

Les utilisateurs peuvent également choisir d'effectuer une validation côté client. Ils doivent alors envoyer une requête de métadonnées pour le nouvel objet, comparer la valeur de hachage indiquée et supprimer l'objet en cas de non-concordance. Pour éviter les situations de concurrence dans lesquelles des processus indépendants suppriment ou écrasent les données les uns les autres, nous vous recommandons également d'utiliser les générations d'objet et conditions préalables.

Dans le cas d'importations parallèles utilisant une composition d'objets, les utilisateurs doivent effectuer un contrôle d'intégrité pour chaque composant importé, puis utiliser les conditions préalables de composant avec leurs requêtes de composition pour se protéger d'une situation de concurrence. La composition d'objets n'offrant aucune validation MD5 côté serveur, les utilisateurs qui souhaitent effectuer un contrôle d'intégrité de bout en bout doivent appliquer la validation côté client au nouvel objet composite.

À la fin de chaque opération de copie, les commandes gsutil cp et rsync confirment que la somme de contrôle du fichier local correspond à celle de l'objet stocké dans Cloud Storage. Si ce n'est pas le cas, gsutil supprime la copie non valide et affiche un message d'avertissement. Ceci arrive très rarement. Vous pouvez retenter l'opération si cela se produit.

API XML

Dans l'API XML, les hachages MD5 et CRC32c encodés en base64 sont exposés et acceptés via l'en-tête x-goog-hash. Auparavant, les hachages MD5 étaient utilisés en tant qu'ETags d'objet, mais nous recommandons aux utilisateurs d'éviter cette pratique, car les objets composites utilisent des valeurs ETag opaques qui ne procurent aucune garantie, si ce n'est de changer lorsque l'objet est modifié.

La validation de l'importation côté serveur peut être effectuée en fournissant des hachages calculés localement via l'en-tête de requête x-goog-hash. De plus, le MD5 peut être fourni en utilisant l'en-tête Content-MD5 HTTP standard (reportez-vous à la spécification).

API JSON

Dans l'API JSON, les propriétés md5Hash et crc32c des ressources d'objets contiennent respectivement des hachages MD5 et CRC32c encodés en base64. La provision de l'une ou l'autre des propriétés de métadonnées est facultative. Si les propriétés ne sont pas fournies dans une insertion d'objet, Cloud Storage calcule les valeurs et les écrit dans les métadonnées de l'objet. Si l'une des propriétés est associée à une requête insert, la validation côté serveur est déclenchée pour le nouvel objet. Si, pour l'une des propriétés, Cloud Storage calcule une valeur qui ne correspond pas à la valeur fournie, l'objet n'est pas créé. Pour les importations avec reprise et en plusieurs parties, les propriétés md5Hash et crc32c fonctionnent de la même manière que pour l'insertion d'un objet unique.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.