Amazon S3 미리 서명된 URL의 SigV4 서명 불일치 오류를 해결하려면 어떻게 해야 하나요?

3분 분량
0

Amazon Simple Storage Service(S3) 미리 서명된 URL을 사용하여 Amazon S3 버킷에 요청하고 있는데 SignatureDoesNotMatch 오류가 발생합니다.

간략한 설명

이 오류는 AWS에 대한 HTTP 요청에서 계산된 서명 값이 Amazon S3가 계산하는 값과 일치하지 않을 때 발생합니다. 자세한 내용은 오류 코드 목록을 참조하세요.

미리 서명된 URL을 생성하면 클라이언트는 요청에 대한 고유 서명을 계산하여 요청을 인증합니다. 그런 다음 Amazon S3는 HTTP 요청에 전송된 파라미터를 기반으로 서명을 계산하고 두 서명을 비교합니다. 서명이 일치하지 않으면 SignatureDoesNotMatch 오류가 발생합니다.

이 오류를 해결하려면 다음과 같이 하세요.

  • HTTP 방식 검증: GET, PUT, DELETE 요청을 위해 S3에 보낸 HTTP 요청과 요청이 생성된 HTTP 방식과 일치하는지 확인합니다.
  • 보안 액세스 키 확인: 미리 서명된 URL은 올바른 비밀 액세스 키를 사용하여 생성해야 합니다. 비밀 액세스 키가 수정되었거나 올바르지 않은 경우 올바른 액세스 키를 사용하여 미리 서명된 URL을 다시 생성합니다.
  • URL의 버킷 이름과 키 이름 확인: 버킷 이름과 개체 키 이름이 올바르고 액세스하려는 개체의 이름과 일치하는지 확인합니다.
  • HTTP 요청에 사용되는 헤더 검증: 서명에서 헤더가 계산되었는지 확인합니다. 서명을 생성하는 데 사용된 HTTP 헤더가 HTTP 요청에서 S3로 전송된 헤더와 일치하는지 확인합니다.
  • AWS 리전이 올바른지 확인: 버킷이 현재 존재하는 리전에 대해 서명이 생성되었는지 확인합니다.

해결 방법

잘못된 HTTP 방식

미리 서명된 URL을 생성할 때는 URL에 HTTP 작업을 할당합니다. 이 오류는 클라이언트가 HTTP 요청에서 보낸 작업이 URL에 사용된 HTTP 작업과 일치하지 않을 때 발생합니다. 예를 들어 요청을 GET으로 서명했지만 요청에 사용된 HTTP 작업이 PUT인 경우 오류가 발생합니다. 의도한 HTTP 방식에 맞게 URL을 생성하고 사용해야 URL이 제대로 작동합니다.

잘못된 보안 액세스 키

미리 서명된 URL을 생성하는 데 사용하는 액세스 키 또는 보안 액세스 키가 다음 상태 중 하나이면 이 오류가 발생합니다.

  • 잘못됨
  • 유효하지 않음
  • 꺼짐

일치하지 않는 문자나 잘못된 공백을 액세스 키에 추가하지 않았는지 확인합니다.

서명 생성 시 제공한 액세스 키와 비밀 키가 AWS에서 제공한 키와 일치하는지 확인합니다.

잘못된 키 이름 또는 버킷 이름

이 오류는 버킷이나 키에 대해 생성한 미리 서명된 URL로 다른 버킷이나 키에 액세스할 때 발생합니다.

버킷 이름과 개체 이름이 올바른지, URL의 서명 생성에 포함된 이름과 일치하는지 확인합니다. 대/소문자가 일치하지 않아 서명이 일치하지 않을 수도 있습니다.

헤더에 서명되지 않았거나 잘못된 헤더 값

미리 서명된 URL의 서명 생성에서 서명되지 않은 헤더를 전달하지 않았는지 확인합니다. 미리 서명된 S3 URL이 포함된 헤더를 전송하려는 경우 URL의 서명 생성 내에서 헤더를 고려해야 합니다.

또한 전달한 헤더의 값이 서명 계산 중에 생성된 값과 일치하는지 확인합니다. 대/소문자 불일치를 포함하여 헤더 값이 일치하지 않으면 SignatureDoesNotMatch 오류가 발생합니다.

서명 리전 및 버킷 리전 불일치

미리 서명된 URL을 S3로 전송하기 전에, URL이 생성된 리전이 현재 버킷이 있는 리전과 일치하는지 확인합니다.

GetBucketLocation API 요청을 사용하여 S3 버킷의 리전을 확인합니다. 다음 AWS Command Line Interface(AWS CLI) 명령을 실행할 수도 있습니다.

$ aws s3api get-bucket-location --bucket example-bucket

참고: AWS CLI 명령을 실행할 때 오류가 발생하면 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

출력은 다음 메시지와 비슷합니다.

{  
    "LocationConstraint": "us-west-2"  
}

관련 정보

미리 서명된 URL 사용

S3 개체에 액세스하려고 하면 "요청이 만료되었습니다."라는 오류 메시지가 표시됩니다. 이유가 무엇인가요?

AWS 공식
AWS 공식업데이트됨 10달 전