기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
체크섬을 통한 데이터 무결성 보호
Amazon Simple Storage Service(S3)는 객체를 업로드할 때 체크섬을 지정하는 기능을 제공합니다. 체크섬을 지정하면 객체와 함께 저장되며 객체를 다운로드할 때 유효성을 검사할 수 있습니다.
체크섬은 파일을 전송할 때 데이터 무결성을 한층 더 강화합니다. 체크섬을 사용하면 수신된 파일이 원본 파일과 일치하는지 확인하여 데이터 일관성을 확인할 수 있습니다. Amazon S3의 체크섬에 대한 자세한 내용은 지원되는 알고리즘을 포함한 Amazon Simple Storage Service 사용 설명서를 참조하세요. https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#using-additional-checksums
필요에 가장 적합한 알고리즘을 유연하게 선택하고 SDK가 체크섬을 계산하도록 할 수 있습니다. 또는 지원되는 알고리즘 중 하나를 사용하여 사전 계산된 체크섬 값을 제공할 수 있습니다.
참고
Amazon S3 모듈의 버전 v1.74.1CRC32
체크섬을 자동으로 계산하여 기본 무결성 보호를 제공합니다. 사전 계산된 체크섬 값을 제공하지 않거나 SDK가 체크섬을 계산하는 데 사용해야 하는 알고리즘을 지정하지 않은 경우 SDK는이 체크섬을 계산합니다.
또한 SDK는 외부에서 설정할 수 있는 데이터 무결성 보호에 대한 전역 설정을 제공하며, SDK AWS SDKs 및 도구 참조 안내서에서 확인할 수 있습니다.
체크섬은 객체 업로드와 객체 다운로드라는 두 가지 요청 단계로 설명합니다.
객체 업로드
putObject
메서드를 사용하여 객체를 업로드하고 체크섬 알고리즘을 제공하면 SDK는 지정된 알고리즘의 체크섬을 계산합니다.
다음 코드 조각은 CRC32
체크섬이 있는 객체를 업로드하라는 요청을 보여줍니다. SDK는 요청을 전송할 때 CRC32
체크섬을 계산하고 객체를 업로드합니다. Amazon S3는 체크섬을 계산하고 SDK에서 제공하는 체크섬과 비교하여 콘텐츠의 무결성을 검증합니다. 그런 다음 Amazon S3는 객체와 함께 체크섬을 저장합니다.
out, err := s3Client.PutObject(context.Background(), &s3.PutObjectInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), ChecksumAlgorithm: types.ChecksumAlgorithmCrc32, Body: strings.NewReader("Hello World"), })
요청에 체크섬 알고리즘을 제공하지 않는 경우 체크섬 동작은 다음 표와 같이 사용하는 SDK 버전에 따라 달라집니다.
체크섬 알고리즘이 제공되지 않은 경우 체크섬 동작
의 Amazon S3 모듈 버전 AWS SDK for Go | 체크섬 동작 |
---|---|
v1.74.1 이전 | SDK는 CRC 기반 체크섬을 자동으로 계산하여 요청에 제공하지 않습니다. |
v1.74.1 이상 |
SDK는 |
미리 계산된 체크섬 값 사용
요청과 함께 제공되는 사전 계산된 체크섬 값은 SDK의 자동 계산을 비활성화하고 제공된 값을 대신 사용합니다.
다음 예제는 사전 계산된 SHA256 체크섬이 있는 요청을 보여줍니다.
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"), })
Amazon S3에서 체크섬 값이 지정된 알고리즘에 대해 올바르지 않다고 판단하면 서비스는 오류 응답을 반환합니다.
멀티파트 업로드
멀티파트 업로드에 체크섬을 사용할 수도 있습니다.
는 멀티파트 업로드와 함께 체크섬을 사용할 수 있는 두 가지 옵션을 AWS SDK for Go 제공합니다. 첫 번째 옵션은 업로드 알고리즘을 지정하는 전송 관리자CRC32
를 사용합니다.
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, })
업로드에 전송 관리자를 사용할 때 체크섬 알고리즘을 제공하지 않으면 SDK는 CRC32
알고리즘을 기반으로 자동으로 계산 및 체크섬을 수행합니다. SDK는 SDK의 모든 버전에 대해이 계산을 수행합니다.
두 번째 옵션은 Amazon S3
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) }
객체 다운로드
GetObjectChecksumMode
필드가 로 설정되면 SDKGetObjectInput
가 체크섬을 자동으로 검증합니다types.ChecksumModeEnabled
.
다음 스니펫의 요청은 체크섬을 계산하고 값을 비교하여 응답의 체크섬을 검증하도록 SDK에 지시합니다.
out, err := s3Client.GetObject(context.Background(), &s3.GetObjectInput{ Bucket: aws.String("bucket"), Key: aws.String("key"), ChecksumMode: types.ChecksumModeEnabled, })
체크섬과 함께 객체를 업로드하지 않은 경우 검증이 수행되지 않습니다.