내 Amazon S3 버킷에서 동기화 명령을 실행할 때 ListObjectsV2에 대한 액세스 거부 오류가 발생하는 이유는 무엇인가요?

최종 업데이트 날짜: 2021년 11월 1일

AWS S3 동기화 명령을 실행하여 Amazon Simple Storage Service(Amazon S3) 버킷에서/으로 객체 복사를 수행하려고 합니다. 그러나 ListObjectsV2 작업을 호출하면 액세스 거부 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

aws s3 sync 명령을 실행하면 Amazon S3가 ListObjectsV2, CopyObject, GetObjectPutObject API 호출을 실행합니다.

보다 구체적으로 다음과 같은 작업이 실행됩니다.

1.    Amazon S3는 소스 및 대상을 나열하여 객체가 존재하는지 여부를 확인합니다.

2.    그런 다음 Amazon S3는 다음 API 호출을 수행합니다.

CopyObject - 버킷에서 버킷으로의 작업
GetObject - 버킷에서 로컬로의 작업
로컬에서 버킷으로 작업을 위한 PutObject

참고: 이 해결 방법에서는 GetObject 및 PutObject 호출이 AWS Identity Access Management(IAM) 사용자 또는 역할에 이미 부여되었다고 가정합니다. 이 해결 방법은 부적절한 ListBucket 권한 또는 요청자 지불에서 잘못된 동기화 명령 구문을 사용하여 발생하는 액세스 거부 오류를 해결하는 방법을 다룹니다.

해결 방법

IAM 정책 구성

객체를 복사하거나 복사할 Amazon S3 버킷에 s3:ListBucket에 대한 권한이 있는지 확인합니다. ListObjectsV2 작업을 수행하려면 이 권한이 있어야 합니다.

참고: s3:ListBucket은 사용자가 버킷의 객체를 나열하도록 허용하는 권한의 이름입니다. ListObjectsV2는 버킷의 객체를 나열하는 API 호출의 이름입니다.

IAM 사용자 또는 역할이 다른 AWS 계정에 속해 있는 경우 IAM 및 버킷 정책에서 s3:ListBucket 작업을 허용하는지 확인합니다. IAM 정책과 버킷 정책 모두에 s3:ListBucket에 대한 권한이 있어야 합니다.

사용자 또는 역할이 버킷 소유자의 계정에 속해 있는 경우 s3:ListBucket을 허용하기 위해 IAM 정책과 버킷 정책 모두가 필요하지는 않습니다. 작업을 허용하려면 그 중 하나만 필요합니다.

중요: IAM 정책 또는 버킷 정책 중 하나가 이미 s3:ListBucket 작업을 허용하도록 설정되어 있는 경우 다른 정책에 이 작업을 명시적으로 거부하는 명령문이 없는지 확인하세요. 명시적 거부 문은 허용 문을 재정의합니다.

다음은 s3:ListBucket에 대한 액세스 권한을 부여하는 예제 IAM 정책입니다.

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546506260896",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET"
  }]
}

다음은 사용자에게 사용자 arn:aws:iam::123456789012:user/testuser에게 s3:ListBucket에 대한 액세스 권한을 부여하는 버킷 정책의 예시입니다.

{
  "Id": "Policy1546414473940",
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Stmt1546414471931",
    "Action": "s3:ListBucket",
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET",
    "Principal": {
      "AWS": [
        "arn:aws:iam::123456789012:user/testuser"
      ]
    }
  }]
}

요청자 지불에 동기화 명령 사용

버킷이 다른 AWS 계정에 속하고 요청자 지불이 활성화된 경우 버킷 정책과 IAM 권한이 모두 ListObjectsV2 권한을 부여하는지 확인합니다. ListObjectsV2 권한이 올바르게 부여된 경우 동기화 명령 구문을 확인하십시오. 동기화 명령을 사용할 때는--request-payer 요청자 옵션을 포함해야 합니다. 그렇지 않으면 액세스 거부 오류가 표시됩니다.

예를 들면 다음과 같습니다.

aws s3 sync ./ s3://requester-pays-bucket/ --request-payer requester

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


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