서명 버전 4를 사용하여 AWS 요청에 서명 - AWS 일반 참조

서명 버전 4를 사용하여 AWS 요청에 서명

이 단원에서는 서명을 생성하여 AWS에 대한 HTTP 요청에 추가하는 방법을 설명합니다.


        서명 버전 4 프로세스

서명 단계 요약

서명된 요청을 생성하려면 다음을 완료하십시오.

  • 작업 1: 서명 버전 4에 대한 표준 요청 생성

    요청 내용(호스트, 작업, 헤더 등)을 표준(표준) 형식으로 정렬합니다. 표준 요청은 서명할 문자열을 생성하는 데 사용되는 입력 중 하나입니다.

  • 작업 2: 서명 버전 4에 서명할 문자열 생성

    표준 요청과 추가 정보(예: 알고리즘, 요청 날짜, 자격 증명 범위, 표준 요청의 다이제스트(해시))를 사용하여 서명할 문자열을 생성합니다.

  • 작업 3: AWS 서명 버전 4에 대한 서명 계산

    AWS 보안 액세스 키를 초기 해시 작업에 대한 키로 사용하여 요청 날짜, 리전 및 서비스에 대한 키가 추가된 일련의 해시 작업(HMAC 작업)을 수행하여 서명 키를 추출합니다. 서명 키를 만든 후 서명할 문자열에 대해 키가 추가된 해시 작업을 수행하여 서명을 계산합니다. 파생된 서명 키를 이 작업에 대한 해시 키로 사용합니다.

  • 작업 4: HTTP 요청에 서명을 추가합니다.

    서명을 계산한 이후에 HTTP 헤더 또는 요청의 쿼리 문자열에 서명을 추가합니다.

중요

AWS SDK에서 서명 계산 프로세스를 자동으로 처리하므로 서명 프로세스를 수동으로 완료할 필요가 없습니다. 자세한 내용은 Amazon Web Services용 도구를 참조하십시오.

추가 리소스

다음 리소스에서는 서명 프로세스의 다양한 측면을 보여줍니다.

요청에 추가된 서명

다음 예에서는 클라이언트가 AWS에 보내는 HTTPS 요청을 서명 정보 없이 보여줍니다.

GET https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08 HTTP/1.1 Content-Type: application/x-www-form-urlencoded; charset=utf-8 Host: iam.amazonaws.com X-Amz-Date: 20150830T123600Z

서명 작업을 완료한 후 요청에 인증 정보를 추가합니다. 다음과 같은 두 가지 방법으로 인증 정보를 추가할 수 있습니다.

Authorization 헤더

Authorization 헤더를 사용하여 요청에 인증 정보를 추가할 수 있습니다. HTTP 헤더 이름은 Authorization이지만 실제로 서명 정보는 인증에서 요청을 보낸 사람을 설정하는 데 사용됩니다.

Authorization 헤더에 포함되는 정보는 다음과 같습니다.

  • 서명에 사용되는 알고리즘(AWS4-HMAC-SHA256)

  • 자격 증명 범위(액세스 키 ID 포함)

  • 서명된 헤더의 목록

  • 계산된 서명입니다. 서명은 요청 정보를 기반으로 하며, AWS 보안 액세스 키를 사용하여 서명을 생성합니다. 서명은 AWS에 사용자의 ID를 확인합니다.

다음 예에서는 서명 정보를 생성하여 Authorization 헤더의 요청에 추가한 이후에 이전 요청이 어떻게 표시되는지를 보여줍니다.

GET https://iam.amazonaws.com/?Action=ListUsers&Version=2010-05-08 HTTP/1.1 Authorization: AWS4-HMAC-SHA256 Credential=AKIDEXAMPLE/20150830/us-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7 content-type: application/x-www-form-urlencoded; charset=utf-8 host: iam.amazonaws.com x-amz-date: 20150830T123600Z

쿼리 문자열

HTTP 요청 헤더를 사용하여 인증 정보를 추가하는 대신 쿼리 문자열에 인증 정보를 포함할 수 있습니다. 쿼리 문자열에는 작업에 대한 이름 및 파라미터, 날짜, 인증 정보를 비롯하여 요청의 일부인 모든 정보가 포함되어 있습니다.

다음 예에서는 쿼리 문자열에서 작업 및 인증 정보를 사용하여 GET 요청을 구성하는 방법을 보여줍니다.

GET https://iam.amazonaws.com?Action=ListUsers&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIDEXAMPLE%2F20150830%2Fus-east-1%2Fiam%2Faws4_request&X-Amz-Date=20150830T123600Z&X-Amz-Expires=60&X-Amz-SignedHeaders=content-type%3Bhost&X-Amz-Signature=37ac2f4fde00b0ac9bd9eadeb459b1bbee224158d66e7ae5fcadb70b2d181d02 HTTP/1.1 content-type: application/x-www-form-urlencoded; charset=utf-8 host: iam.amazonaws.com

쿼리 API의 GET 및 POST 요청

많은 AWS 서비스에서 지원하는 쿼리 API를 사용하면 HTTP GET 또는 POST를 통해 요청할 수 있습니다. 쿼리 API에서는 상태를 변경하는 요청을 하는 경우에도 GET을 사용할 수 있습니다. 즉, 쿼리 API는 본질적으로 RESTful이 아닙니다. GET 요청은 쿼리 문자열에서 파라미터를 전달하므로 URL의 최대 길이로 제한됩니다. 요청에 라지 페이로드가 포함되는 경우(예: 대규모 IAM 정책을 업로드하거나 DynamoDB 요청에 대해 JSON 형식으로 많은 파라미터 전송할 수 있음) 일반적으로 POST 요청을 사용합니다.

두 가지 요청 유형의 서명 프로세스는 동일합니다.