객체 소유권 제어 및 버킷에 대해 ACL 사용 중지 - Amazon Simple Storage Service

객체 소유권 제어 및 버킷에 대해 ACL 사용 중지

S3 객체 소유권은 액세스 제어 목록(ACL)을 사용 중지하고 버킷에 있는 모든 객체의 소유권을 가져오는 데 사용할 수 있는 Amazon S3 버킷 수준 설정으로, Amazon S3에 저장된 데이터에 대한 액세스 관리를 간소화합니다. 기본적으로 다른 AWS 계정이 S3 버킷에 객체를 업로드하면 해당 계정(객체 작성자)이 객체를 소유하고 객체에 액세스할 수 있으며 ACL을 통해 다른 사용자에게 객체에 대한 액세스 권한을 부여할 수 있습니다. 객체 소유권을 사용하여 이 기본 동작을 변경할 수 있습니다. 객체 소유권을 사용하면 ACL이 사용 중지되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하게 됩니다. 결과적으로 데이터에 대한 액세스 제어는 IAM 정책, S3 버킷 정책, Virtual Private Cloud(VPC) 엔드포인트 정책 및 AWS Organizations 서비스 제어 정책(SCP)과 같은 정책을 기반으로 합니다.

Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없으며, 각 객체에 대해 액세스를 개별적으로 제어해야 하는 비정상적인 상황을 제외하고는 ACL을 사용 중지하는 것이 좋습니다. 객체 소유권으로 ACL을 사용 중지하고 액세스 제어 정책을 사용할 수 있습니다. ACL을 사용 중지하면 다른 AWS 계정이 업로드한 객체로 버킷을 쉽게 유지 관리할 수 있습니다. 버킷 소유자는 버킷의 모든 객체를 소유하고 정책을 사용하여 객체에 대한 액세스를 관리할 수 있습니다.

객체 소유권에는 버킷에 업로드된 객체의 소유권을 제어하고 ACL을 사용 중지하거나 사용하는 다음과 같은 세 가지 설정이 있습니다.

ACL 사용 중지됨

  • 버킷 소유자 시행(Bucket owner enforced)(권장) – ACL이 사용 중지되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하고 완전히 제어합니다. ACL은 더 이상 S3 버킷의 데이터에 대한 권한에 영향을 주지 않습니다. 버킷은 정책을 사용하여 액세스 제어를 정의합니다.

ACL 사용됨

  • 버킷 소유자 기본(Bucket owner preferred) – 버킷 소유자가 bucket-owner-full-control 미리 제공 ACL을 사용하여 다른 계정이 버킷에 작성하는 새 객체를 소유하고 완전히 제어합니다.

  • 객체 작성자(Object writer)(기본값) – 객체를 업로드하는 AWS 계정은 객체를 소유하고 완전히 제어하며 ACL을 통해 다른 사용자에게 이에 대한 액세스 권한을 부여할 수 있습니다.

S3의 최신 사용 사례 대부분의 경우 버킷 소유자 시행 설정을 선택하여 ACL을 사용 중지하고 버킷 정책을 사용하여 필요에 따라 계정 외부의 사용자와 데이터를 공유하는 것이 좋습니다. 이 접근 방식은 권한 관리와 감사를 단순화합니다. 새로 생성된 버킷과 기존 버킷 모두에서 ACL을 사용 중지할 수 있습니다. 이미 객체가 있는 기존 버킷의 경우 ACL을 사용 중지하면 객체 및 버킷 ACL이 더 이상 액세스 평가의 일부가 아니며 정책에 따라 액세스가 부여되거나 거부됩니다. 기존 버킷의 경우 ACL을 사용 중지한 후 언제든지 다시 사용 설정할 수 있으며 기존 버킷과 객체 ACL이 복원됩니다.

ACL을 사용 중지하기 전에 버킷 정책을 검토하여 계정 외부에서 버킷에 대한 액세스 권한을 부여하려는 모든 방법을 포함하는지 확인하는 것이 좋습니다. 버킷 ACL을 기본값으로 재설정해야 합니다(버킷 소유자에 대한 전체 제어 권한). ACL을 사용 중지하면 버킷은 ACL을 지정하지 않는 PUT 요청만 수락하거나 버킷 소유자 전체 제어 ACL이 있는 PUT 요청(예: bucket-owner-full-control 미리 제공 ACL 또는 XML로 표현된 이 ACL의 동등한 형식)을 수락합니다. 버킷 소유자 전체 제어 ACL을 지원하는 기존 애플리케이션은 영향을 받지 않습니다. 다른 ACL(예: 특정 AWS 계정에 대한 사용자 정의 권한 부여)이 포함된 PUT 요청은 실패하고 오류 코드 AccessControlListNotSupported와 함께 400 오류를 반환합니다.

