Protection de l'intégrité des données avec des checksums - AWS SDK pour Go v2

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Protection de l'intégrité des données avec des checksums

Amazon Simple Storage Service (Amazon S3) permet de spécifier une somme de contrôle lorsque vous chargez un objet. Lorsque vous spécifiez une somme de contrôle, elle est stockée avec l'objet et peut être validée lors du téléchargement de l'objet.

Les checksums fournissent une couche supplémentaire d'intégrité des données lorsque vous transférez des fichiers. Avec les checksums, vous pouvez vérifier la cohérence des données en confirmant que le fichier reçu correspond au fichier d'origine. Pour plus d'informations sur les checksums avec Amazon S3, consultez le guide de l'utilisateur d'Amazon Simple Storage Service, y compris les algorithmes pris en charge.

Vous avez la possibilité de choisir l'algorithme qui répond le mieux à vos besoins et de laisser le SDK calculer le checksum. Vous pouvez également fournir une valeur de somme de contrôle précalculée en utilisant l'un des algorithmes pris en charge.

Note

À partir de la version v1.74.1 du module Amazon S3, le SDK fournit des protections d'intégrité par défaut en calculant automatiquement une somme de CRC32 contrôle pour les téléchargements. Le SDK calcule cette somme de contrôle si vous ne fournissez pas de valeur de somme de contrôle précalculée ou si vous ne spécifiez pas d'algorithme que le SDK doit utiliser pour calculer une somme de contrôle.

Le SDK fournit également des paramètres globaux pour les protections de l'intégrité des données que vous pouvez définir en externe, que vous pouvez consulter dans le Guide de référence AWS SDKs et sur les outils.

Nous discutons des sommes de contrôle en deux phases de demande : le téléchargement d'un objet et le téléchargement d'un objet.

Charger un objet

Lorsque vous téléchargez un objet avec la putObject méthode et que vous fournissez un algorithme de somme de contrôle, le SDK calcule la somme de contrôle pour l'algorithme spécifié.

L'extrait de code suivant montre une demande de téléchargement d'un objet avec une CRC32 somme de contrôle. Lorsque le SDK envoie la demande, il calcule le CRC32 checksum et télécharge l'objet. Amazon S3 valide l'intégrité du contenu en calculant le checksum et en le comparant au checksum fourni par le SDK. Amazon S3 enregistre ensuite le checksum avec l'objet.

out, err := s3Client.PutObject(context.Background(), &s3.PutObjectInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), ChecksumAlgorithm: types.ChecksumAlgorithmCrc32, Body: strings.NewReader("Hello World"), })

Si vous ne fournissez pas d'algorithme de somme de contrôle avec la demande, le comportement de somme de contrôle varie en fonction de la version du SDK que vous utilisez, comme indiqué dans le tableau suivant.

Comportement de somme de contrôle lorsqu'aucun algorithme de somme de contrôle n'est fourni

Version du module Amazon S3 de AWS SDK pour Go Comportement de Checksum
Antérieur à la v1.74.1 Le SDK ne calcule pas automatiquement une somme de contrôle basée sur le CRC et ne la fournit pas dans la demande.
v1.74.1 ou version ultérieure

Le SDK utilise l'CRC32algorithme pour calculer le checksum et le fournit dans la demande. Amazon S3 valide l'intégrité du transfert en calculant sa propre somme de CRC32 contrôle et en la comparant à la somme de contrôle fournie par le SDK. Si les sommes de contrôle correspondent, la somme de contrôle est enregistrée avec l'objet.

Utiliser une valeur de somme de contrôle précalculée

Une valeur de somme de contrôle précalculée fournie avec la demande désactive le calcul automatique par le SDK et utilise la valeur fournie à la place.

L'exemple suivant montre une demande avec une somme de SHA256 contrôle précalculée.

out, err := s3Client.PutObject(context.Background(), &s3.PutObjectInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), ChecksumCRC32: aws.String("checksumvalue"), Body: strings.NewReader("Hello World"), })

Si Amazon S3 détermine que la valeur de la somme de contrôle est incorrecte pour l'algorithme spécifié, le service renvoie une réponse d'erreur.

Chargements partitionnés

Vous pouvez également utiliser des checksums pour les téléchargements partitionnés.

AWS SDK pour Go Il propose deux options pour utiliser les checksums lors de téléchargements partitionnés. La première option utilise le gestionnaire de transfert qui spécifie l'CRC32algorithme pour le téléchargement.

s3Client := s3.NewFromConfig(cfg) transferManager := manager.NewUploader(s3Client) out, err := transferManager.Upload(context.Background(), &s3.PutObjectInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), Body: large file to trigger multipart upload, ChecksumAlgorithm: types.ChecksumAlgorithmCrc32, })

Si vous ne fournissez pas d'algorithme de somme de contrôle lorsque vous utilisez le gestionnaire de transfert pour les téléchargements, le SDK calcule automatiquement la somme de contrôle en fonction de cet algorithme. CRC32 Le SDK effectue ce calcul pour toutes les versions du SDK.

La deuxième option utilise le client Amazon S3 pour effectuer le téléchargement partitionné. Si vous spécifiez une somme de contrôle avec cette approche, vous devez spécifier l'algorithme à utiliser lors du lancement du téléchargement. Vous devez également spécifier l'algorithme pour chaque demande d'article et fournir la somme de contrôle calculée pour chaque article après son chargement.

s3Client := s3.NewFromConfig(cfg) createMultipartUploadOutput, err := s3Client.CreateMultipartUpload(context.Background(), &s3.CreateMultipartUploadInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), ChecksumAlgorithm: types.ChecksumAlgorithmCrc32, }) if err != nil { log.Fatal("err create multipart upload ", err) } var partsBody []io.Reader // this is just an example parts content, you should load your target file in your code partNum := int32(1) var completedParts []types.CompletedPart for _, body := range partsBody { uploadPartOutput, err := s3Client.UploadPart(context.Background(), &s3.UploadPartInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), ChecksumAlgorithm: types.ChecksumAlgorithmCrc32, Body: body, PartNumber: aws.Int32(partNum), UploadId: createMultipartUploadOutput.UploadId, }) if err != nil { log.Fatal("err upload part ", err) } completedParts = append(completedParts, types.CompletedPart{ PartNumber: aws.Int32(partNum), ETag: uploadPartOutput.ETag, ChecksumCRC32: uploadPartOutput.ChecksumCRC32, }) partNum++ } completeMultipartUploadOutput, err := s3Client.CompleteMultipartUpload(context.Background(), &s3.CompleteMultipartUploadInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), UploadId: createMultipartUploadOutput.UploadId, MultipartUpload: &types.CompletedMultipartUpload{ Parts: completedParts, }, }) if err != nil { log.Fatal("err complete multipart upload ", err) }

Télécharger un objet

Lorsque vous utilisez GetObjectcette méthode pour télécharger un objet, le SDK valide automatiquement le checksum lorsque le ChecksumMode champ de GetObjectInput est défini sur. types.ChecksumModeEnabled

La demande contenue dans l'extrait suivant demande au SDK de valider la somme de contrôle dans la réponse en calculant la somme de contrôle et en comparant les valeurs.

out, err := s3Client.GetObject(context.Background(), &s3.GetObjectInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), ChecksumMode: types.ChecksumModeEnabled, })

Si l'objet n'a pas été chargé avec une somme de contrôle, aucune validation n'a lieu.