Amazon S3에 업로드된 객체의 무결성을 확인하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 9월 23일

Amazon Simple Storage Service(Amazon S3) 버킷에 객체를 업로드하려고 합니다. 또한 업로드된 객체의 무결성을 확인하려고 합니다. 어떻게 해야 합니까? 

간략한 설명

다음 단계에 따라 MD5 체크섬 값을 사용하여 업로드된 객체의 무결성을 확인합니다.

참고: 개체 태그(ETag)는 객체 데이터의 MD5 다이제스트가 아닐 수 있는 객체의 해시입니다. ETag가 MD5 다이제스트인지 여부는 객체가 생성 및 암호화되는 방식에 따라 다릅니다. ETag가 항상 MD5 다이제스트인 것은 아니기 때문에 업로드된 파일의 무결성을 확인하는 데 항상 사용할 수 있는 것은 아닙니다.

1.    객체 MD5 체크섬 값(base64 인코딩)을 가져옵니다.

2.    업로드 중 객체의 무결성을 확인합니다.

​해결 방법

중요: 이 해결 방법은 Content-MD5 헤더를 사용하여 객체의 무결성을 확인합니다. 업로드가 AWS 서명 버전 4로 서명된 경우 대신 x-amz-content-sha256 헤더를 사용해야 합니다. 자세한 내용은 AWS CLI가 체크섬을 검증합니까?를 참조하십시오.

객체의 MD5 체크섬 값(base64 인코딩) 가져오기

Windows 운영 체제를 사용하는 경우 다음 단계를 따르십시오.

1.    File Checksum Integrity Verifier(FCIV) 유틸리티를 설치합니다.

2.    다음 명령을 사용하여 FCIV 유틸리티를 실행합니다.

fciv.exe c:\S3\testfile

3.    응답에는 다음과 유사한 체크섬 값의 16진수 형식이 포함됩니다.

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

4.    16진수 MD5 체크섬 값을 base64 인코딩 형식으로 변환합니다. base64 인코딩 형식을 가져오기 위한 한 가지 옵션은 FCIV 유틸리티를 사용한 데이터베이스 스토리지 형식을 참조하십시오.

Linux 운영 체제를 사용하는 경우 이 Open SSL 명령을 실행합니다.

openssl md5 -binary PATH/TO/FILE | base64

응답에는 다음과 유사한 MD5 체크섬 값(base64 인코딩)이 포함됩니다.

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

업로드 중 객체의 무결성 확인

Amazon S3에 업로드하는 동안 객체의 MD5 체크섬 값을 확인하려면 AWS 명령줄 인터페이스(AWS CLI) 명령 aws s3api put-object를 사용하고 -content-md5 옵션을 포함합니다. -content-md5의 값에 다음과 같이 계산한 MD5 체크섬 값(base64 인코딩)을 입력합니다.

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

선택적으로 MD5 체크섬 값을 메타데이터(사용자 지정 HTTP 헤더)로 저장하려는 경우 다음과 유사한 명령에서 -metadata 옵션을 추가할 수도 있습니다.

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

업로드 중에 Amazon S3가 계산하는 체크섬이 -content-md5에 입력한 값과 일치하지 않으면 Amazon S3가 객체를 저장하지 않습니다. 대신 응답으로 오류 메시지를 수신합니다. 자세한 내용은 AWS CLI가 체크섬을 검증합니까?를 참조하십시오.