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

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

S3 객체 소유권은 버킷에 업로드되는 객체의 소유권을 제어하고 액세스 제어 목록(ACL)을 비활성화 또는 활성화하는 데 사용할 수 있는 Amazon S3 버킷 수준 설정입니다. 기본적으로 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 모든 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 액세스 관리 정책을 사용하여 데이터에 대한 액세스를 독점적으로 관리합니다.

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

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

ACL 사용 중지됨
  • 버킷 소유자 적용(기본값) – 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을 사용하여 객체 업로드만 허용하는 버킷 정책을 추가하면 됩니다.

버킷에 적용되는 객체 소유권 설정을 확인하려면 Amazon S3 스토리지 렌즈 지표를 사용하면 됩니다. S3 스토리지 렌즈는 조직 전반에서 객체 스토리지 사용 및 활동에 대한 가시성을 확보하는 데 사용할 수 있는 클라우드 스토리지 분석 기능입니다. 자세한 내용은 Using S3 스토리지 렌즈 to audit Object Ownership settings(S3 스토리지 렌즈를 사용하여 객체 소유권 설정 감사)를 참조하십시오.

참고

Amazon S3 Express One Zone 스토리지 클래스를 디렉터리 버킷과 함께 사용하는 방법에 대한 자세한 내용은 디렉터리 버킷 및 S3 Express One Zone디렉터리 버킷 개요 섹션을 참조하세요.

객체 소유권 설정

이 표는 각 객체 소유권 설정이 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 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 다시 사용 설정

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

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

AWS Management Console, AWS Command Line Interface(CLI), REST API 또는 AWS SDK를 사용하여 ACL을 활성화하고 관리하는 방법은 ACL 구성 페이지를 참조하십시오.

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

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

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

ACL을 사용 중지하면 버킷 및 객체 ACL에서 부여한 권한이 더 이상 액세스에 영향을 미치지 않습니다. ACL을 사용 중지하기 전에 버킷 및 객체 ACL을 검토합니다.

버킷 ACL이 계정 외부의 다른 사용자에게 읽기 또는 쓰기 권한을 부여하는 경우 버킷 소유자 적용 설정을 적용하려면 먼저 이러한 권한을 버킷 정책으로 마이그레이션해야 합니다. 읽기 또는 쓰기 액세스 권한을 계정 외부로 부여하는 버킷 ACL을 마이그레이션하지 않으면 버킷 소유자 적용 설정을 적용하기 위한 요청이 실패하고 InvalidBucketAclWithObjectOwnership 오류 코드를 반환합니다.

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

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

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

인증을 위해 ACL이 필요한 모든 요청 식별

인증을 위해 ACL이 필요한 Amazon S3 요청을 식별하려면, Amazon S3 서버 액세스 로그 또는 aclRequired 내의 AWS CloudTrail 값을 사용하면 됩니다. 요청에 권한 부여를 위해 ACL이 필요하거나 ACL을 지정하는 PUT 요청이 있는 경우, 문자열은 Yes입니다. ACL이 필요하지 않았거나, bucket-owner-full-control 미리 제공된 ACL을 설정하고 있거나, 버킷 정책에 의해 요청이 허용되는 경우, Amazon S3 서버 액세스 로그에서 aclRequired 값 문자열은 "-"이며 CloudTrail에는 표시되지 않습니다. 예상되는 aclRequired 값에 대한 자세한 내용은 일반적인 일반적인 Amazon S3 요청에 대한 aclRequired 값을 참조하십시오.

bucket-owner-full-control 미리 제공된 ACL을 제외하고 ACL 기반 권한을 부여하는 헤더가 포함된 PutBucketAcl 또는 PutObjectAcl 요청이 있는 경우, ACL을 비활성화하려면 먼저 해당 헤더를 제거해야 합니다. 그렇지 않으면 요청이 실패합니다.

권한 부여를 위해 ACL이 필요한 다른 모든 요청의 경우, 해당 ACL 권한을 버킷 정책으로 마이그레이션하십시오. 그런 다음 버킷 소유자 적용 설정을 활성화하기 전에 모든 버킷 ACL을 제거하십시오.

참고

객체 ACL을 제거하지 마십시오. 그렇지 않으면 객체 ACL에 권한을 의존하는 애플리케이션이 액세스 권한을 잃게 됩니다.

권한 부여를 위해 ACL이 필요한 요청이 없는 것으로 확인되면 ACL을 비활성화할 수 있습니다. 요청 식별에 대한 자세한 내용은 Amazon S3 서버 액세스 로그를 사용하여 요청 식별 및 CloudTrail을 사용하여 Amazon S3 요청 식별 섹션을 참조하십시오.

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:::amzn-s3-demo-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:::amzn-s3-demo-bucket/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

객체 소유권 권한

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

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

기본적으로 모든 새 버킷은 버킷 소유자 적용 설정이 적용된 상태로 생성되며 ACL은 비활성화됩니다. ACL을 비활성화된 상태로 유지하는 것이 좋습니다. 일반적으로 ACL 대신 액세스 제어를 위해 S3 리소스 기반 정책(버킷 정책 및 액세스 포인트 정책) 또는 IAM 정책을 사용하는 것이 좋습니다. 정책은 단순하고 더 유연한 액세스 제어 옵션입니다. 버킷 정책과 액세스 포인트 정책을 사용하면 Amazon S3 리소스에 대한 모든 요청에 광범위하게 적용되는 규칙을 정의할 수 있습니다.

복제 및 객체 소유권

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

객체 소유권 설정

Amazon 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 버킷에 대한 객체 소유권 설정을 삭제합니다.

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