AWS CLI를 사용할 때는 Amazon S3에 액세스할 수 있지만, AWS SDK를 사용할 때는 액세스 거부 오류가 발생합니다. 왜 그럴까요?

최종 업데이트 날짜: 2020년 10월 22일

AWS 명령줄 인터페이스(AWS CLI)를 사용할 때 Amazon Simple Storage Service(Amazon S3) 리소스에 액세스할 수 있지만 AWS SDK를 사용할 때 액세스 거부 오류가 발생합니다. 해결하려면 어떻게 해야 하나요?

간략한 설명

AWS CLI를 사용하면 Amazon S3에 액세스할 수 있지만, AWS SDK를 사용할 때 액세스할 수 없는 경우 다음 문제 해결 단계를 수행합니다.

  1. 사용하는 AWS CLI 및 AWS SDK가 동일한 자격 증명으로 구성되었는지 확인합니다.
  2. 방화벽, HTTP 프록시 또는 Amazon Virtual Private Cloud(Amazon VPC) 엔드포인트에서 Amazon S3에 대한 AWS SDK 요청을 허용하는지 확인합니다.

해결 방법

사용하는 AWS CLI 및 AWS SDK가 동일한 자격 증명으로 구성되었는지 확인합니다.

AWS CLI에 구성된 자격 증명을 가져오려면 다음 명령을 실행합니다.

aws iam list-access-keys

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

AWS CLI에 연결된 AWS Identity and Access Management(IAM) 역할을 사용하는 경우 다음 명령을 사용하여 역할을 가져옵니다.

aws sts get-caller-identity

사용하는 AWS SDK에 구성된 자격 증명을 가져오려면 AWS Security Token Service(AWS STS) 클라이언트를 사용하여 GetCallerIdentity 호출을 실행합니다. 예를 들어, Python용 AWS SDK(Boto3)를 사용하는 경우 get_caller_identity를 실행합니다.

AWS CLI 및 AWS SDK가 다른 자격 증명을 사용하는 경우 AWS CLI에 저장된 자격 증명으로 AWS SDK를 사용합니다.

방화벽, HTTP 프록시 또는 Amazon VPC 엔드포인트에서 Amazon S3에 대한 AWS SDK 요청을 허용하는지 확인

구성된 자격 증명이 동일하면 AWS CLI와 AWS SDK를 통한 Amazon S3에 대한 요청이 동일한 소스인지 확인합니다. 예를 들어, 동일한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스의 요청이 있는지 확인합니다.

다양한 소스에서 요청이 생성되는 경우 AWS SDK를 사용하는 소스가 방화벽, HTTP 프록시 또는 Amazon VPC 엔드포인트를 통해 요청을 전송하는지 확인합니다. 그런 다음, 방화벽, HTTP 프록시 또는 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/*"
            ]
        }
    ]
  }

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?