요청에 서명하기 - Amazon S3 Glacier

이 페이지는 Vaults와 2012RESTAPI년의 원본을 사용하는 S3 Glacier 서비스의 기존 고객만 사용할 수 있습니다.

아카이브 스토리지 솔루션을 찾고 있다면 Amazon S3, S3 Glacier Instant Retrieval , S33 S3 Glacier Flexible Retrieval 및 S3 Glacier Deep Archive 의 S3 Glacier 스토리지 클래스를 사용하는 것이 좋습니다. Amazon S3 이러한 스토리지 옵션에 대한 자세한 내용은 Amazon S3 사용 설명서의 S3 Glacier 스토리지 클래스 S3 Glacier 스토리지 클래스를 사용하는 장기 데이터 스토리지를 참조하세요. Amazon S3 이러한 스토리지 클래스는 Amazon S3 를 사용하며API, 모든 리전에서 사용할 수 있고, Amazon S3 콘솔 내에서 관리할 수 있습니다. 스토리지 비용 분석, 스토리지 렌즈, 고급 선택적 암호화 기능 등과 같은 기능을 제공합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

요청에 서명하기

S3 Glacier는 사용자가 요청에 서명하여, 보낸 모든 요청을 인증하도록 요구합니다. 요청에 서명하려면 암호화 해시 함수를 이용해 디지털 서명을 계산해야 합니다. 암호화 해시는 입력을 근거로 하여 고유 해시 값을 반환하는 함수입니다. 해시 함수에 대한 입력에는 요청 텍스트와 보안 액세스 키가 포함됩니다. 해시 함수는 요청에 서명으로 포함하는 해시 값을 반환합니다. 서명은 요청에서 Authorization 헤더의 일부입니다.

S3 Glacier는 요청을 수신한 후, 사용자가 요청에 서명할 때 사용한 것과 동일한 해시 함수 및 입력을 사용하여 서명을 재계산합니다. 결과 서명이 요청 서명과 일치할 경우 S3 Glacier가 요청을 처리합니다. 그렇지 않으면 요청이 거부됩니다.

S3 Glacier는 AWS 서명 버전 4를 이용한 인증을 지원합니다. 서명을 계산하기 위한 프로세스는 다음 세 작업으로 나뉠 수 있습니다.

  • 작업 1: 정식 요청 생성

    HTTP요청을 표준 형식으로 재정렬하세요. 정규 형식을 사용해야 하는 이유는 S3 Glacier가 서명을 재계산하여 사용자가 전송한 서명과 비교할 때 동일한 정규 형식을 사용하기 때문입니다.

  • 작업 2: 서명할 문자열 생성

    암호화 해시 함수에 대한 입력 값 중 하나로 사용할 문자열을 만듭니다. 서명할 문자열이라는 문자열은 해시 알고리즘의 이름, 요청 날짜, 자격 증명 범위 문자열, 이전 작업에서 정규화된 요청을 연결한 것입니다. 자격 증명 범위 문자열 자체는 날짜, 지역 및 서비스 정보를 결합한 것입니다. AWS

  • 작업 3: 서명 생성

    서명할 문자열파생된 의 두 입력 문자열을 허용하는 암호화 해시 함수를 사용하여 요청에 대한 서명을 만듭니다. 파생된 키는 보안 액세스 키로 시작하여 자격 증명 범위 문자열을 사용하여 일련의 해시 기반 메시지 인증 코드 () 를 생성하여 계산됩니다. HMACs 참고로 이 서명 단계에서 사용되는 해시 함수는 데이터를 업로드하는 S3 Glacier에서 사용되는 트리-해시 알고리즘이 아닙니다. APIs

서명 계산 예시

다음 예시에서는 볼트 만들기(PUT 값)에 대해 서명을 생성하는 세부 과정을 안내합니다. 이 예시는 서명 계산 방법을 점검하기 위한 참조로 사용할 수 있습니다. 자세한 내용은 사용 설명서의 서명 AWS API 요청을 참조하십시오. IAM

이 예시에서는 다음과 같이 가정합니다.

  • 요청 타임스탬프는 Fri, 25 May 2012 00:24:53 GMT입니다.

  • 엔드포인트는 미국 동부(버지니아 북부) 리전인 us-east-1입니다.

일반 요청 구문 (JSON본문 포함) 은 다음과 같습니다.

PUT /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Fri, 25 May 2012 00:24:53 GMT Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

작업 1: 정식 요청 생성에서 계산되는 요청의 정식 양식은 다음과 같습니다.

PUT /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-date:20120525T002453Z x-amz-glacier-version:2012-06-01 host;x-amz-date;x-amz-glacier-version e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

정규 요청의 마지막 줄은 요청 본문의 해시입니다. 또한 정규 요청에서 비어 있는 세 번째 줄에 주의해야 합니다. 이에 대한 쿼리 파라미터가 없기 때문입니다API.

작업 2: 서명할 문자열 생성에서 서명할 문자열은 다음과 같습니다.

