AWS CLI(AWS 명령줄 인터페이스)를 사용하는 경우 Amazon Simple Storage Service(Amazon S3) 리소스에 액세스할 수 있습니다. 하지만 AWS SDK를 사용할 때 액세스가 거부됩니다. 해결하려면 어떻게 해야 하나요?
해결 방법
참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.
AWS CLI 및 AWS SDK 자격 증명 확인
먼저, 사용하는 AWS CLI 및 AWS SDK가 동일한 자격 증명으로 구성되었는지 확인합니다. 이렇게 하려면 다음 단계를 따릅니다.
AWS CLI에 구성된 자격 증명을 가져오려면 다음 명령을 실행합니다.
aws iam list-access-keys
AWS CLI에 연결된 AWS Identity and Access Management(IAM) 역할을 사용하는 경우 다음 명령을 사용하여 역할을 가져옵니다.
aws sts get-caller-identity
사용하는 AWS SDK에 구성된 자격 증명을 가져오려면 AWS Security Token Service(AWS STS) 클라이언트를 사용하여 GetCallerIdentity 호출을 실행합니다. 예를 들어, AWS SDK for Python(Boto3)를 사용하는 경우 get_caller_identity를 실행합니다.
AWS CLI 및 AWS SDK가 다른 자격 증명을 사용하는 경우 AWS CLI에 저장된 자격 증명으로 AWS SDK를 사용합니다.
Amazon S3에 대한 AWS CLI 및 SDK 요청 문제 해결
CLI와 AWS SDK에서 사용하는 자격 증명이 동일한 경우 다음 질문을 통해 문제 해결을 계속하십시오.
- S3에 대한 CLI 및 SDK 요청이 동일한 소스에서 오나요? 즉, 동일한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 요청이 있는지 확인합니다.
- 요청이 동일한 소스에서 오는 경우 SDK에서 의도한 자격 증명을 사용합니까? 예를 들어 AWS SDK for Python(Boto3)을 사용하는 경우 SDK에서는 자격 증명 구성 방법을 여러 가지 제공합니다. 이것은 Boto3가 특정 순서에 따라 여러 위치에서 자격 증명을 찾는 다는 것을 의미합니다. 초기에 잘못된 자격 증명이 지정된 경우 이러한 자격 증명이 사용됩니다. Boto3가 자격 증명을 검색할 때 따르는 순서에 대한 자세한 내용은 Boto3 SDK 웹사이트에서 자격 증명 을 참조하세요.
VPC 엔드포인트가 S3에 대한 요청을 허용하는지 확인
요청이 여러 소스에서 전송된다면 SDK를 사용하는 소스가 VPC 엔드포인트를 통해 요청을 보내고 있는지 확인합니다. 그런 다음, VPC 엔드포인트에서 Amazon S3로 전송하려는 요청을 허용하는지 확인합니다.
이 예시에서 VPC 엔드포인트 정책은 DOC-EXAMPLE-BUCKET에 대한 다운로드 및 업로드 권한을 허용합니다. 이 VPC 엔드포인트를 사용하는 경우에는 다른 버킷에 대한 액세스가 거부됩니다.
{
"Statement": [
{
"Sid": "Access-to-specific-bucket-only",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::DOC-EXAMPLE-BUCKET",
"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
]
}
]
}
자격 증명 또는 소스에서 문제가 발견되지 않으면 S3에서 액세스 거부 오류를 반환할 수 있는 몇 가지 이유를 검토하십시오. 자세한 내용은 Amazon S3에서 403 Access Denied 오류 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.
관련 정보
Amazon S3의 Identity and Access Management