요청에 포함된 보안 토큰이 유효하지 않습니다.
TL;DR — AWS 자격 증명이 잘못되었거나 만료되었거나 SDK가 생각과 다른 세트를 읽고 있습니다. 액세스 키 + 비밀(임시 자격 증명을 사용하는 경우 세션 토큰)을 새로 고치고 확인하고 SDK가 실제로 사용하고 있는 프로필/소스를 확인하세요.
무엇을 의미하는가
UnrecognizedClientException: The security token included in the request is invalid.AWS는 권한을 확인하기 전에 인증 시 자격 증명을 거부했습니다. 이는 자격 증명이 _유효_하지만 권한이 없음을 의미하는 AccessDeniedException와 다릅니다. 여기서는 자격 증명 자체가 허용되지 않습니다. 예외 이름은 도구에 따라 다릅니다. AWS CLI는 InvalidClientTokenId 아래에 동일한 메시지를 표시하며 DynamoDB의 오류 참조에서는 해당 UnrecognizedClientException 항목이 "액세스 키 ID 또는 보안 토큰이 유효하지 않습니다."라고 표시됩니다. — 모두 인증이 실패했음을 의미합니다.
왜 발생하는가
- 만료된 임시 자격 증명 — STS/SSO 세션 또는 위임된 역할 토큰이 시간 초과되었거나 필수
AWS_SESSION_TOKEN가 없는 액세스 키가 있습니다. - 잘못된 키 또는 부분 키 — 오타, 회전/삭제된 액세스 키 또는 일치하는
AWS_SECRET_ACCESS_KEY가 없는AWS_ACCESS_KEY_ID세트. - 이전 세션의 환경에 오래된
AWS_SESSION_TOKEN가 남아 있습니다. - DynamoDB Local에서 실제 자격 증명을 가리킴(또는 그 반대) — Local은 더미 키를 허용하지만 실제 엔드포인트는 자리 표시자를 허용하지 않습니다.
- 요청 서명을 무효화할 만큼 머신의 시계 오차가 큽니다.
어떻게 해결하는가
자격 증명이 작동하는지 확인합니다:
aws sts get-caller-identity. 그것도 실패하면 DynamoDB가 아니라 자격 증명입니다.임시 자격 증명 새로 고침 —
aws sso login을 다시 실행/역할을 다시 가정하고 임시 키에AWS_SESSION_TOKEN이 설정되어 있는지 확인하세요.오래된 환경 변수 지우기 — 셸의 오래된
AWS_SESSION_TOKEN/AWS_ACCESS_KEY_ID가 프로필을 재정의합니다. 설정을 해제하거나 올바른 프로필을 설정하십시오(aws configure list는 어느 소스가 유리한지 보여줍니다).DynamoDB Local의 경우 자리 표시자 자격 증명을 사용하고 로컬 엔드포인트를 가리킵니다.
const client = new DynamoDBClient({ region: 'local', endpoint: 'http://localhost:8000', credentials: {accessKeyId: 'local', secretAccessKey: 'local'} });다른 모든 것이 올바르게 보이면 기계 시계가 정확한지(NTP 동기화) 확인하세요.
DynoTable에서
DynoTable은 연결할 때마다 ~/.aws 프로필을 새로 확인합니다.
따라서 재로그인, 키 순환 또는 지워진 환경 변수는 다시 시작하지 않고도 선택됩니다.
앱. ⌘P을 눌러 어떤 프로필이 활성화되어 있는지 확인하세요.
자격증명 점은 녹색입니다. 빨간색 점은 로그인(SSO) 또는 다시 연결을 의미합니다.
테이블 호출이 성공하기 전에. DynamoDB Local의 경우 엔드포인트가 있는 프로필을 추가합니다.
http://localhost:8000 및 영숫자 자리 표시자 키(참조
Running DynamoDB Local); 로컬에 대한 실제 AWS 키
이와 동일한 오류가 발생합니다.
FAQ
'요청에 포함된 보안 토큰이 유효하지 않습니다'는 무슨 뜻인가요? AWS는 권한을 확인하기 전에 인증 시 자격 증명을 거부했습니다. 키가 잘못되었거나 순환되었거나 부분적이거나 임시 세션 토큰이 만료되었거나 오래되었거나 SDK가 생각하는 것과 다른 자격 증명 소스를 읽고 있습니다.
잘못된 보안 토큰을 어떻게 디버깅하나요?
aws sts get-caller-identity 실행 — 이것도 실패하면 DynamoDB가 아니라 자격 증명입니다. 임시 자격 증명을 새로 고치고(aws sso login 또는 역할을 다시 가정) 임시 키에 대해 AWS_SESSION_TOKEN가 설정되어 있는지 확인하고 프로필을 재정의하는 오래된 환경 변수를 삭제하세요.
재현하기
여기에는 유효한 자격 증명과 로컬 엔진이 필요하지 않습니다. 인증 전에 인증이 실패하므로 실제 DynamoDB 서비스는 의도적으로 가짜 키에 응답합니다.
import boto3
boto3.client(
'dynamodb',
region_name='us-east-1',
aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
).list_tables()실제 출력:
UnrecognizedClientException: The security token included in the request is invalid. [HTTP 400]구조적으로 잘못된 키(not-a-key)는 동일한 메시지를 반환하는데, 이는 실용적인 함정입니다. 오류는 자격 증명이 거부되었지만 결코 _왜_는 아니었는지 알려줍니다. 오타, 삭제된 액세스 키, 잘못된 계정의 키, 존재하지 않는 키 등은 모두 여기에 동일하게 존재합니다. 이를 구별하는 security token expired와 비교하고 쌍을 확인하세요. 연결 코드는 UnrecognizedClientException이고 메시지는 "보안 토큰"에 대해 이야기하므로 메시지를 검색하고 클래스에 대한 핸들러를 파악하려면 다른 문자열이 필요합니다.
관련 오류
- AccessDeniedException — 유효한 자격 증명, 권한이 누락되었습니다.
- 설정에 리전이 없음
- 학습: Running DynamoDB Local — 로컬 엔드포인트에 대한 자리 표시자 자격 증명입니다.
출처
- Troubleshooting errors for the AWS CLI — AWS CLI User Guide (2026-07-13 인증)
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide (2026-07-13 인증)
- DynamoDB local usage notes — Amazon DynamoDB Developer Guide (2026-07-13 인증)
boto3 1.43.56을 통해 us-east-1의 라이브 DynamoDB 서비스에 대해 2026년 7월 26일 재현 — 위 출력은 그대로입니다.