DynamoDB IncompleteSignatureException
TL;DR — 요청의 AWS 서명 버전 4 서명이 불완전하거나 AWS 표준을 준수하지 않아 DynamoDB가 인증하기 전에 이를 거부했습니다. AWS SDK를 사용하는 경우 서명은 자동으로 이루어집니다. 이는 거의 항상 서명 후 Authorization 헤더를 변조한 수동 요청 또는 프록시/게이트웨이를 의미합니다. SDK가 서명하도록 하고 전송 중에 요청을 다시 작성하는 일이 없는지 확인하세요.
무엇을 의미하는가
IncompleteSignatureException: The request signature does not conform to AWS standards.AWS는 SigV4를 사용하여 모든 요청에 서명합니다. 이 예외는 서명이 있지만 잘못된 형식 또는 필수 구성 요소 누락(잘못된 Authorization 헤더, 서명된 헤더 누락 또는 표준 요청 불일치)을 의미합니다. 클라이언트 측 HTTP 400이며 현재 상태로는 재시도할 수 없습니다. 서명을 수정해야 합니다.
왜 발생하는가
- 수동 서명 — SDK를 통하지 않고 직접 SigV4 서명을 작성하고 있으며 정식 요청, 서명된 헤더 목록 또는
Authorization헤더가 잘못되었습니다. - 잘못된
Authorization헤더 — 문서화된 트리거는 빈 헤더, 누락된Credential또는Signature매개변수, 알고리즘 이름(AWS4-HMAC-SHA256)으로 시작하지 않는 헤더 또는 등호가 없는 키=값 쌍입니다. - 프록시 또는 API 게이트웨이가 요청을 다시 작성 — SDK가 서명한 후
Authorization헤더(또는 기타 서명된 부분)를 변경하면 AWS가 수신하는 헤더가 사용자가 보낸 헤더와 달라집니다. - 수동으로 편집된 헤더 — 서명 후 헤더를 추가/제거하거나 쿼리 문자열을 재정렬하면 정식 요청이 중단됩니다.
어떻게 해결하는가
- 공식 AWS SDK를 사용하여 요청에 서명하도록 합니다. SDK는 SigV4를 올바르게 구현합니다. 거의 모든 문제에 대한 해결 방법은 직접 서명을 중지하는 것입니다.
- 서명 후 요청을 변경하지 마세요 — 프록시/게이트웨이가 앞에 있는 경우 헤더를 추가, 삭제 또는 재정렬하거나 본문/경로를 변경하지 않는지 확인하세요. 실제로 요청을 보내는 에지에서 서명합니다.
- 전송 중에
Authorization헤더가 변경되었는지 확인 — AWS의 문서화된 진단: 보낸 헤더의 SHA-256 해시를 계산하고 이를 Base64로 인코딩한 후 일부IncompleteSignatureException메시지에 포함된 해시와 비교합니다. 서로 다른 경우 클라이언트와 AWS 사이의 무언가가 헤더를 수정한 것입니다. - 수동으로 서명해야 하는 경우 AWS SigV4 서명 프로세스를 정확히 따르십시오. 정식 요청, 서명할 문자열, 서명 키 파생 및
Authorization헤더(알고리즘,Credential=,SignedHeaders=,Signature=)가 모두 일치해야 합니다. 알려진 양호한 SDK 요청에 대해 확인합니다.
잘못되었거나 잘린 비밀 키는 다른 실패입니다. 일치하지 않는 완전한 서명을 생성하여 이 오류가 아닌 "signature we calculated does not match"로 표시됩니다. 마찬가지로, 기울어진 기계 시계는 불완전한 서명이 아닌 Signature expired로 나타납니다.
DynoTable + Local
DynoTable은 수동으로 구축된 SigV4가 아닌 AWS SDK 서명 경로를 사용하므로 이 오류 클래스는 일반적인 사용에서는 나타나지 않습니다. DynoTable이 작동하는 동안 앱이 이에 도달하면 앱이 로드하는 것과 동일한 키를 사용하여 설정 → 프로필 → 연결 테스트 프로필을 비교하세요.
로컬의 경우 엔드포인트 http://localhost:8000가 있는 프로필의 더미 자격 증명은 서명을 완전히 우회합니다. Connect to AWS 및 Install를 참조하세요. 자격 증명이 확인된 후 Query Builder에서 연기 테스트 쿼리를 실행합니다.
출처
- Error handling with DynamoDB — IncompleteSignatureException (2026-07-13 인증)
- Troubleshoot Signature Version 4 signing (2026-07-13 인증)
FAQ
IncompleteSignatureException의 원인은 무엇입니까?
요청의 AWS SigV4 서명이 필수 부분(비어 있거나 잘못된 형식의 Authorization 헤더, 누락된 Credential 또는 Signature 매개변수 또는 등호가 없는 키=값 쌍)의 형식이 잘못되었거나 누락되었습니다. AWS SDK 서명은 자동으로 수행되므로 일반적으로 서명 후 요청을 변경한 수동 서명 또는 프록시를 의미합니다.
UnrecognizedClientException과 어떻게 다릅니까? IncompleteSignatureException은 서명 자체의 형식이 잘못되었음을 의미합니다. UnrecognizedClientException("보안 토큰이 유효하지 않음")은 서명의 형식이 올바르지만 그 뒤에 있는 자격 증명이 허용되지 않았음을 의미합니다.
재현하기
존재하지만 SigV4로 구문 분석할 수 없는 Authorization 헤더를 보냅니다.
import requests
requests.post(
'https://dynamodb.us-east-1.amazonaws.com',
headers={
'X-Amz-Target': 'DynamoDB_20120810.ListTables',
'Content-Type': 'application/x-amz-json-1.0',
'Authorization': 'AWS4-HMAC-SHA256 this-is-not-a-valid-credential-scope',
},
data='{}',
)실제 출력:
IncompleteSignatureException: Invalid key=value pair (missing equal-sign) in Authorization header (hashed with SHA-256 and encoded with Base64): 'nmoNS1XQjeE7XjC3Nzhi4KfIKrQZsBTlcf+/muyMgDs='.
HTTP 400후행 Base64 문자열은 자체 헤더의 해시이므로 요청마다 다릅니다. 일치하지 마세요. 메시지가 말하는 내용은 구조적입니다. AWS는 알고리즘을 읽을 수 있지만 그 뒤의 Credential=/SignedHeaders=/Signature= 쌍은 읽을 수 없습니다. 이는 헤더가 어떻게 조립되었는지를 의미하며, 이것이 SDK가 아닌 수동 서명에서 거의 항상 나오는 이유입니다.
관련 오류
- The request signature we calculated does not match — 완전하지만 잘못된 서명(잘못된 비밀 키 또는 정규화).
- The security token included in the request is invalid — 올바른 형식의 서명, 잘못된 자격 증명.
- The security token included in the request is expired — 임시 자격 증명 시간이 초과되었습니다.
- 설정에 리전이 없음
참고 자료
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (IncompleteSignatureException message, HTTP 400, not retryable)
- Troubleshoot Signature Version 4 signing for AWS API requests — IAM User Guide (Authorization-header errors and the hash-comparison diagnostic)
- Create a signed AWS API request — IAM User Guide (the SigV4 signing process)
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.
us-east-1의 라이브 DynamoDB 서비스에 대해 2026년 7월 26일 재현 — 위 출력은 그대로입니다.