버킷의 객체 소유권 제어 및 ACL 비활성화
버킷의 객체 소유권 제어 및 ACL 비활성화
S3 Object Ownership은 Amazon S3 버킷 수준 설정으로, 버킷에 업로드되는 객체의 소유권을 제어하고 access control list(ACL)을 비활성화하거나 활성화하는 데 사용할 수 있어요. 기본적으로 Object Ownership은 Bucket owner enforced 설정으로 되어 있고 모든 ACL이 비활성화돼요. ACL이 비활성화되면 버킷 소유자가 버킷의 모든 객체를 소유하고, 접근 관리 정책만 사용해 데이터에 대한 접근을 독점적으로 관리해요.
Amazon S3의 대부분의 최신 사용 사례는 더 이상 ACL을 사용할 필요가 없으며, 객체별로 개별적으로 접근을 제어해야 하는 경우가 아니라면 ACL을 비활성화한 채로 두는 것을 권장해요. ACL을 비활성화하면 버킷에 누가 객체를 업로드했는지와 관계없이 정책을 사용해 버킷의 모든 객체에 대한 접근을 더 쉽게 제어할 수 있어요.
Object Ownership에는 버킷에 업로드되는 객체의 소유권을 제어하고 ACL을 비활성화하거나 활성화하는 데 사용할 수 있는 세 가지 설정이 있어요.
ACLs disabled (ACL 비활성화)
- Bucket owner enforced (기본값) – ACL이 비활성화되고 버킷 소유자가 버킷의 모든 객체를 자동으로 소유하며 전체 제어 권한을 가져요. ACL은 더 이상 S3 버킷의 데이터에 대한 권한에 영향을 주지 않아요. 버킷은 정책을 사용해 접근 제어를 정의해요.
ACLs enabled (ACL 활성화)
- Bucket owner preferred – 버킷 소유자가 다른 계정이
bucket-owner-full-controlcanned ACL로 버킷에 쓴 새 객체를 소유하고 전체 제어 권한을 가져요. - Object writer – 객체를 업로드한 AWS 계정이 객체를 소유하고 전체 제어 권한을 가지며, ACL을 통해 다른 사용자에게 접근 권한을 부여할 수 있어요.
S3의 대부분의 최신 사용 사례에서는 Bucket owner enforced 설정을 적용해 ACL을 비활성화한 채로 두고, 필요할 때 버킷 정책을 사용해 계정 밖의 사용자와 데이터를 공유할 것을 권장해요. 이 접근 방식은 권한 관리를 단순화해요.
새로 만든 버킷과 이미 존재하는 버킷 모두에서 ACL을 비활성화할 수 있어요. 새로 만든 버킷은 기본적으로 ACL이 비활성화돼요. 이미 객체가 들어 있는 기존 버킷의 경우, ACL을 비활성화하면 객체 및 버킷 ACL이 더 이상 접근 평가의 일부가 아니며 접근이 정책에 따라 허용되거나 거부돼요. 기존 버킷에서는 비활성화한 후 언제든지 ACL을 다시 활성화할 수 있으며, 이전의 버킷 및 객체 ACL이 복원돼요.
ACL을 비활성화하기 전에 버킷 정책을 검토해 계정 밖에서 버킷에 접근을 부여하려는 모든 방법을 포괄하는지 확인할 것을 권장해요. ACL을 비활성화한 뒤에는 버킷이 ACL을 지정하지 않은 PUT 요청이나 버킷 소유자 전체 제어 ACL(예: bucket-owner-full-control canned ACL 또는 이 ACL을 XML로 표현한 동등한 형태)이 있는 PUT 요청만 수락해요. 버킷 소유자 전체 제어 ACL을 지원하는 기존 애플리케이션은 영향을 받지 않아요. 다른 ACL(예: 특정 AWS 계정에 대한 사용자 지정 권한)이 포함된 PUT 요청은 실패하고 AccessControlListNotSupported 오류 코드와 함께 400 오류를 반환해요.
반대로 Bucket owner preferred 설정이 있는 버킷은 버킷 및 객체 ACL을 계속 수락하고 존중해요. 이 설정에서는 bucket-owner-full-control canned ACL로 작성된 새 객체가 객체 작성자가 아니라 버킷 소유자가 자동으로 소유해요. 다른 모든 ACL 동작은 그대로 유지돼요. 모든 Amazon S3 PUT 작업이 bucket-owner-full-control canned ACL을 포함하도록 요구하려면 이 ACL을 사용하는 객체 업로드만 허용하는 버킷 정책을 추가할 수 있어요.
버킷에 적용된 Object Ownership 설정을 확인하려면 Amazon S3 Storage Lens 지표를 사용할 수 있어요. S3 Storage Lens는 조직 전체에서 객체 스토리지 사용 및 활동에 대한 가시성을 확보할 수 있는 클라우드 스토리지 분석 기능이에요. 자세한 내용은 S3 Storage Lens를 사용해 Object Ownership 설정 찾기를 참고하세요.
참고
디렉터리 버킷과 함께 Amazon S3 Express One Zone 스토리지 클래스를 사용하는 방법에 대한 자세한 내용은 S3 Express One Zone 및 디렉터리 버킷 다루기를 참고하세요.
Object Ownership 설정
다음 표는 각 Object Ownership 설정이 ACL, 객체, 객체 소유권, 객체 업로드에 미치는 영향을 보여 줘요.
| 설정 | 적용 대상 | 객체 소유권에 미치는 영향 | ACL에 미치는 영향 | 허용되는 업로드 |
|---|---|---|---|---|
| Bucket owner enforced (기본값) | 모든 새 객체 및 기존 객체 | 버킷 소유자가 모든 객체를 소유해요. | ACL이 비활성화되고 더 이상 버킷의 접근 권한에 영향을 주지 않아요. ACL을 설정하거나 업데이트하는 요청은 실패해요. 하지만 ACL을 읽는 요청은 지원돼요. | 버킷 소유자 전체 제어 ACL이 있는 업로드 또는 ACL을 지정하지 않은 업로드 |
| Bucket owner preferred | 새 객체 | 객체 업로드에 bucket-owner-full-control canned ACL이 포함되면 버킷 소유자가 객체를 소유해요. 다른 ACL로 업로드된 객체는 작성 계정이 소유해요. |
ACL을 업데이트하고 권한을 부여할 수 있어요. | 모든 업로드 |
| Object writer | 새 객체 | 객체 작성자가 객체를 소유해요. | ACL을 업데이트하고 권한을 부여할 수 있어요. | 모든 업로드 |
ACL 비활성화로 도입되는 변경 사항
Object Ownership에 Bucket owner enforced 설정을 적용하면 ACL이 비활성화되고, 추가 작업 없이도 버킷의 모든 객체를 자동으로 소유하고 전체 제어 권한을 가지게 돼요. Bucket owner enforced는 모든 새로 만든 버킷의 기본 설정이에요.
Bucket owner enforced 설정이 적용된 뒤에는 세 가지 변경 사항이 나타나요.
- 모든 버킷 ACL과 객체 ACL이 비활성화되어 버킷 소유자로서의 내게 전체 접근 권한이 부여돼요. 버킷이나 객체에 대해 ACL 읽기 요청을 수행하면 전체 접근 권한이 버킷 소유자에게만 부여된 것을 볼 수 있어요.
- 버킷 소유자로서 버킷의 모든 객체를 자동으로 소유하고 전체 제어 권한을 가져요.
- ACL이 더 이상 버킷의 접근 권한에 영향을 주지 않아요. 결과적으로 데이터에 대한 접근 제어는 AWS Identity and Access Management(IAM) 신원 기반 정책, Amazon S3 버킷 정책, VPC 엔드포인트 정책, Organizations 서비스 제어 정책(SCP) 또는 리소스 제어 정책(RCP) 같은 정책에 기반해요.
S3 버전 관리(S3 Versioning)를 사용한다면 버킷 소유자가 버킷의 모든 객체 버전을 소유하고 전체 제어 권한을 가져요. Bucket owner enforced 설정을 적용해도 객체의 새 버전이 추가되지는 않아요.
버킷 소유자 전체 제어 ACL을 사용하거나 ACL을 지정하지 않은 경우에만 새 객체를 버킷에 업로드할 수 있어요. 다른 ACL을 지정하는 객체 업로드는 실패해요. 자세한 내용은 문제 해결을 참고하세요.
다음 AWS Command Line Interface(AWS CLI)를 사용한 PutObject 작업 예제는 bucket-owner-full-control canned ACL을 포함하므로 ACL이 비활성화된 버킷에 객체를 업로드할 수 있어요.
aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file --acl bucket-owner-full-control
다음 PutObject 작업은 ACL을 지정하지 않으므로 역시 ACL이 비활성화된 버킷에서 성공해요.
aws s3api put-object --bucket amzn-s3-demo-bucket --key key-name --body path-to-file
참고
업로드 후 다른 AWS 계정이 객체에 접근해야 한다면 버킷 정책을 통해 그 계정에 추가 권한을 부여해야 해요. 자세한 내용은 정책을 사용해 Amazon S3 리소스 접근을 관리하는 연습을 참고하세요.
ACL 다시 활성화
언제든지 Bucket owner enforced 설정에서 다른 Object Ownership 설정으로 변경해 ACL을 다시 활성화할 수 있어요. Bucket owner enforced 설정을 적용하기 전에 권한 관리를 위해 객체 ACL을 사용했고 이 객체 ACL 권한을 버킷 정책으로 마이그레이션하지 않았다면, ACL을 다시 활성화한 뒤 이 권한들이 복원돼요. 또한 Bucket owner enforced 설정이 적용된 동안 버킷에 작성된 객체는 여전히 버킷 소유자가 소유해요.
예를 들어 Bucket owner enforced 설정에서 다시 Object writer 설정으로 변경하면, 버킷 소유자인 나는 이전에 다른 AWS 계정이 소유했던 객체를 더 이상 소유하고 전체 제어할 수 없어요. 대신 업로드한 계정이 이 객체들을 다시 소유해요. 다른 계정이 소유한 객체는 권한에 ACL을 사용하므로 이 객체들에 대한 권한을 부여하는 데 정책을 사용할 수 없어요. 하지만 Bucket owner enforced 설정이 적용된 동안 버킷에 작성된 객체는 버킷 소유자인 내가 계속 소유해요. ACL을 다시 활성화해도 이 객체들은 객체 작성자가 소유하지 않아요.
AWS Management Console, AWS Command Line Interface(CLI), REST API, AWS SDK를 사용해 ACL을 활성화하고 관리하는 방법은 ACL 구성을 참고하세요.
ACL 비활성화를 위한 사전 요구 사항
기존 버킷에 대해 ACL을 비활성화하기 전에 다음 사전 요구 사항을 완료하세요.
- 버킷 및 객체 ACL을 검토하고 ACL 권한을 마이그레이션합니다.
- 인증에 ACL이 필요했던 요청을 식별합니다.
- ACL 관련 조건 키를 사용하는 버킷 정책을 검토하고 업데이트합니다.
Object Ownership 권한
버킷에 Object Ownership 설정을 적용, 업데이트, 또는 삭제하려면 s3:PutBucketOwnershipControls 권한이 필요해요. 버킷의 Object Ownership 설정을 반환하려면 s3:GetBucketOwnershipControls 권한이 필요해요. 자세한 내용은 버킷을 만들 때 Object Ownership 설정 및 S3 버킷의 Object Ownership 설정 보기를 참고하세요.
모든 새 버킷에 대한 ACL 비활성화
기본적으로 모든 새 버킷은 Bucket owner enforced 설정이 적용된 채 만들어지고 ACL이 비활성화돼요. ACL을 비활성화한 채로 두는 것을 권장해요. 일반적으로는 ACL 대신 S3 리소스 기반 정책(버킷 정책 및 액세스 포인트 정책)이나 IAM 정책을 접근 제어에 사용할 것을 권장해요. 정책은 더 단순하고 유연한 접근 제어 옵션이에요. 버킷 정책과 액세스 포인트 정책을 사용하면 Amazon S3 리소스에 대한 모든 요청에 광범위하게 적용되는 규칙을 정의할 수 있어요.
복제와 Object Ownership
S3 복제를 사용하고 원본 및 대상 버킷이 다른 AWS 계정이 소유할 때, Object Ownership의 Bucket owner enforced 설정으로 ACL을 비활성화해 복제본 소유권을 대상 버킷을 소유한 AWS 계정으로 변경할 수 있어요. 이 설정은 s3:ObjectOwnerOverrideToBucketOwner 권한 없이도 기존 소유자 재정의 동작을 모방해요. Bucket owner enforced 설정으로 대상 버킷에 복제되는 모든 객체는 대상 버킷 소유자가 소유해요. 복제 구성의 소유자 재정의 옵션에 대한 자세한 내용은 복제본 소유자 변경을 참고하세요.
Object Ownership 설정
Object Ownership 설정은 Amazon S3 콘솔, AWS CLI, AWS SDK, Amazon S3 REST API, AWS CloudFormation을 사용해 적용할 수 있어요. Object Ownership을 지원하는 REST API 및 AWS CLI 명령은 다음과 같아요.
| REST API | AWS CLI | 설명 |
|---|---|---|
| PutBucketOwnershipControls | put-bucket-ownership-controls | 기존 S3 버킷의 Object Ownership 설정을 만들거나 수정해요. |
| CreateBucket | create-bucket | x-amz-object-ownership 요청 헤더를 사용해 Object Ownership 설정을 지정해 버킷을 만들어요. |
| GetBucketOwnershipControls | get-bucket-ownership-controls | Amazon S3 버킷의 Object Ownership 설정을 검색해요. |
| DeleteBucketOwnershipControls | delete-bucket-ownership-controls | Amazon S3 버킷의 Object Ownership 설정을 삭제해요. |
Object Ownership 설정 적용 및 작업에 대한 자세한 내용은 다음 주제를 참고하세요.
- ACL 비활성화를 위한 사전 요구 사항
- 버킷을 만들 때 Object Ownership 설정
- 기존 버킷에 Object Ownership 설정
- S3 버킷의 Object Ownership 설정 보기
- 모든 새 버킷에 대해 ACL 비활성화 및 Object Ownership 적용
- 문제 해결
출처: 문서
본문
Object Ownership settings (Object Ownership 설정)
세 가지 설정(Bucket owner enforced, Bucket owner preferred, Object writer)이 어떤 영향을 미치는지와, ACL 비활성화 시의 변경 사항, ACL 다시 활성화, 사전 요구 사항, 권한, 복제 시 동작을 설명했어요.