Amazon Simple Storage Service(Amazon S3) 버킷에 객체를 업로드하고 싶습니다. 또한 업로드한 객체의 무결성을 확인하고 싶습니다.
해결 방법
범용 버킷의 경우 Content-MD5 헤더를 사용하여 업로드된 객체의 무결성을 검사합니다. 디렉터리 버킷의 경우 지원되는 체크섬 알고리즘을 사용하여 업로드된 객체의 무결성을 검사합니다.
참고: Amazon S3는 디렉터리 버킷에서 PutObject 작업을 사용할 때 Content-MD5를 사용한 무결성 검사를 지원하지 않습니다. 또한 Amazon S3는 벡터 또는 테이블 버킷에 대한 무결성 검사를 지원하지 않습니다.
범용 버킷
범용 버킷의 경우 객체의 Content-MD5 값을 계산합니다.
참고: Content-MD5 헤더를 사용하는 경우 Amazon S3는 제공된 Content-MD5 값을 기준으로 객체를 확인합니다. 값이 일치하지 않으면 오류가 발생합니다.
Windows 운영 체제(OS)
Windows OS를 사용하는 경우 Microsoft PowerShell 유틸리티의 Get-FileHash cmdlet을 사용하여 MD5 다이제스트를 계산할 수 있습니다.
-
다음 명령은 MD5 다이제스트를 가져옵니다.
Get-FileHash \path\to\file -algorithm MD5 | Format-List
참고: \path\to\file을 객체의 경로로 바꾸십시오.
참고: Get-FileHash cmdlet은 Microsoft PowerShell 유틸리티 버전 4.0 이상에서 사용할 수 있습니다.
다음은 출력 예시입니다.
Algorithm : MD5Hash : C9A5A6878D97B48CC965C1E41859F034
Path : \path\to\file
-
계산된 MD5Hash 값에 base64 인코딩을 적용하여 필요한 Content-MD5 값을 가져옵니다.
hashString ='C9A5A6878D97B48CC965C1E41859F034'$hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
ContentMD5 = [System.Convert]::ToBase64String($hashByteArray)
Echo ContentMD5
yaWmh42XtIzJZcHkGFnwNA==
이 예에서 Echo ContentMD5의 출력(yaWmh42XtIzJZcHkGFnwNA==)이 필요한 Content-MD5 값입니다.
Linux 운영 체제(OS)
Linux OS를 사용하는 경우 다음 OpenSSL 명령을 실행하여 파일의 Content-MD5 값을 가져옵니다.
openssl md5 -binary path/to/file | base64
참고: path/to/file을 객체의 경로로 바꾸십시오.
디렉터리 버킷
MD5 이외의 지원되는 체크섬 알고리즘을 사용하여 디렉터리 버킷에 업로드된 객체의 무결성을 확인합니다. 예를 들어 x-amz-checksum-sha256 헤더(SHA256)를 사용하여 업로드된 객체의 무결성을 확인하려면 다음 단계를 사용하십시오.
참고: x-amz-checksum-sha256 헤더를 사용하는 경우 Amazon S3는 제공된 x-amz-checksum-sha256 값을 기준으로 객체를 검사합니다. 값이 일치하지 않으면 오류가 발생합니다.
Windows OS
Windows OS를 사용하는 경우 Microsoft PowerShell 유틸리티의 Get-FileHash cmdlet을 사용하여 SHA256 다이제스트를 계산할 수 있습니다.
-
다음 명령은 SHA256 다이제스트를 가져옵니다.
Get-FileHash \path\to\file -algorithm SHA256 | Format-List
참고: \path\to\file을 객체의 경로로 바꾸십시오.
다음은 출력 예시입니다.
Algorithm : SHA256
Hash : E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855
Path : \path\to\file
-
계산된 SHA256 다이제스트에 base64 인코딩을 적용하여 필요한 SHA256 값을 가져옵니다.
hashString ='E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855'
hashByteArray = [byte[]] ($hashString -replace '..', '0x$&,' -split ',' -ne '')
ContentSHA256 = [System.Convert]::ToBase64String($hashByteArray)
Echo ContentSHA256
`47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=`
이 예에서 Echo ContentSHA256의 출력(47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=)이 필요한 SHA256 값입니다.
Linux OS
Linux OS를 사용하는 경우 다음 OpenSSL 명령을 실행하여 파일의 SHA256 값을 가져옵니다.
openssl sha256 -binary path/to/file | base64
참고: path/to/file을 객체의 경로로 바꾸십시오.
업로드한 객체의 무결성 확인
PutObject를 사용하여 Amazon S3에 객체를 업로드할 때 Content-MD5 값을 범용 버킷에 대한 요청 헤더로 전달하십시오.
디렉터리 버킷의 경우 x-amz-checksum-sha256 값과 SHA256으로 설정된 x-amz-checksum-algorithm 헤더를 요청 헤더로 전달합니다. Amazon S3는 제공된 Content-MD5/SHA256 값을 기준으로 객체를 확인합니다. 값이 일치하지 않으면 오류가 발생합니다. SHA256 요청 헤더를 Amazon S3 UploadPart API와 함께 사용할 수도 있습니다.
관련 정보
일반 요청 헤더
Amazon S3 오류 응답