AWS 일반 참조
참조 안내서 (버전 1.0)

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

서명을 계산하기 전에 AWS 보안 액세스 키에서 서명 키를 생성합니다. 파생된 서명 키는 날짜, 서비스 및 리전에 특정하므로 더 높은 수준의 보호를 제공합니다. 보안 액세스 키만 사용하여 요청에 서명하지 않습니다. 그런 다음 작업 2: 서명 버전 4에 대한 서명할 문자열 생성에서 생성한 서명할 문자열과 서명 키를 사용합니다. 키가 추가된 해시 함수의 16진수로 인코딩된 결과가 서명입니다.

서명 버전 4에서는 특정 문자 인코딩을 사용하여 서명할 문자열을 인코딩하도록 요구하지 않습니다. 하지만 일부 AWS 서비스에서는 특정 인코딩이 필요할 수 있습니다. 자세한 내용은 해당 서비스에 대한 문서를 참조하십시오.

서명을 계산하려면

  1. 서명 키를 추출합니다. 이렇게 하려면 보안 액세스 키를 사용하여 일련의 해시 기반 메시지 인증 코드(HMAC)를 생성합니다. 다음과 같은 유사 코드로 표시됩니다. 여기서 HMAC(key, data)는 이진 형식으로 출력을 반환하는 HMAC-SHA256 함수입니다. 각 해시 함수의 결과는 다음 해시 함수의 입력이 됩니다.

    서명 키를 추출하기 위한 유사 코드

    kSecret = your secret access key kDate = HMAC("AWS4" + kSecret, Date) kRegion = HMAC(kDate, Region) kService = HMAC(kRegion, Service) kSigning = HMAC(kService, "aws4_request")

    해시 프로세스에 사용되는 날짜는 YYYYMMDD 형식(예: 20150830)이며 시간을 포함하지 않습니다.

    사용 중인 프로그래밍 언어에 맞는 순서로 HMAC 파라미터를 지정해야 합니다. 이 예에서는 키를 첫 번째 파라미터로 표시하고 데이터(메시지)를 두 번째 파라미터로 표시하지만, 사용 중인 함수에서는 키와 데이터를 다른 순서로 지정할 수 있습니다.

    키 추출을 위해 다이제스트(이진 형식)를 사용합니다. 대부분의 언어에는 이진 형식 해시(일반적으로 다이제스트라고 함) 또는 16진수로 인코딩된 해시(16진수 다이제스트라고 함)를 계산하는 함수가 있습니다. 키 추출에서는 이진 형식 다이제스트를 사용해야 합니다.

    다음 예에서는 서명 키를 생성하기 위한 입력과 결과 출력을 보여줍니다. 여기서 kSecret = wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY입니다.

    이 예에서는 작업 1과 작업 2의 요청에서 동일한 파라미터를 사용합니다(2015년 8월 30일에 제출된 us-east-1 리전의 IAM에 대한 요청).

    입력 예

    HMAC(HMAC(HMAC(HMAC("AWS4" + kSecret,"20150830"),"us-east-1"),"iam"),"aws4_request")

    다음 예는 이 HMAC 해시 작업 시퀀스에서 추출된 서명 키를 보여줍니다. 여기서는 이진 서명 키의 각 바이트를 16진수로 표시합니다.

    서명 키 예

    c4afb1cc5771d871763a393e44b703571b55cc28424d1a5e86da6ed3c154a4b9

    다른 프로그래밍 언어로 서명 키를 추출하는 방법에 대한 자세한 내용은 서명 버전 4에 대한 서명 키 생성 방법을 보여주는 예 단원을 참조하십시오.

  2. 서명을 계산합니다. 이렇게 하려면 추출한 서명 키와 서명할 문자열을 키가 추가된 해시 함수에 대한 입력으로 사용합니다. 서명을 계산한 후 이진수 값을 16진수 표현으로 변환합니다.

    다음 유사 코드에서는 서명을 계산하는 방법을 보여줍니다.

    signature = HexEncode(HMAC(derived signing key, string to sign))

    참고

    사용 중인 프로그래밍 언어에 맞는 순서로 HMAC 파라미터를 지정해야 합니다. 이 예에서는 키를 첫 번째 파라미터로 표시하고 데이터(메시지)를 두 번째 파라미터로 표시하지만, 사용 중인 함수에서는 키와 데이터를 다른 순서로 지정할 수 있습니다.

    다음 예에서는 작업 2에서와 동일한 서명 키와 서명할 문자열을 사용할 경우의 결과 서명을 보여줍니다.

    서명 예

    5d672d79c15b13162d9279b0855cfba6789a8edb4c82c400e06b5924a6f2b5d7