AWS4-HMAC-SHA256 20120525T002453Z 20120525/us-east-1/glacier/aws4_request 5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743

서명할 문자열의 첫째 줄은 알고리즘, 둘째 줄은 타임스탬프, 셋째 줄은 자격 증명 범위, 마지막 줄은 작업 1 정규 요청의 해시입니다. 자격 증명 범위에서 사용하는 서비스 이름은 glacier입니다.

작업 3: 서명 생성에서 파생된 키는 다음과 같이 표현할 수 있습니다.

derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20120525"),"us-east-1"),"glacier"),"aws4_request")

보안 액세스 키인 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY를 사용하는 경우, 계산된 서명은 다음과 같습니다.

3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

마지막 단계는 Authorization 헤더를 생성하는 것입니다. 데모용 액세스 키 &;에 대한 헤더는 다음과 같습니다(가독성을 높이기 위해 줄 바꿈을 추가함).AKIAIOSFODNN7EXAMPLE

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120525/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-date;x-amz-glacier-version, Signature=3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

스트리밍 작업을 위한 서명 계산

아카이브 업로드(POST archive)파트 업로드(PUT uploadID)는 서명과 함께 요청을 전송할 때 x-amz-content-sha256 헤더를 추가해야 하는 스트리밍 작업입니다. 스트리밍 작업의 서명 단계는 스트리밍 헤더를 추가하는 것만 제외하고 다른 작업의 서명 단계와 정확히 일치합니다.

스트리밍 헤더의 x-amz-content-sha256 계산은 업로드할 전체 콘텐츠 (페이로드) 의 SHA256 해시를 기반으로 합니다. 참고로 이 계산은 SHA256 트리 해시 () 와 다릅니다. 체크섬 계산 사소한 경우를 제외하고 페이로드 데이터의 SHA 256 해시 값은 페이로드 데이터의 SHA256 트리 해시와 다를 수 있습니다.

페이로드 데이터가 바이트 배열로 지정된 경우 다음 Java 코드 스니펫을 사용하여 해시를 계산할 수 있습니다. SHA256

public static byte[] computePayloadSHA256Hash2(byte[] payload) throws NoSuchAlgorithmException, IOException { BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(payload)); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] buffer = new byte[4096]; int bytesRead = -1; while ( (bytesRead = bis.read(buffer, 0, buffer.length)) != -1 ) { messageDigest.update(buffer, 0, bytesRead); } return messageDigest.digest(); }

마찬가지로 C #에서도 다음 코드 스니펫과 같이 페이로드 데이터의 SHA256 해시를 계산할 수 있습니다.

public static byte[] CalculateSHA256Hash(byte[] payload) { SHA256 sha256 = System.Security.Cryptography.SHA256.Create(); byte[] hash = sha256.ComputeHash(payload); return hash; }

스트리밍을 위한 서명 계산 예시 API

다음 예제는 S3 Glacier의 두 스트리밍 APIs 중 하나에 대한 아카이브 업로드(POST archive) 서명을 생성하는 세부 정보를 안내합니다. 이 예시에서는 다음과 같이 가정합니다.

  • 요청 타임스탬프는 Mon, 07 May 2012 00:00:00 GMT입니다.

  • 엔드포인트는 미국 동부(버지니아 북부) 리전인 us-east-1입니다.

  • 내용 페이로드는 "Welcome to S3 Glacier" 문자열입니다.

일반 요청 구문 (JSON본문 포함) 은 아래 예제에 나와 있습니다. 예제를 보면 x-amz-content-sha256 헤더가 포함되어 있습니다. 또한 x-amz-sha256-tree-hashx-amz-content-sha256의 값이 동일합니다. 하지만 크기가 1MB를 넘는 아카이브를 업로드할 때는 그렇지 않습니다.

POST /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Mon, 07 May 2012 00:00:00 GMT x-amz-archive-description: my archive x-amz-sha256-tree-hash: SHA256 tree hash x-amz-content-sha256: SHA256 payload hash Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

작업 1: 정식 요청 생성에서 계산되는 요청의 정식 형식은 아래와 같습니다. 예제를 보면 스트리밍 헤더인 x-amz-content-sha256에 값이 포함되어 있습니다. 즉, 먼저 페이로드를 읽고 SHA256 해시를 계산한 다음 서명을 계산해야 합니다.

POST /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-content-sha256:726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628 x-amz-date:20120507T000000Z x-amz-glacier-version:2012-06-01 host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version 726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628

남아있는 서명 계산은 서명 계산 예시에 간략하게 설명되어 있는 단계를 따릅니다. 보안 액세스 키인 Authorization과 액세스 키인 wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY을 사용하는 AKIAIOSFODNN7EXAMPLE 헤더는 아래와 같습니다(가독성을 위해 줄바꿈이 추가됨).

Authorization=AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120507/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version, Signature=b092397439375d59119072764a1e9a144677c43d9906fd98a5742c57a2855de6