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

3분 분량
0

aws s3 동기화 명령을 실행하여 Amazon Simple Storage Service(S3) 버킷으로 또는 버킷에서 객체를 복사하고 있어요. 하지만 ListObjectsV2 작업을 호출하면 액세스 거부됨 오류가 발생해요. 이 문제를 어떻게 해결해야 하나요?

간단한 설명

aws s3 동기화 명령을 실행하면 Amazon S3가 다음과 같은 API 호출을 실행합니다. ListObjectsV2, CopyObject, GetObjectPutObject.

보다 구체적으로 다음과 같은 상황이 발생합니다.

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 requester 옵션을 포함해야 합니다. 그렇지 않으면 액세스 거부됨 오류가 발생합니다.

예:

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

관련 정보

버킷 소유자가 계정 간 버킷 권한 부여

버킷 정책 및 사용자 정책

AWS 공식
AWS 공식업데이트됨 2년 전