AWS Signature Version 4 트러블슈팅
AWS Signature Version 4 트러블슈팅
SigV4 서명 요청이 거부될 때 흔히 보는 서명 관련 오류와 해결 방법을 설명하는 페이지예요. SignatureDoesNotMatch 같은 오류를 다뤄요.
출처: 문서
본문
서명된 AWS API 요청이 거부되면 대개 SignatureDoesNotMatch 또는 MissingAuthenticationToken 같은 오류가 나요. 다음 항목을 순서대로 점검하면 대부분 해결돼요.
1. 서명에 사용한 값이 실제 요청과 일치하는지
SigV4 서명은 요청의 정확한 내용(경로, 쿼리, 헤더, 본문, 시각)을 포함해 계산돼요. 계산에 쓴 값과 실제로 보낸 요청이 조금이라도 다르면 서명이 어긋나요. 특히 다음을 확인하세요.
- URL 인코딩 — 경로와 쿼리 파라미터의 URL 인코딩이 정규 요청을 만들 때와 동일한지. 공백,
+,%처리에서 오류가 자주 나요. - 헤더 정렬과 소문자화 — 정규 헤더는 소문자 키, 알파벳 정렬이어야 해요.
SignedHeaders목록과 정규 헤더가 일치해야 해요. - 타임스탬프 —
x-amz-date와 서명 범위의 날짜가 일치해야 해요. 시계가 어긋나거나(클록 스큐) 오래된 타임스탬프를 쓰면 실패해요. - 본문 해시 — 본문이 비어 있는 요청은 빈 문자열의 SHA-256 해시를 써야 해요. 본문이 실제로 전송된 것과 다르면 실패해요.
2. 자격 증명이 올바른지
- 액세스 키 ID와 시크릿 액세스 키의 쌍이 정확한지.
- 임시 자격 증명을 쓴다면 세션 토큰(
X-Amz-Security-Token)이 요청에 포함됐는지. - 키가 삭제되었거나 비활성화되었는지.
- 서명 범위(리전, 서비스)가 요청 대상과 일치하는지.
3. 시각(시간) 및 리전
- 요청과 서명이 같은 리전을 가리키는지.
- 서명 범위의 날짜와
x-amz-date가 UTC로 일치하는지.
4. 사전 서명된 URL
X-Amz-Expires가 지나치게 크지 않은지(최대 제한).- URL을 만들 때 쓴 자격 증명에 대상 동작에 대한 권한이 있는지.
- URL이 브라우저/클라이언트에서 인코딩되면서
X-Amz-*파라미터가 깨지지 않았는지.
5. 다른 원인
MissingAuthenticationToken— 요청에 서명이나 자격 증명이 아예 없는 경우. SDK 호출이 자격 증명을 찾지 못했을 때도 발생해요.InvalidAccessKeyId— 액세스 키 ID를 찾을 수 없을 때.ExpiredToken— 임시 자격 증명 만료.
AWS SDK로 자동 서명을 하는 경우 대부분 이런 문제가 거의 드물어요. 커스텀 코드로 직접 서명할 때 자주 발생하므로, 서명 계산 함수를 서비스 규격에 맞게 정확히 구현하는 것이 핵심이에요.
자세한 규격은 AWS 일반 참조의 Signature Version 4 서명 프로세스를 참고하세요.