반대로 버킷 소유자 기본 설정이 있는 버킷은 버킷 및 객체 ACL을 계속 수락하고 준수합니다. 이 설정을 사용하면 bucket-owner-full-control 미리 제공 ACL로 작성된 새 객체는 객체 작성자가 아닌 버킷 소유자가 자동으로 소유합니다. 다른 모든 ACL 동작은 그대로 유지됩니다. 모든 Amazon S3 PUT 작업에 bucket-owner-full-control 미리 제공 ACL을 포함하도록 하려면 이 ACL을 사용하여 객체 업로드만 허용하는 버킷 정책을 추가할 수 있습니다.

객체 소유권 설정

이 표는 각 객체 소유권 설정이 ACL, 객체, 객체 소유권 및 객체 업로드에 미치는 영향을 보여줍니다.

설정 적용 대상 객체 소유권에 미치는 영향 ACL에 미치는 영향 업로드 수락됨
버킷 소유자 시행됨(권장) 모든 새 객체 및 기존 객체 버킷 소유자가 모든 객체를 소유합니다.

ACL이 사용 중지되어 더 이상 버킷에 대한 액세스 권한에 영향을 미치지 않습니다. ACL 설정 또는 업데이트 요청이 실패합니다. 그러나 ACL 읽기 요청은 지원됩니다.

버킷 소유자는 전체 소유권과 제어 권한을 가집니다.

객체 작성자가 더 이상 전체 소유권과 제어 권한을 갖지 않습니다.

버킷 소유자 전체 제어 ACL이 있는 업로드 또는 ACL을 지정하지 않는 업로드
버킷 소유자 기본 새 객체 객체 업로드에 bucket-owner-full-control 미리 제공 ACL이 포함된 경우 버킷 소유자가 객체를 소유합니다.

다른 ACL과 함께 업로드된 객체는 쓰기 계정이 소유합니다.

ACL이 업데이트 가능하며 권한을 부여할 수 있습니다.

객체 업로드에 bucket-owner-full-control 미리 제공 ACL이 포함된 경우 버킷 소유자는 전체 제어 액세스 권한을 가지며 객체 작성자는 더 이상 전체 제어 액세스 권한을 갖지 않습니다.

모든 업로드
객체 작성자(기본값) 새 객체 객체 작성자가 객체를 소유합니다.

ACL이 업데이트 가능하며 권한을 부여할 수 있습니다.

객체 작성자가 전체 제어 액세스 권한을 가집니다.

모든 업로드

ACL 사용 중지로 인한 변경 사항

객체 소유권에 대해 버킷 소유자 시행 설정을 적용하여 ACL을 사용 중지하면 추가 작업 없이 버킷의 모든 객체를 자동으로 소유하고 완전히 제어할 수 있습니다. 이 설정을 적용하면 세 가지 변경 사항이 표시됩니다.

  • 모든 버킷 ACL 및 객체 ACL이 사용 중지되어 버킷 소유자로서 사용자에게 전체 액세스 권한이 부여됩니다. 버킷 또는 객체에 대해 읽기 ACL 요청을 수행하면 버킷 소유자에게만 전체 액세스 권한이 부여됩니다.

  • 버킷 소유자가 버킷의 모든 객체를 자동으로 소유하고 완전히 제어할 수 있습니다.

  • ACL이 더 이상 버킷에 대한 액세스 권한에 영향을 미치지 않습니다. 결과적으로 데이터에 대한 액세스 제어는 IAM 정책, S3 버킷 정책, VPC 엔드포인트 정책 및 조직 SCP와 같은 정책을 기반으로 합니다.


				ACL을 사용 중지하기 위해 버킷 소유자 시행 설정을 적용하면 어떻게 되는지 보여주는 다이어그램입니다.

S3 버전 관리를 사용하는 경우 버킷 소유자는 버킷의 모든 객체 버전을 소유하고 완전히 제어합니다. 버킷 소유자 시행 설정을 적용해도 객체의 새 버전이 추가되지 않습니다.

새 객체는 버킷 소유자 전체 제어 ACL을 사용하거나 ACL을 지정하지 않는 경우에만 버킷에 업로드할 수 있습니다. 객체 업로드가 다른 ACL을 지정하면 실패합니다. 자세한 정보는 문제 해결을 참조하십시오.

