AWS 서명 버전 4 오류 해결 - AWS 일반 참조

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

AWS 서명 버전 4 오류 해결

서명 버전 4를 구현하는 코드를 개발할 때 테스트하는 AWS 제품에서 오류가 발생할 수 있습니다. 오류는 일반적으로 요청의 정규화, 잘못된 서명 키 추출 또는 사용, 요청과 함께 전송된 서명별 파라미터에 대한 검증 실패 등으로 인해 발생합니다.

정규화 오류 해결

다음 요청을 고려하십시오.

https://iam.amazonaws.com/?MaxItems=100 &Action=ListGroupsForUser &UserName=Test &Version=2010-05-08 &X-Amz-Date=20120223T063000Z &X-Amz-Algorithm=AWS4-HMAC-SHA256 &X-Amz-Credential=AKIAIOSFODNN7EXAMPLE/20120223/us-east-1/iam/aws4_request &X-Amz-SignedHeaders=host &X-Amz-Signature=<calculated value>

표준 요청 또는 서명할 문자열을 잘못 계산한 경우 서비스에서 수행되는 서명 검증 단계가 실패합니다. 다음 예는 서비스에서 계산된 서명할 문자열과 정상 문자열을 포함하는 일반적인 오류 응답입니다. 반환된 문자열을 정상 문자열 및 계산된 서명할 문자열과 비교하여 계산 오류를 해결할 수 있습니다.

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details. The canonical string for this request should have been 'GET / Action=ListGroupsForUser&MaxItems=100&UserName=Test&Version=2010-05-08&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential =AKIAIOSFODNN7EXAMPLE%2F20120223%2Fus-east-1%2Fiam%2Faws4_request&X-Amz-Date=20120223T063000Z&X-Amz-SignedHeaders=host host:iam.amazonaws.com host <hashed-value>' The String-to-Sign should have been 'AWS4-HMAC-SHA256 20120223T063000Z 20120223/us-east-1/iam/aws4_request <hashed-value>' </Message> </Error> <RequestId>4ced6e96-5de8-11e1-aa78-a56908bdf8eb</RequestId> </ErrorResponse>

자격 증명 범위 오류 해결

AWS 제품은 자격 증명의 범위가 적절한지 검증합니다. 자격 증명 파라미터는 올바른 서비스, 리전 및 날짜를 지정해야 합니다. 예를 들어, 다음 자격 증명은 Amazon RDS 서비스를 참조합니다.

Credential=AKIAIOSFODNN7EXAMPLE/20120224/us-east-1/rds/aws4_request

동일한 자격 증명을 사용하여 요청을 IAM에 제출하는 경우 다음과 같은 오류 응답을 받게 됩니다.

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Credential should be scoped to correct service: 'iam'. </Message> </Error> <RequestId>aa0da9de-5f2b-11e1-a2c0-c1dc98b6c575</RequestId>

또한 자격 증명은 올바른 리전을 지정해야 합니다. 예를 들어, IAM 요청에 대한 다음 자격 증명은 미국 서부(캘리포니아 북부 지역) 리전을 올바르게 지정하지 않습니다.

Credential=AKIAIOSFODNN7EXAMPLE/20120224/us-west-1/iam/aws4_request

자격 증명을 사용하여 us-east-1 리전 사양만 허용하는 요청을 IAM에 제출할 경우 다음과 같은 응답을 받게 됩니다.

comma-separated<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Credential should be scoped to a valid Region, not 'us-west-1'. </Message> </Error> <RequestId>8e229682-5f27-11e1-88f2-4b1b00f424ae</RequestId> </ErrorResponse>

자격 증명 범위에 지정된 리전과 다른 리전에 요청을 제출할 경우 여러 리전에서 사용 가능한 AWS 제품에서 동일한 유형의 잘못된 리전 응답을 받게 됩니다.

또한 자격 증명은 요청 중인 서비스 및 작업에 대한 올바른 리전을 지정해야 합니다.

자격 증명의 일부로 사용하는 날짜가 x-amz-date 헤더의 날짜 값과 일치해야 합니다. 예를 들어, 다음 x-amz-date 헤더 값은 뒤에 오는 Credential 파라미터에 사용된 날짜와 일치하지 않습니다.

x-amz-date:"20120224T213559Z" Credential=AKIAIOSFODNN7EXAMPLE/20120225/us-east-1/iam/aws4_request

x-amz-date 헤더 및 자격 증명 쌍을 사용할 경우 다음과 같은 오류 응답을 받게 됩니다.

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP: '20120225' != '20120224', from '20120 224T213559Z'.</Message> </Error> <RequestId>9d6ddd2b-5f2f-11e1-b901-a702cd369eb8</RequestId> </ErrorResponse>

만료된 서명으로 인해 오류 응답이 생성될 수도 있습니다. 예를 들어, 다음 오류 응답은 만료된 서명으로 인해 생성되었습니다.

<ErrorResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Signature expired: 20120306T074514Z is now earlier than 20120306T074556Z (20120306T080056Z - 15 min.)</Message> </Error> <RequestId>fcc88440-5dec-11e1-b901-a702cd369eb8</RequestId> </ErrorResponse>

키 서명 오류 해결

잘못된 서명 키 추출 또는 잘못된 암호화 사용으로 인해 발생하는 오류는 해결하는 데 어려움이 있습니다. 오류 응답에 서명이 일치하지 않는다고 표시됩니다. 정상 문자열과 서명할 문자열이 올바른 경우 다음 중 한 가지 문제로 인해 서명 불일치가 발생할 가능성이 높습니다.

  • 보안 액세스 키가 Credential 파라미터에 지정된 액세스 키 ID와 일치하지 않습니다.

  • 키 추출 코드에 문제가 있습니다.

보안 키가 액세스 키 ID와 일치하는지 확인하려면 알려진 작업 구현에서 보안 키 및 액세스 키 ID를 사용할 수 있습니다. 한 가지 방법으로 AWS SDK 중 하나를 사용하여 사용하려는 액세스 키 ID 및 보안 액세스 키를 통해 AWS에 대한 간단한 요청을 생성하는 프로그램을 작성할 수 있습니다.

키 추출 코드가 올바른지 확인하려면 코드를 예제 추출 코드와 비교할 수 있습니다. 자세한 내용은 서명 버전 4에 대한 서명 키 생성 방법을 보여주는 예 단원을 참조하십시오.