자격 증명을 찾을 수 없습니다(boto3/DynamoDB)

TL;DR — boto3/botocore는 전체 자격 증명 공급자 체인(env vars, 공유 ~/.aws/credentials, 구성 프로필, 컨테이너/인스턴스 역할)을 탐색했지만 아무것도 발견하지 못했습니다. 자격 증명이 없다는 것은 DynamoDB 요청에 서명할 수 없다는 의미입니다. 체인에 찾을 수 있는 자격 증명 소스(aws configure, 환경 변수, 프로필 또는 IAM 역할)를 제공합니다.

무엇을 의미하는가

botocore.exceptions.NoCredentialsError: Unable to locate credentials

DynamoDB를 호출하기 전에 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에 편집한 파일이 보관되지 않은 서비스 계정으로 실행됩니다.
  • 임시 자격 증명 설정을 위한 세션 토큰이 만료/부재합니다.

어떻게 해결하는가

  1. 로컬 개발자를 위한 프로필 구성:

    aws configure     # writes ~/.aws/credentials + ~/.aws/config
  2. 또는 프로세스에 대한 환경 변수를 설정합니다.

    export AWS_ACCESS_KEY_ID=...
    export AWS_SECRET_ACCESS_KEY=...
    export AWS_DEFAULT_REGION=us-east-1
  3. EC2/ECS/Lambda에서 IAM 역할을 연결합니다. SDK가 인스턴스/컨테이너 메타데이터에서 자동으로 이를 선택합니다. 열쇠를 굽지 마세요.

  4. 코드를 실행하기 전에 ID 확인을 확인하세요.

    aws sts get-caller-identity
  5. 올바른 프로파일을 가리킵니다profile_nameboto3.Session(...)로 전달하거나 AWS_PROFILE를 설정합니다.

  6. DynamoDB Local에 대해 모든 자리 표시자 키가 작동합니다. 체인이 비어 있지 않도록 더미 aws_access_key_id/aws_secret_access_key를 전달합니다.

DynoTable + Local

DynoTable은 CLI와 동일한 방식으로 자격 증명을 확인합니다. 연결되지만 boto3가 연결되지 않으면 프로세스가 다른 홈 디렉터리를 읽고 있거나 AWS_PROFILE가 누락된 것입니다. 설정 → 프로필에서 프로필을 구성하고 연결 테스트를 실행하세요. ⌘P로 전환하세요.

로컬의 경우 더미 키와 엔드포인트 http://localhost:8000가 있는 프로필을 추가합니다. Connect to AWSInstall을 참조하세요. Query Builder에서 테스트 쿼리를 통해 확인하세요.

출처

FAQ

boto3에서 "자격 증명을 찾을 수 없습니다"를 어떻게 해결합니까? 자격 증명 공급자 체인에 찾을 내용을 제공합니다. aws configure을 실행하여 ~/.aws/credentials을 쓰고, 프로세스 환경에서 AWS_ACCESS_KEY_IDAWS_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가 살펴본 장소의 이름은 전혀 언급되지 않았습니다. 이것이 이 오류의 전체적인 어려움이며, 환경, 공유 파일, 프로필, 역할 등의 순서로 체인을 작업하는 것이 추측보다 나은 이유입니다.

관련 오류

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.

boto3 1.43.56 / botocore 1.43.56에 대해 2026-07-26 재현 — 위 출력은 그대로입니다.

Console 없이 DynamoDB 작업하기

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

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