AWS Command Line Interface(AWS CLI)를 사용하는 다음 예제 PutObject 작업에는 bucket-owner-full-control 미리 제공 ACL이 포함되어 있으므로 객체를 ACL이 사용 중지된 버킷에 업로드할 수 있습니다.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file --acl bucket-owner-full-control

다음 PutObject 작업은 ACL을 지정하지 않으므로 ACL이 사용 중지된 버킷에서도 성공합니다.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key key-name --body path-to-file
참고

다른 AWS 계정이 업로드 후 객체에 액세스해야 하는 경우 버킷 정책을 통해 해당 계정에 추가 권한을 부여해야 합니다. 자세한 정보는 예제 안내: Amazon S3 리소스에 대한 액세스 관리을 참조하십시오.

ACL 다시 사용 설정

언제든지 버킷 소유자 시행 설정에서 다른 객체 소유권 설정으로 변경하여 ACL을 다시 사용 설정할 수 있습니다. 버킷 소유자 시행 설정을 적용하기 전에 권한 관리를 위해 객체 ACL을 사용하고 이러한 객체 ACL 권한을 버킷 정책으로 마이그레이션하지 않은 경우 ACL을 다시 사용 설정하면 이러한 권한이 복원됩니다. 또한 버킷 소유자 시행 설정이 적용된 동안 버킷에 작성된 객체는 여전히 버킷 소유자가 소유합니다.

예를 들어 버킷 소유자 시행 설정에서 다시 객체 작성자로 변경하면 버킷 소유자는 더 이상 다른 AWS 계정이 소유한 객체를 소유하지 않으며 해당 객체에 대한 전체 제어 권한을 갖게 됩니다. 대신 업로드하는 계정이 이러한 객체를 다시 소유합니다. 다른 계정이 소유한 객체는 권한에 ACL을 사용하므로 정책을 사용하여 이러한 객체에 대한 권한을 부여할 수 없습니다. 그러나 버킷 소유자는 버킷 소유자 시행 설정이 적용된 동안 버킷에 작성된 모든 객체를 계속 소유합니다. 이러한 객체는 ACL을 다시 사용 설정하더라도 객체 작성자가 소유하지 않습니다.

ACL 사용 중지를 위한 사전 조건

다음은 기존 버킷에 대해 ACL을 사용 중지하기 위한 사전 조건입니다.

버킷 및 객체 ACL 검토와 ACL 권한 마이그레이션

ACL을 사용 중지하면 버킷 및 객체 ACL에서 부여한 권한이 더 이상 액세스에 영향을 미치지 않습니다. ACL을 사용 중지하기 전에 버킷 및 객체 ACL을 검토합니다. 버킷 ACL이 계정 외부의 다른 사용자에게 읽기 또는 쓰기 권한을 부여하는 경우 버킷 소유자 시행 설정을 적용하려면 먼저 이러한 권한을 버킷 정책으로 마이그레이션해야 합니다. 읽기 또는 쓰기 액세스 권한을 계정 외부로 부여하는 버킷 ACL을 마이그레이션하지 않으면 버킷 소유자 시행 설정 적용 요청이 실패하고 InvalidBucketAclWithObjectOwnership 오류 코드를 반환합니다.

예를 들어 서버 액세스 로그를 수신하는 버킷에 대해 ACL을 사용 중지하려면 S3 로그 전달 그룹에 대한 버킷 ACL 권한을 버킷 정책의 로깅 서비스 보안 주체로 마이그레이션해야 합니다. 자세한 정보는 서버 접근 로깅을 위해 S3 로그 전달 그룹에 대한 액세스 권한 부여을 참조하십시오.

객체 작성자가 업로드한 객체에 대한 전체 제어 권한을 유지하도록 하려면 객체 작성자가 사용 사례에 가장 적합한 객체 소유권 설정입니다. 개별 객체 수준에서 액세스를 제어하려면 버킷 소유자 기본이 최선의 선택입니다. 이러한 사용 사례는 흔하지 않습니다.

ACL을 검토하고 ACL 권한을 버킷 정책으로 마이그레이션하려면 ACL 사용 중지를 위한 사전 조건 섹션을 참조하세요.

ACL 관련 조건 키를 사용하는 버킷 정책 검토 및 업데이트

버킷 소유자 시행 설정을 적용하여 ACL을 사용 중지한 후에는 요청이 버킷 소유자 전체 제어 ACL을 사용하거나 ACL을 지정하지 않는 경우에만 버킷에 새 객체를 업로드할 수 있습니다. ACL을 사용 중지하기 전에 ACL 관련 조건 키에 대한 버킷 정책을 검토합니다.

