Comment puis-je vérifier l'intégrité d'un objet chargé sur Amazon S3 ?

Date de la dernière mise à jour : 23/09/2019

Je souhaite charger un objet dans un compartiment Amazon Simple Storage Service (Amazon S3). Je souhaite aussi vérifier l'intégrité de l'objet chargé. Comment procéder ? 

Brève description

Suivez les étapes suivantes pour vérifier l'intégrité de l'objet chargé à l'aide de la valeur du total de contrôle MD5 :

Remarque : la balise d'entité (ETag) est un hachage de l'objet qui peut ne pas être un hachage MD5 des données de l'objet. L'ETag peut être un hachage MD5 ou non selon la façon dont l'objet a été créé et chiffré. ETag n'étant pas toujours un hachage MD5, il ne peut pas toujours être utilisé pour vérifier l'intégrité des fichiers chargés.

1.    Obtenez la valeur du total de contrôle MD5 codé en base64 de l'objet.

2.    Vérifiez l'intégrité de l'objet pendant le chargement.

Résolution

Important : cette résolution vérifie l'intégrité des objets à l'aide de l'en-tête Content-MD5. Si votre chargement est signé avec AWS Signature Version 4, vous devez plutôt utiliser l'en-tête x-amz-content-sha256. Pour plus d'informations, consultez L'interface de ligne de commande AWS valide-t-elle les totaux de contrôle ?

Obtenir la valeur du total de contrôle MD5 codé en base64 de l'objet

Si vous utilisez un système d'exploitation Windows, procédez comme suit :

1.    Installez l'utilitaire « File Checksum Integrity Verifier (FCIV) ».

2.    Exécutez l'utilitaire FCIV avec la commande suivante :

fciv.exe c:\S3\testfile

3.    La réponse contient le format hexadécimal de la valeur du total de contrôle, similaire à ce qui suit :

fciv C:\Windows\explorer.exe
                //
                // File Checksum Integrity Verifier version 2.05.
                //
                example111aaa222bbb33cc44dd5e6f7 c:\\windows\\explorer.exe

4.    Convertissez la valeur du total de contrôle MD5 hexadécimal en son format codé en base64. Pour obtenir le format codé en base64, consultez « Format de stockage de base de données » à l'aide de l'utilitaire FCIV.

Si vous utilisez un système d'exploitation Linux, exécutez cette commande Open SSL :

openssl md5 -binary PATH/TO/FILE | base64

La réponse contient la valeur du total de contrôle MD5 codé en base64, similaire à ce qui suit :

user@example:/home$ openssl md5 -binary /bin/bash | base64
                examplemd5value1234567==

Vérifier l'intégrité de l'objet pendant le chargement

Pour vérifier la valeur du total de contrôle MD5 de l'objet lors de son chargement sur Amazon S3, utilisez la commandeaws s3api put-object de l'interface de ligne de commande (AWS CLI) et incluez l'option --content-md5. Pour la valeur de --content-md5, saisissez la valeur du total de contrôle MD5 codé en base64 que vous avez calculée, comme suit :

aws s3api put-object --bucket awsexamplebucket --key awsexampleobject.txt --body awsexampleobjectpath --content-md5 examplemd5value1234567==

Si vous souhaitez stocker la valeur du total de contrôle MD5 en tant que métadonnées (en-tête HTTP personnalisé), vous pouvez également ajouter l'option --metadata dans la commande. Procédez comme suit :

aws s3api put-object --bucket awsexamplebucket --key awsexampleobject.txt --body awsexampleobjectpath --content-md5 examplemd5value1234567== --metadata md5checksum=examplemd5value1234567==

Amazon S3 ne stocke pas l'objet si le total de contrôle calculé par Amazon S3 pendant le chargement ne correspond pas à la valeur que vous avez saisie pour --content-md5. Vous recevez plutôt un message d'erreur en réponse. Pour plus d'informations, consultez L'interface de ligne de commande AWS valide-t-elle les totaux de contrôle ?