후행 헤더에 대한 서명 계산(청크 업로드)(AWS 서명 버전 4)
Authorization 헤더를 사용하여 요청을 인증할 때 페이로드를 청크로 업로드할 수도 있습니다. 객체에 대한 데이터를 청크로 전송할 때 후행 헤더를 포함할 수도 있습니다. (자세한 내용은 Authorization 헤더에 대한 서명 계산: 페이로드를 여러 청크로 전송(청크 업로드)(AWS 서명 버전 4) 섹션을 참조하세요.) 이 섹션에서는 다중 청크 업로드의 마지막에 후행 헤더를 포함하려는 경우 수행해야 하는 단계를 설명합니다.
중요
후행 헤더를 포함하는 경우 초기 헤더에 다음을 전송해야 합니다.
-
x-amz-content-sha256을 후행 헤더가 포함될 것임을 나타내는 적절한 값으로 설정해야 합니다.x-amz-content-sha256에 허용되는 값을 보려면 요청 인증: Authorization 헤더 사용(AWS 서명 버전 4) 섹션을 참조하세요. -
x-amz-trailer를 후행 헤더에 포함하려는 콘텐츠를 나타내도록 설정해야 합니다.
후행 헤더는 청크가 업로드된 후에만 전송됩니다. 이전 청크는 페이로드가 0바이트인 최종 청크 전송을 포함하여 이전 섹션에 설명된 대로 정상적으로 전송되고 서명됩니다. 후행 헤더는 자체 청크로 포함되며 페이로드가 0바이트인 최종 청크 이후에 전송됩니다. 예를 들어 데이터가 100KB 청크로 끝나는 경우 다음을 전송합니다.
-
이전 데이터 청크
-
객체의 100KB 최종 청크
-
객체의 끝을 나타내는 0바이트 청크
-
후행 헤더 청크
예제: 서명 계산 확인
이 섹션의 예제는 코드의 서명 계산을 점검하기 위한 참조로 사용할 수 있습니다. 예제를 검토하기 전에 다음 사항에 유의하세요.
-
이러한 예제의 서명 계산은 다음 예제 보안 자격 증명을 사용합니다.
파라미터 값 AWSAccessKeyIdAKIAIOSFODNN7EXAMPLEAWSSecretAccessKeywJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY -
모든 예제는 요청 타임스탬프 20130524T000000Z(
Fri, 24 May 2013 00:00:00 GMT)를 사용합니다. -
모든 예제는
examplebucket을 버킷 이름으로 사용합니다. -
버킷은 미국 동부(버지니아 북부) 리전에 있는 것으로 가정하며, 자격 증명
Scope및Signing Key계산은us-east-1을 리전 지정자로 사용합니다. 자세한 내용은 Amazon Web Services 일반 참조의 리전 및 엔드포인트를 참조하십시오. -
경로 방식 또는 가상 호스팅 방식 요청을 사용할 수 있습니다. 다음 예제에서는 가상 호스팅 방식 요청을 사용합니다.
https://examplebucket.s3.amazonaws.com/photos/photo1.jpg자세한 내용은 Amazon Simple Storage Service 사용 설명서의 버킷의 가상 호스팅을 참조하세요.
다음 예제에서는 객체를 업로드하기 위한 PUT 요청을 전송합니다. 서명 계산은 다음을 가정합니다.
-
65KB 텍스트 파일을 업로드하고 있으며 파일 콘텐츠는 문자 'a'로 구성된 1자 문자열입니다.
-
청크 크기는 64KB입니다. 따라서 페이로드는 세 개의 청크, 즉 64KB 청크, 1KB 청크, 청크 데이터가 0바이트인 최종 청크로 업로드됩니다.
-
결과 객체의 키 이름은
chunkObject.txt입니다. -
x-amz-storage-class요청 헤더를 추가하여REDUCED_REDUNDANCY를 스토리지 클래스로 요청하고 있습니다. -
전송에는 CRC32C 체크섬 값이 후행 헤더로 포함됩니다.
이 API 작업에 대한 자세한 내용은 PutObject를 참조하세요. 전체 요청 구문은 다음과 같습니다.
PUT /examplebucket/chunkObject.txt HTTP/1.1 Host: s3.amazonaws.com x-amz-date: 20130524T000000Z x-amz-storage-class: REDUCED_REDUNDANCY Authorization:SignatureToBeCalculatedx-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER Content-Encoding: aws-chunked x-amz-decoded-content-length: 66560 x-amz-trailer: x-amz-checksum-crc32c Content-Length: 66946<Payload>
다음 단계에서는 서명 계산을 보여줍니다.
-
시드 서명 - 서명할 문자열 생성
-
CanonicalRequest
PUT /examplebucket/chunkObject.txt content-encoding:aws-chunked host:s3.amazonaws.com x-amz-content-sha256:STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER x-amz-date:20130524T000000Z x-amz-decoded-content-length:66560 x-amz-storage-class:REDUCED_REDUNDANCY x-amz-trailer:x-amz-checksum-crc32c content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class;x-amz-trailer STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER정식 요청에서 세 번째 줄은 요청에 쿼리 파라미터가 없기 때문에 비어 있습니다. 마지막 줄은 해시된 페이로드의 값으로 제공된 상수 문자열로,
x-amz-content-sha256 header의 값과 동일해야 합니다. -
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 44d48b8c2f70eae815a0198cc73d7a546a73a93359c070abbaa5e6c7de112559참고
서명할 문자열의 각 줄에 대한 자세한 내용은 시드 서명 계산을 설명하는 다이어그램을 참조하세요.
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
시드 서명
106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e -
Authorization 헤더
결과 Authorization 헤더는 다음과 같습니다.
AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-encoding;content-length;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class,Signature=106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e -
청크 1: (65536바이트, 문자 'a'의 경우 값 97)
-
서명할 청크 문자열:
AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 bf718b6f653bebc184e1479f1935b8da974d701b893afcf49e701f3e2f9f9c5a참고
서명할 문자열의 각 줄에 대한 자세한 내용은 서명할 문자열의 다양한 구성 요소를 보여주는 이전 주제(시드 서명 계산)의 다이어그램을 참조하세요. 예를 들어 마지막 세 줄은 다음으로 구성됩니다.
이전 서명hash("")hash(current-chunk-data)
-
청크 서명:
b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 -
전송된 청크 데이터:
10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 <65536-bytes>
-
-
청크 2: (1024바이트, 문자 'a'의 경우 값 97)
-
서명할 청크 문자열:
AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a -
청크 서명:
1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 -
전송된 청크 데이터:
400;chunk-signature=1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 <1024-bytes>
-
-
청크 3: (0바이트 데이터)
-
서명할 청크 문자열:
AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
청크 서명:
2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 -
전송된 청크 데이터:
0;chunk-signature=2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
-
-
청크 4: 후행 헤더
-
서명할 트레일러 청크 문자열:
AWS4-HMAC-SHA256-TRAILER 20130524T000000Z 20130524/us-east-1/s3/aws4_request 2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 1e376db7e1a34a8ef1c4bcee131a2d60a1cb62503747488624e10995f448d774참고
마지막 두 줄은
previous-signature(0바이트 데이터 청크 서명),hash(trailing-checksum-header-name:base64-encoded-trailing-checksum-value\n)입니다.해시는 공백 없이 다음과 같이 계산됩니다.
후행 체크섬 헤더 이름
콜론(
:)Base64로 인코딩된 후행 체크섬 값
줄 바꿈 문자(
\n).
이 예제에서는
crc32c해시 알고리즘, Base64로 인코딩된 체크섬 값sOO8/Q==를 사용하여 계산을 다음과 같이 나타낼 수 있습니다.hash('x-amz-checksum-crc32c:sOO8/Q==\n'). -
청크 서명:
d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435 -
전송된 청크 데이터:
x-amz-checksum-crc32c:sOO8/Q== x-amz-trailer-signature:d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
-