버킷 정책이 ACL 관련 조건 키를 사용하여 bucket-owner-full-control 미리 제공 ACL(예: s3:x-amz-acl)을 요구하는 경우 버킷 정책을 업데이트할 필요가 없습니다. 다음 버킷 정책은 s3:x-amz-acl을 사용하여 S3 PutObject 요청에 대해 bucket-owner-full-control 미리 제공 ACL을 요구합니다. 이 정책은 여전히 객체 작성자가 bucket-owner-full-control 미리 제공 ACL을 지정하도록 요구합니다. 그러나 ACL이 사용 중지된 버킷은 여전히 이 ACL을 수락하므로 클라이언트 측 변경 없이 요청이 계속 성공합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with bucket owner full control", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

그러나 버킷 정책에서 다른 ACL이 필요한 ACL 관련 조건 키를 사용하는 경우 이 조건 키를 제거해야 합니다. 이 예제 버킷 정책은 S3 PutObject 요청을 위해 public-read ACL을 필요로 하므로 ACL 사용 중지 전에 업데이트되어야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Only allow writes to my bucket with public read access", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/ExampleUser" ] }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

객체 소유권 권한

버킷에 대한 객체 소유권 설정을 적용, 업데이트 또는 삭제하려면 s3:PutBucketOwnershipControls 권한이 필요합니다. 버킷에 대한 객체 소유권 설정을 반환하려면 s3:GetBucketOwnershipControls 권한이 필요합니다. 자세한 정보는 버킷을 생성할 때 객체 소유권 설정S3 버킷에 대한 객체 소유권 설정 보기 단원을 참조하십시오.

모든 새 버킷에 대해 ACL 사용 중지

IAM 또는 조직 정책을 사용하여 사용 중지된 ACL로 모든 새 버킷을 생성하도록 요구할 수 있습니다. IAM 또는 조직 정책에서 s3:x-amz-object-ownership 조건 키를 사용하여 새로 생성된 모든 버킷에 대한 객체 소유권을 위해 버킷 소유자 시행 설정을 요구할 수 있습니다. 버킷 소유자 시행 설정을 요구하여 계정 또는 조직의 모든 새 버킷에 대해 ACL이 사용 중지되도록 합니다. 자세한 정보는 모든 새 버킷에 대해 ACL 사용 중지(버킷 소유자 시행)을 참조하십시오.

복제 및 객체 소유권

S3 복제를 사용하고 서로 다른 AWS 계정이 소스 버킷과 대상 버킷을 소유하는 경우 ACL을 사용 중지하여(객체 소유권에 대해 버킷 소유자 시행 설정 사용) 복제본 소유권을 대상 버킷을 소유하는 AWS 계정으로 변경할 수 있습니다. 이 설정은 s3:ObjectOwnerOverrideToBucketOwner 권한 없이 기존 소유자 재정의 동작을 모방합니다. 버킷 소유자 시행 설정으로 대상 버킷에 복제되는 모든 객체는 대상 버킷 소유자가 소유합니다. 복제 구성의 소유자 재정의 옵션에 대한 자세한 내용은 복제본 소유자 변경 섹션을 참조하세요.

객체 소유권에 대해 기본 객체 작성자 설정을 사용하거나 대상 버킷에 대해 버킷 소유자 기본 설정을 적용하는 경우 Amazon S3 복제 소유자 재정의 옵션을 사용하여 복제된 객체의 소유권을 대상 버킷 소유자에게 이전할 수 있습니다.

객체 소유권 설정

S3 콘솔, AWS CLI, AWS SDK, Amazon S3 REST API 또는 AWS CloudFormation을 사용하여 객체 소유권 설정을 적용할 수 있습니다. 다음 REST API 및 AWS CLI 명령은 객체 소유권을 지원합니다.

REST API AWS CLI 설명
PutBucketOwnershipControls put-bucket-ownership-controls 기존 S3 버킷에 대한 객체 소유권 설정을 생성하거나 수정합니다.
CreateBucket create-bucket x-amz-object-ownership 요청 헤더를 사용하여 객체 소유권 설정을 지정하는 버킷을 생성합니다.
GetBucketOwnershipControls get-bucket-ownership-controls Amazon S3 버킷에 대한 객체 소유권 설정을 검색합니다.
DeleteBucketOwnershipControls delete-bucket-ownership-controls Amazon S3 버킷에 대한 객체 소유권 설정을 삭제합니다.

객체 소유권 설정 적용 및 작업에 대한 자세한 내용은 다음 주제를 참조하세요.