자격 증명을 찾을 수 없습니다(boto3/DynamoDB)
TL;DR — boto3/botocore는 전체 자격 증명 공급자 체인(env vars, 공유 ~/.aws/credentials, 구성 프로필, 컨테이너/인스턴스 역할)을 탐색했지만 아무것도 발견하지 못했습니다. 자격 증명이 없다는 것은 DynamoDB 요청에 서명할 수 없다는 의미입니다. 체인에 찾을 수 있는 자격 증명 소스(aws configure, 환경 변수, 프로필 또는 IAM 역할)를 제공합니다.
무엇을 의미하는가
botocore.exceptions.NoCredentialsError: Unable to locate credentialsDynamoDB를 호출하기 전에 SDK는 액세스 키와 암호를 확인하여 SigV4로 요청에 서명해야 합니다. 해당 단계에서 다음 오류가 발생합니다. 자격 증명 공급자가 아무것도 반환하지 않았습니다. 요청이 전송되기 전에 발생합니다. 이는 권한 거부(AccessDeniedException)가 아니라 ID가 없다는 것입니다.
왜 발생하는가
- 구성된 자격 증명 없음 —
aws configure은 실행된 적이 없으며~/.aws/credentials이 존재하지 않습니다. - 환경 변수 누락 —
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY가 프로세스 환경에 설정되지 않았습니다(크론 작업, 컨테이너, CI에서 일반적임). - 잘못되었거나 누락된 프로필 —
--profile foo(또는AWS_PROFILE=foo)을 참조했지만 해당 프로필이 자격 증명/구성 파일에 없습니다. - 인스턴스/컨테이너 역할 없음 — 연결된 IAM 역할이 없는 EC2/ECS/Lambda에서는 메타데이터 공급자가 아무것도 반환하지 않습니다.
- 다른 사용자의 홈 —
~/.aws에 편집한 파일이 보관되지 않은 서비스 계정으로 실행됩니다. - 임시 자격 증명 설정을 위한 세션 토큰이 만료/부재합니다.
어떻게 해결하는가
로컬 개발자를 위한 프로필 구성:
aws configure # writes ~/.aws/credentials + ~/.aws/config또는 프로세스에 대한 환경 변수를 설정합니다.
export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_DEFAULT_REGION=us-east-1EC2/ECS/Lambda에서 IAM 역할을 연결합니다. SDK가 인스턴스/컨테이너 메타데이터에서 자동으로 이를 선택합니다. 열쇠를 굽지 마세요.
코드를 실행하기 전에 ID 확인을 확인하세요.
aws sts get-caller-identity올바른 프로파일을 가리킵니다 —
profile_name를boto3.Session(...)로 전달하거나AWS_PROFILE를 설정합니다.DynamoDB Local에 대해 모든 자리 표시자 키가 작동합니다. 체인이 비어 있지 않도록 더미
aws_access_key_id/aws_secret_access_key를 전달합니다.
DynoTable + Local
DynoTable은 CLI와 동일한 방식으로 자격 증명을 확인합니다. 연결되지만 boto3가 연결되지 않으면 프로세스가 다른 홈 디렉터리를 읽고 있거나 AWS_PROFILE가 누락된 것입니다. 설정 → 프로필에서 프로필을 구성하고 연결 테스트를 실행하세요. ⌘P로 전환하세요.
로컬의 경우 더미 키와 엔드포인트 http://localhost:8000가 있는 프로필을 추가합니다. Connect to AWS 및 Install을 참조하세요. Query Builder에서 테스트 쿼리를 통해 확인하세요.
출처
- Credentials — Boto3 documentation (2026-07-13 인증)
- Error handling — Boto3 documentation (2026-07-13 인증)
FAQ
boto3에서 "자격 증명을 찾을 수 없습니다"를 어떻게 해결합니까?
자격 증명 공급자 체인에 찾을 내용을 제공합니다. aws configure을 실행하여 ~/.aws/credentials을 쓰고, 프로세스 환경에서 AWS_ACCESS_KEY_ID 및 AWS_SECRET_ACCESS_KEY을 설정하거나, EC2/ECS/Lambda에 IAM 역할을 연결합니다. 그런 다음 aws sts get-caller-identity로 확인하세요.
"자격 증명을 찾을 수 없습니다"는 AccessDeniedException과 동일합니까? 아니요. 자격 증명 공급자가 아무것도 반환하지 않았기 때문에 요청이 전송되기 전에 NoCredentialsError가 로컬에서 발생합니다. AccessDeniedException은 인증 후 AWS에서 발생하며 유효한 자격 증명에 작업에 대한 IAM 권한이 부족할 때 발생합니다.
재현하기
체인 어디에서나 확인할 수 있는 자격 증명 없이 DynamoDB를 호출합니다. 환경 변수, 공유 자격 증명 파일, 프로필, 인스턴스 역할이 없습니다.
import boto3
boto3.client('dynamodb', region_name='us-east-1').list_tables()실제 출력:
NoCredentialsError: Unable to locate credentials메시지는 간결한 것으로 유명합니다. boto3가 살펴본 장소의 이름은 전혀 언급되지 않았습니다. 이것이 이 오류의 전체적인 어려움이며, 환경, 공유 파일, 프로필, 역할 등의 순서로 체인을 작업하는 것이 추측보다 나은 이유입니다.
관련 오류
- The security token included in the request is invalid — 자격 증명을 찾았지만 AWS가 이를 거부했습니다.
- AccessDeniedException — 유효한 ID이지만 작업에 대한 IAM 권한이 없습니다.
- 설정에 리전이 없음
- 학습: Running DynamoDB Local — 로컬 엔드포인트에 대한 더미 자격 증명.
참고 자료
- Credentials — Boto3 documentation
- Error handling — Boto3 documentation
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.
boto3 1.43.56 / botocore 1.43.56에 대해 2026-07-26 재현 — 위 출력은 그대로입니다.