다른 AWS 계정에서 제 Amazon S3 버킷에 업로드한 객체에 액세스할 수 없는 이유는 무엇입니까?

최종 업데이트 날짜: 2022년 1월 24일

다른 AWS 계정의 AWS Identity and Access Management(IAM) 사용자가 제 Amazon Simple Storage Service(Amazon S3) 버킷에 객체를 업로드했습니다. 해당 객체에 액세스하려고 하면 403 액세스 거부 오류가 나타납니다. 해결하려면 어떻게 해야 하나요?

간략한 설명

기본 객체 소유권 설정을 사용하는 기존 Amazon S3 버킷의 경우 객체 소유자는 객체를 버킷에 업로드한 AWS 계정입니다. 이러한 기존 버킷의 경우 객체 소유자는 액세스 제어 목록을 첨부하여 객체에 권한을 명시적으로 부여해야 했습니다. 그렇지 않으면 버킷 소유자가 객체에 액세스할 수 없게 됩니다.

S3 객체 소유권을 통해 버킷 소유자는 이제 버킷에 업로드된 모든 객체의 소유권을 관리할 수 있습니다. 기본적으로, 새로 생성된 모든 S3 버킷에는 ‘버킷 소유자 적용’ 설정이 활성화되어 있습니다. 버킷 소유자 적용 설정이 활성화되면 버킷 소유자는 버킷 내 모든 객체의 객체 소유자가 됩니다. 또한 버킷 및 해당 객체의 모든 ACL이 비활성화됩니다.

버킷 소유자 적용(bucket owner enforced) 설정 또는 버킷 소유자 기본(bucket owner preferred) 설정을 활성화하여 기존 버킷에 S3 객체 소유권을 설정할 수도 있습니다. 버킷 소유자 기본 설정이 활성화되면 ACL이 계속 활성화된 상태로 있습니다. 또한 bucket-owner-full-control ACL이 있는 버킷에 업로드된 객체만 버킷 소유자가 소유하게 됩니다. 기존 버킷에서 버킷 소유자 적용 설정을 활성화하면 언제든지 비활성화할 수도 있습니다. (기존 버킷에서 버킷 소유자 적용 설정을 비활성화하면 이전에 적용된 모든 버킷과 객체 ACL이 다시 활성화됩니다.)

버킷 소유자는 IAM 및 버킷 정책을 통해 권한을 관리하면서 새 버킷과 기존 버킷에 대해 버킷 소유자 적용 설정을 사용하는 것이 모범 사례입니다.

중요: 기존 버킷에서 ACL을 비활성화하기 전에 잠재적 영향을 평가하세요. 객체 또는 버킷에 여러 ACL이 있는 경우 버킷과 IAM 정책을 검토 및 업데이트하여 필요한 권한을 부여합니다.

해결 방법

버킷에 대해 ACL을 비활성화하고 버킷의 모든 객체에 대한 소유권을 가져오려면 다음 명령을 실행합니다.

aws s3api put-bucket-ownership-controls --bucket example-bucket --ownership-controls 'Rules=[{ObjectOwnership=BucketOwnerEnforced}]'

버킷에서 ACL을 비활성화할 수 없는 경우 다음 옵션을 사용하여 버킷의 객체에 대한 액세스 권한을 부여합니다.

넣기 또는 복사 작업 중에 액세스 권한 부여

넣기 또는 복사 작업 중에 객체 소유자는 객체의 ACL이 버킷 소유자에게 모든 권한을 제공하도록 지정할 수 있습니다.

입력 작업의 경우, 객체 소유자가 이 명령을 실행하면 됩니다.

aws s3api put-object --bucket destination_DOC-EXAMPLE-BUCKET --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --acl bucket-owner-full-control

참고: AWS 명령줄 인터페이스(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하십시오.

객체 하나의 복사 작업에서는 객체 소유자가 다음 명령 중 하나를 실행하면 됩니다.

aws s3api copy-object --bucket destination_DOC-EXAMPLE-BUCKET --key source_DOC-EXAMPLE-BUCKET/myobject --acl bucket-owner-full-control

또는

aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/myobject s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control

여러 객체의 복사 작업에서는 객체 소유자가 다음 명령을 실행하면 됩니다.

aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/ s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control --recursive

버킷에 객체 추가 후 액세스 권한 부여

객체가 이미 다른 계정의 버킷에 있는 경우 객체 소유자는put-object-acl 명령을 사용하여 버킷 소유자에게 액세스 권한을 부여할 수 있습니다.

aws s3api put-object-acl --bucket destination_DOC-EXAMPLE-BUCKET --key keyname --acl bucket-owner-full-control

객체가 버킷 소유자에게 완전한 제어 권한을 부여하도록 요구

다른 계정에서 본인 버킷에 업로드한 모든 객체는 ACL이 "bucket-owner-full-control"로 설정되어 있어야 한다고 버킷 정책을 통해 요구할 수 있습니다. 이에 대한 예를 보려면 다른 AWS 계정에서 제 S3 버킷에 객체를 업로드할 때 해당 객체의 소유권을 부여하도록 요구하려면 어떻게 해야 합니까?를 참조하세요.