우리가 계산한 요청 서명이 일치하지 않습니다

TL;DR — AWS는 DynamoDB 요청에 대한 SigV4 서명을 다시 계산했으며 사용자가 보낸 것과 다른 값을 얻었습니다. 일반적인 원인: 잘못된/일치하지 않는 비밀 키, 시스템과 AWS 간의 시계 왜곡 또는 약간 잘못 구성된 수동 롤링 표준 요청. 키나 시계를 고치거나 AWS SDK가 자동으로 서명하도록 하세요.

무엇을 의미하는가

InvalidSignatureException: 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.

모든 DynamoDB 요청은 요청의 정식 형식에 대한 비밀 키를 사용하여 SigV4로 서명됩니다. AWS는 서버 측 서명을 다시 파생합니다. 다르면 이 HTTP 400이 표시됩니다. 이는 인증 거부와는 다른 인증 실패(ID/서명)입니다. 일반적으로 변경하지 않고 재시도할 수 없습니다. 하지만 시계가 왜곡되면 간헐적으로 나타날 수 있습니다.

왜 발생하는가

  • 잘못된 비밀 액세스 키AWS_SECRET_ACCESS_KEYAWS_ACCESS_KEY_ID(혼합된 키, 회전된/이전 비밀, 잘못된 후행 공백 또는 개행)에 해당하지 않습니다.
  • 시계 오차 — 시스템의 시간이 AWS에서 벗어났습니다. SigV4는 요청 타임스탬프를 서명에 포함하므로 잘못된 시계로 인해 서명이 중단됩니다(VM/컨테이너의 전형적인 현상, 예를 들어 VM이 최대 절전 모드에서 깨어난 후).
  • 직접 작성한 표준 요청 — 헤더/쿼리 매개변수를 잘못 주문하거나, URI를 잘못 인코딩하거나, 잘못된 페이로드를 해시하는 사용자 정의 서명자입니다.
  • 키의 특수 문자가 잘못 처리됨-, +, / 또는 %를 포함하는 비밀은 자격 증명 파일을 작성하는 셸이나 스크립트에 의해 손상될 수 있습니다. AWS에서는 키 재생성을 제안합니다.
  • 레거시 SigV2 — Amazon S3 및 최신 지역과 같은 서비스는 더 이상 지원하지 않는 서명 버전 2로 서명합니다.
  • 서명 후 요청을 변경하는 프록시 또는 게이트웨이(헤더 추가/재주문, 경로 다시 인코딩).

어떻게 해결하는가

  1. 키 쌍을 다시 확인하세요. 액세스 키와 비밀 키를 다시 생성하거나 다시 복사하고 깔끔하게 설정하세요(후행 공백/줄 바꿈을 확인하고 비밀에 도구로 인해 난해한 특수 문자가 포함되어 있으면 다시 생성하세요).

  2. 시계를 수정합니다. 호스트 시간이 정확하도록 NTP를 활성화합니다.

    timedatectl status        # verify "System clock synchronized: yes"
  3. AWS SDK/CLI를 선호합니다 — 요청을 구성하고 서명하도록 합니다. 표준 요청 버그의 전체 클래스가 사라집니다.

  4. 직접 서명해야 하는 경우 SigV4 정식 요청 규칙(정렬된 헤더, URI 인코딩 경로, x-amz-date, 해시된 페이로드)을 정확하게 따르고 CLI의 --debug 출력과 비교합니다.

  5. 알려진 양호한 클라이언트에서 신원이 작동하는지 확인합니다.

    aws sts get-caller-identity

재현하기

실제 액세스 키 ID로 로그인하지만 비밀번호가 잘못되었습니다. 요청에 대한 다른 모든 내용은 유효하므로 실패하면 서명이 격리됩니다.

import boto3
boto3.client(
    'dynamodb',
    region_name='us-east-1',
    aws_access_key_id='AKIA...',                      # a real key id
    aws_secret_access_key='deliberately-the-wrong-secret',
).list_tables()

실제 출력:

InvalidSignatureException: 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.
HTTP 400

클래스에 유의하세요. 메시지는 친숙한 "우리가 계산한 서명이 일치하지 않습니다"이지만 DynamoDB는 이를 InvalidSignatureException로 반환합니다. SignatureDoesNotMatch은 다른 여러 AWS 서비스가 동일한 상황에 사용하는 것과 같습니다. 메시지를 일치시키는 것이 아니라 클래스별로 잡는 경우, 그 차이는 실행되는 핸들러와 실행되지 않는 핸들러 간의 차이입니다.

DynoTable에서 보기

DynoTable은 요청에 직접 서명하도록 요청하지 않습니다. 동일한 AWS SDK를 사용합니다. 자격 증명 체인을 CLI(Connect an AWS account)로 사용합니다. 만약에 aws sts get-caller-identity는 성공했지만 DynamoDB에서는 여전히 이 오류가 발생합니다. 앱과 AWS 간의 프록시 또는 미들웨어를 확인합니다. DynoTable은 다음과 대화합니다. 중개자 없이 머신에서 직접 DynamoDB를 사용하세요. 열쇠를 고친 후 또는 시계 편차가 원인이었다면 ⌘P로 활성 프로필을 확인한 뒤 테이블을 다시 열기 전에 설정 → 프로필에서 연결 테스트를 실행하세요.

관련 오류

출처

us-east-1의 라이브 DynamoDB 서비스에 대해 2026년 7월 26일 재현 — 위 출력은 그대로입니다.

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.