

# 객체 소유권 제어 및 버킷에 대해 ACL 사용 중지
<a name="about-object-ownership"></a>

S3 객체 소유권은 버킷에 업로드되는 객체의 소유권을 제어하고 [액세스 제어 목록(ACL)](acl-overview.md)을 비활성화 또는 활성화하는 데 사용할 수 있는 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을 사용하여 객체 업로드만 허용하는 [버킷 정책을 추가](ensure-object-ownership.md#ensure-object-ownership-bucket-policy)하면 됩니다.

버킷에 적용되는 객체 소유권 설정을 확인하려면 Amazon S3 스토리지 렌즈 지표를 사용하면 됩니다. S3 스토리지 렌즈는 조직 전반에서 객체 스토리지 사용 및 활동에 대한 가시성을 확보하는 데 사용할 수 있는 클라우드 스토리지 분석 기능입니다. 자세한 내용은 [Using S3 스토리지 렌즈 to audit Object Ownership settings](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-access-management.html?icmpid=docs_s3_user_guide_about-object-ownership.html)(S3 스토리지 렌즈를 사용하여 객체 소유권 설정 감사)를 참조하십시오.

**참고**  
Amazon S3 Express One Zone 스토리지 클래스를 디렉터리 버킷과 함께 사용하는 방법에 대한 자세한 내용은 [S3 Express One Zone](directory-bucket-high-performance.md#s3-express-one-zone) 및 [디렉터리 버킷 작업](directory-buckets-overview.md) 섹션을 참조하세요.

## 객체 소유권 설정
<a name="object-ownership-overview"></a>

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


| 설정 | 적용 대상 | 객체 소유권에 미치는 영향 | ACL에 미치는 영향 | 업로드 수락됨 | 
| --- | --- | --- | --- | --- | 
| 버킷 소유자 적용(기본값) | 모든 새 객체 및 기존 객체 | 버킷 소유자가 모든 객체를 소유합니다. |  ACL이 사용 중지되어 더 이상 버킷에 대한 액세스 권한에 영향을 미치지 않습니다. ACL 설정 또는 업데이트 요청이 실패합니다. 그러나 ACL 읽기 요청은 지원됩니다. 버킷 소유자는 전체 소유권과 제어 권한을 가집니다. 객체 작성자가 더 이상 전체 소유권과 제어 권한을 갖지 않습니다.  | 버킷 소유자 전체 제어 ACL이 있는 업로드 또는 ACL을 지정하지 않는 업로드 | 
| 버킷 소유자 기본 | 새 객체 | 객체 업로드에 bucket-owner-full-control 미리 제공 ACL이 포함된 경우 버킷 소유자가 객체를 소유합니다.다른 ACL과 함께 업로드된 객체는 쓰기 계정이 소유합니다. |  ACL이 업데이트 가능하며 권한을 부여할 수 있습니다. 객체 업로드에 `bucket-owner-full-control` 미리 제공 ACL이 포함된 경우 버킷 소유자는 전체 제어 액세스 권한을 가지며 객체 작성자는 더 이상 전체 제어 액세스 권한을 갖지 않습니다.  | 모든 업로드 | 
| 객체 라이터 | 새 객체 | 객체 작성자가 객체를 소유합니다. |  ACL이 업데이트 가능하며 권한을 부여할 수 있습니다. 객체 작성자가 전체 제어 액세스 권한을 가집니다.  | 모든 업로드 | 

## ACL 사용 중지로 인한 변경 사항
<a name="object-ownership-changes"></a>

객체 소유권에 대해 버킷 소유자 적용 설정을 적용하면 ACL이 비활성화되고 추가 작업 없이 버킷의 모든 객체를 자동으로 소유하고 완전히 제어할 수 있습니다. 버킷 소유자 적용은 새로 생성된 모든 버킷의 기본 설정입니다. 버킷 소유자 적용 설정을 적용하면 세 가지 변경 사항이 표시됩니다.
+ 모든 버킷 ACL 및 객체 ACL이 사용 중지되어 버킷 소유자로서 사용자에게 전체 액세스 권한이 부여됩니다. 버킷 또는 객체에 대해 읽기 ACL 요청을 수행하면 버킷 소유자에게만 전체 액세스 권한이 부여됩니다.
+ 버킷 소유자가 버킷의 모든 객체를 자동으로 소유하고 완전히 제어할 수 있습니다.
+ ACL이 더 이상 버킷에 대한 액세스 권한에 영향을 미치지 않습니다. 따라서 데이터에 대한 액세스 제어는 AWS Identity and Access Management(IAM) [ID 기반 정책](https://docs.aws.amazon.com/AmazonS3/latest/userguide/security_iam_id-based-policy-examples.html), Amazon S3 [버킷 정책](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html), VPC 엔드포인트 정책, 조직 [서비스 제어 정책(SCP)](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_manage_policies_scps.html) 또는 [리소스 제어 정책(RCP)](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_manage_policies_rcps.html) 등 정책을 기반으로 합니다.

![\[ACL을 비활성화하기 위해 버킷 소유자 적용 설정을 적용하면 어떻게 되는지 보여주는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/images/bucket-owner-enforced.png)


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

새 객체는 버킷 소유자 전체 제어 ACL을 사용하거나 ACL을 지정하지 않는 경우에만 버킷에 업로드할 수 있습니다. 객체 업로드가 다른 ACL을 지정하면 실패합니다. 자세한 내용은 [문제 해결](object-ownership-error-responses.md) 섹션을 참조하세요.

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 리소스에 대한 액세스를 관리하는 연습](example-walkthroughs-managing-access.md) 섹션을 참조하세요.

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

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

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

## ACL 사용 중지를 위한 사전 조건
<a name="object-ownership-considerations"></a>

다음은 기존 버킷에 대해 ACL을 사용 중지하기 위한 사전 조건입니다.
+ [버킷 및 객체 ACL 검토와 ACL 권한 마이그레이션](object-ownership-migrating-acls-prerequisites.md#object-ownership-acl-permissions)

  
+ [인증을 위해 ACL이 필요한 모든 요청 식별](object-ownership-migrating-acls-prerequisites.md#object-ownership-acl-identify)

  
+ [ACL 관련 조건 키를 사용하는 버킷 정책 검토 및 업데이트](object-ownership-migrating-acls-prerequisites.md#object-ownership-bucket-policies)

  

## 객체 소유권 권한
<a name="object-ownership-permissions"></a>

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

## 모든 새 버킷에 대해 ACL 사용 중지
<a name="requiring-bucket-owner-enforced"></a>

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

## 복제 및 객체 소유권
<a name="object-ownership-replication"></a>

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

## 객체 소유권 설정
<a name="object-ownership-setting"></a>

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


| REST API | AWS CLI | 설명 | 
| --- | --- | --- | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketOwnershipControls.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketOwnershipControls.html) | [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-ownership-controls.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-ownership-controls.html)  | 기존 S3 버킷에 대한 객체 소유권 설정을 생성하거나 수정합니다. | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)  | [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/create-bucket.html) | x-amz-object-ownership 요청 헤더를 사용하여 객체 소유권 설정을 지정하는 버킷을 생성합니다. | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketOwnershipControls.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketOwnershipControls.html)  | [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-ownership-controls.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-ownership-controls.html) | Amazon S3 버킷에 대한 객체 소유권 설정을 검색합니다. | 
| [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketOwnershipControls.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketOwnershipControls.html) | [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-bucket-ownership-controls.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-bucket-ownership-controls.html) | Amazon S3 버킷에 대한 객체 소유권 설정을 삭제합니다. | 

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

**Topics**
+ [객체 소유권 설정](#object-ownership-overview)
+ [ACL 사용 중지로 인한 변경 사항](#object-ownership-changes)
+ [ACL 사용 중지를 위한 사전 조건](#object-ownership-considerations)
+ [객체 소유권 권한](#object-ownership-permissions)
+ [모든 새 버킷에 대해 ACL 사용 중지](#requiring-bucket-owner-enforced)
+ [복제 및 객체 소유권](#object-ownership-replication)
+ [객체 소유권 설정](#object-ownership-setting)
+ [ACL 사용 중지를 위한 사전 조건](object-ownership-migrating-acls-prerequisites.md)
+ [버킷을 생성할 때 객체 소유권 설정](object-ownership-new-bucket.md)
+ [기존 버킷에 대한 객체 소유권 설정](object-ownership-existing-bucket.md)
+ [S3 버킷에 대한 객체 소유권 설정 보기](object-ownership-retrieving.md)
+ [모든 새 버킷에 대해 ACL 사용 중지 및 객체 소유권 시행](ensure-object-ownership.md)
+ [문제 해결](object-ownership-error-responses.md)

# ACL 사용 중지를 위한 사전 조건
<a name="object-ownership-migrating-acls-prerequisites"></a>

Amazon S3의 버킷 액세스 제어 목록(ACL)은 S3 버킷 내의 개별 객체에 대한 세분화된 권한을 정의하여 해당 객체에 액세스하고 수정할 수 있는 AWS 계정 또는 그룹을 지정할 수 있는 메커니즘입니다. Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다. 각 객체에 대해 액세스를 개별적으로 제어할 필요가 있는 상황을 제외하고는 AWS Identity and Access Management(IAM) 및 버킷 정책을 사용하여 액세스를 관리하고 ACL을 비활성화한 채로 두는 것이 좋습니다.

버킷에서 ACL을 활성화한 경우 ACL을 비활성화하기 전에 다음 사전 조건을 충족해야 합니다.

**Topics**
+ [버킷 및 객체 ACL 검토와 ACL 권한 마이그레이션](#object-ownership-acl-permissions)
+ [인증을 위해 ACL이 필요한 모든 요청 식별](#object-ownership-acl-identify)
+ [ACL 관련 조건 키를 사용하는 버킷 정책 검토 및 업데이트](#object-ownership-bucket-policies)
+ [사용 사례 예제](#object-ownership-migrating-acls)

## 버킷 및 객체 ACL 검토와 ACL 권한 마이그레이션
<a name="object-ownership-acl-permissions"></a>

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

기존 버킷 및 객체 ACL마다 IAM 정책에 해당 항목이 있습니다. 다음 버킷 정책 예는 버킷 및 객체 ACL에 대한 `READ` 및 `WRITE` 권한이 IAM 권한에 매핑되는 방식을 보여줍니다. 각 ACL이 IAM 권한으로 변환되는 방법에 대한 자세한 내용은 [ACL 권한과 액세스 정책 권한의 매핑](acl-overview.md#acl-access-policy-permission-mapping) 섹션을 참조하십시오.

ACL을 비활성화하기 전에:
+ 버킷 ACL이 AWS 계정 외부에 액세스 권한을 부여하는 경우 먼저 버킷 ACL 권한을 버킷 정책으로 마이그레이션해야 합니다.
+ 그런 다음 버킷 ACL을 기본 프라이빗 ACL로 재설정합니다.
+ 또한 객체 수준 ACL 권한을 검토하고 버킷 정책으로 마이그레이션하는 것이 좋습니다.

버킷 ACL이 계정 외부의 다른 사용자에게 읽기 또는 쓰기 권한을 부여하는 경우 ACL을 비활성화하려면 먼저 이러한 권한을 버킷 정책으로 마이그레이션해야 합니다. 이러한 권한을 마이그레이션한 후 **객체 소유권**을 *버킷 소유자 적용* 설정으로 설정할 수 있습니다. 읽기 또는 쓰기 액세스 권한을 계정 외부로 부여하는 버킷 ACL을 마이그레이션하지 않으면 버킷 소유자 적용 설정을 적용하기 위한 요청이 실패하고 [InvalidBucketAclWithObjectOwnership](object-ownership-error-responses.md#object-ownership-error-responses-invalid-acl) 오류 코드를 반환합니다.

버킷 ACL이 AWS 계정 외부의 액세스 권한을 부여하는 경우 ACL을 사용 중지하기 전에 버킷 ACL 권한을 버킷 정책으로 마이그레이션하고 버킷 ACL을 기본 프라이빗 ACL로 재설정해야 합니다. 이러한 버킷 ACL을 마이그레이션하고 재설정하지 않으면 ACL 비활성화를 위한 버킷 소유자 적용 설정 적용 요청이 실패하고 [InvalidBucketAclWithObjectOwnership](object-ownership-error-responses.md#object-ownership-error-responses-invalid-acl) 오류 코드를 반환합니다. 또한 객체 ACL 권한을 검토하고 버킷 정책으로 마이그레이션하는 것이 좋습니다.

ACL 권한을 검토하고 버킷 정책으로 마이그레이션하려면 다음 주제를 참조하십시오.

**Topics**
+ [버킷 정책 예제](#migrate-acl-permissions-bucket-policies)
+ [S3 콘솔을 사용하여 ACL 권한 검토 및 마이그레이션](#review-migrate-acl-console)
+ [AWS CLI를 사용하여 ACL 권한 검토 및 마이그레이션](#review-migrate-acl-cli)

### 버킷 정책 예제
<a name="migrate-acl-permissions-bucket-policies"></a>

이 예제 버킷 정책은 서드 파티 AWS 계정에 대한 `READ` 및 `WRITE` 버킷과 객체 ACL 권한을 버킷 정책으로 마이그레이션하는 방법을 보여줍니다. `READ_ACP` 및 `WRITE_ACP` ACL은 ACL 관련 권한(`s3:GetBucketAcl`, `s3:GetObjectAcl`, `s3:PutBucketAcl` 및 `s3:PutObjectAcl`)을 부여하기 때문에 정책과 관련이 적습니다.

**Example - 버킷에 대한 `READ` ACL**  
버킷의 콘텐츠를 나열할 수 있는 AWS 계정 `111122223333` 권한을 부여하는 `READ` ACL이 버킷에 있는 경우, 버킷에 대한 `s3:ListBucket`, `s3:ListBucketVersions`, `s3:ListBucketMultipartUploads` 권한을 부여하는 버킷 정책을 작성할 수 있습니다.    
****  

```
{
		"Version":"2012-10-17",		 	 	 
		"Statement": [
			{
				"Sid": "Permission to list the objects in a bucket",
				"Effect": "Allow",
				"Principal": {
					"AWS": [

						"arn:aws:iam::111122223333:root"
					]
				},
				"Action": [
					"s3:ListBucket",
					"s3:ListBucketVersions",
					"s3:ListBucketMultipartUploads"
				],
				"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
			}
		]
	}
```

**Example - 버킷의 모든 객체에 대한 `READ` ACL**  
AWS 계정 `111122223333`에 액세스 권한을 부여하는 `READ` ACL이 버킷의 모든 객체에 있는 경우, 버킷의 모든 객체에 대해 이 계정에 `s3:GetObject` 및 `s3:GetObjectVersion` 권한을 부여하는 버킷 정책을 작성할 수 있습니다.    
****  

```
{
		"Version":"2012-10-17",		 	 	 
		"Statement": [
			{
				"Sid": "Read permission for every object in a bucket",
				"Effect": "Allow",
				"Principal": {
					"AWS": [
						"arn:aws:iam::111122223333:root"
					]
				},
				"Action": [
					"s3:GetObject",
					"s3:GetObjectVersion"
				],
				"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
			}
		]
	}
```
이 예제 리소스 요소는 특정 객체에 대한 액세스 권한을 부여합니다.  

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/OBJECT-KEY"
```

**Example – 버킷에 객체를 쓸 수 있는 권한을 부여하는 `WRITE` ACL**  
버킷에 객체를 쓸 수 있는 AWS 계정 `111122223333` 권한을 부여하는 `WRITE` ACL이 있는 경우, 버킷에 대한 `s3:PutObject` 권한을 부여하는 버킷 정책을 작성할 수 있습니다.    
****  

```
{
		"Version":"2012-10-17",		 	 	 
		"Statement": [
			{
				"Sid": "Permission to write objects to a bucket",
				"Effect": "Allow",
				"Principal": {
					"AWS": [
						"arn:aws:iam::111122223333:root"
					]
				},
				"Action": [
					"s3:PutObject"
				],
				"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
			}
		]
	}
```

### S3 콘솔을 사용하여 ACL 권한 검토 및 마이그레이션
<a name="review-migrate-acl-console"></a>

**버킷의 ACL 권한 검토**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. **버킷(Buckets)** 목록에서 버킷 이름을 선택합니다.

1. **권한** 탭을 선택합니다.

1. **액세스 제어 목록(ACL)(Access control list (ACL))**에서 버킷 ACL 권한을 검토합니다.

**객체의 ACL 권한 검토**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. **Buckets**(버킷) 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

1. **객체(Objects)** 목록에서 사용자의 객체 이름을 선택합니다.

1. **권한** 탭을 선택합니다.

1. **액세스 제어 목록(ACL)(Access control list (ACL))**에서 객체 ACL 권한을 검토합니다.

**ACL 권한 마이그레이션 및 버킷 ACL 업데이트**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. **버킷(Buckets)** 목록에서 버킷 이름을 선택합니다.

1. **권한(Permissions)** 탭의 **버킷 정책(Bucket policy)**에서 **편집(Edit)**을 선택합니다.

1. **정책(Policy)** 상자에서 버킷 정책을 추가하거나 업데이트합니다.

   예제 버킷 정책은 [버킷 정책 예제](#migrate-acl-permissions-bucket-policies) 및 [사용 사례 예제](#object-ownership-migrating-acls) 섹션을 참조하십시오.

1. **변경 사항 저장**을 선택합니다.

1. [버킷 ACL을 업데이트](managing-acls.md)하여 다른 그룹 또는 AWS 계정에 대한 ACL 부여를 제거합니다.

1. [객체 소유권에 대한 **버킷 소유자 적용** 설정](object-ownership-existing-bucket.md)을 적용합니다.

### AWS CLI를 사용하여 ACL 권한 검토 및 마이그레이션
<a name="review-migrate-acl-cli"></a>

1. 버킷에 대한 버킷 ACL을 반환하려면 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-acl.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-acl.html) AWS CLI 명령을 사용합니다.

   ```
   aws s3api get-bucket-acl --bucket amzn-s3-demo-bucket
   ```

   예를 들어, 이 버킷 ACL은 서드 파티 계정에 `WRITE` 및 `READ` 액세스 권한을 부여합니다. 이 ACL에서 서드 파티 계정은 [정식 사용자 ID](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html#FindCanonicalId)로 식별됩니다. 버킷 소유자 적용 설정을 적용하고 ACL을 비활성화하려면 서드 파티 계정에 대한 이러한 권한을 버킷 정책으로 마이그레이션해야 합니다.

   ```
   {
   		"Owner": {
   			"ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID"
   		},
   		"Grants": [
   			{
   				"Grantee": {
   					"ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID",
   					"Type": "CanonicalUser"
   				},
   				"Permission": "FULL_CONTROL"
   			},
   			{
   				"Grantee": {
   					"ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID",
   					"Type": "CanonicalUser"
   				},
   				"Permission": "READ"
   			},
   			{
   				"Grantee": {
   					"ID": "72806de9d1ae8b171cca9e2494a8d1335dfced4ThirdPartyAccountCanonicalUserID",
   					"Type": "CanonicalUser"
   				},
   				"Permission": "WRITE"
   			}
   		]
   	}
   ```

   다른 예제 ACL은 [사용 사례 예제](#object-ownership-migrating-acls) 섹션을 참조하십시오.

1. 버킷 ACL 권한을 버킷 정책으로 마이그레이션합니다.

   이 예제 버킷 정책은 서드 파티 계정에 `s3:PutObject` 및 `s3:ListBucket` 권한을 부여합니다. 버킷 정책에서 서드 파티 계정은 AWS 계정 ID(`111122223333`)로 식별됩니다.

   ```
   aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json
   
   	policy.json:
   	{
   		"Version": "2012-10-17",		 	 	 
   		"Statement": [
   			{
   				"Sid": "PolicyForCrossAccountAllowUpload",
   				"Effect": "Allow",
   				"Principal": {
   					"AWS": [
   						"arn:aws:iam::111122223333:root"
   					]
   				},
   				"Action": [
   					"s3:PutObject",
   					"s3:ListBucket"
   				],
   				"Resource": [
   					"arn:aws:s3:::amzn-s3-demo-bucket",
   					"arn:aws:s3:::amzn-s3-demo-bucket/*"
   			}
   		]
   	}
   ```

   더 많은 예제 버킷 정책은 [버킷 정책 예제](#migrate-acl-permissions-bucket-policies) 및 [사용 사례 예제](#object-ownership-migrating-acls) 섹션을 참조하십시오.

1. 특정 객체에 대한 ACL을 반환하려면 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object-acl.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-object-acl.html) AWS CLI 명령을 사용합니다.

   ```
   aws s3api get-object-acl --bucket amzn-s3-demo-bucket --key EXAMPLE-OBJECT-KEY
   ```

1. 필요한 경우 객체 ACL 권한을 버킷 정책으로 마이그레이션합니다.

   이 예제 리소스 요소는 버킷 정책의 특정 객체에 대한 액세스 권한을 부여합니다.

   ```
   "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/EXAMPLE-OBJECT-KEY"
   ```

1. 버킷의 ACL을 기본 ACL로 재설정합니다.

   ```
   aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
   ```

1. 객체 소유권에 대해 [버킷 소유자 적용 설정을 적용](object-ownership-existing-bucket.md)합니다.

## 인증을 위해 ACL이 필요한 모든 요청 식별
<a name="object-ownership-acl-identify"></a>

인증을 위해 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` 값](acl-overview.md#aclrequired-s3)을 참조하십시오.

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

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

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

권한 부여를 위해 ACL이 필요한 요청이 없는 것으로 확인되면 ACL을 비활성화할 수 있습니다. 요청 식별에 대한 자세한 내용은 [Amazon S3 서버 액세스 로그를 사용하여 요청 식별](using-s3-access-logs-to-identify-requests.md) 및 [CloudTrail을 사용하여 Amazon S3 요청 식별](cloudtrail-request-identification.md) 섹션을 참조하십시오.

## ACL 관련 조건 키를 사용하는 버킷 정책 검토 및 업데이트
<a name="object-ownership-bucket-policies"></a>

버킷 소유자 적용 설정을 적용하여 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을 수락하므로 클라이언트 측 변경 없이 요청이 계속 성공합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "OnlyAllowWritesToMyBucketWithBucketOwnerFullControl",
            "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 사용 중지 전에 업데이트되어야 합니다.

------
#### [ JSON ]

****  

```
{
    "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"
                }
            }
        }
    ]
}
```

------

## 사용 사례 예제
<a name="object-ownership-migrating-acls"></a>

다음 예에서는 특정 사용 사례에 대해 ACL 권한을 버킷 정책으로 마이그레이션하는 방법을 보여줍니다.

**Topics**
+ [서버 액세스 로깅을 위해 S3 로그 전송 그룹에 대한 액세스 권한 부여](#object-ownership-server-access-logs)
+ [버킷의 객체에 대한 퍼블릭 읽기 액세스 권한 부여](#object-ownership-public-read)
+ [Amazon ElastiCache(Redis OSS)에 S3 버킷에 대한 액세스 권한 부여](#object-ownership-elasticache-redis)

### 서버 액세스 로깅을 위해 S3 로그 전송 그룹에 대한 액세스 권한 부여
<a name="object-ownership-server-access-logs"></a>

버킷 소유자 적용 설정을 적용하여 서버 액세스 로깅 대상 버킷(**대상 버킷이라고도 함)에 대해 ACL을 비활성화하려는 경우 S3 로그 전송 그룹에 대한 버킷 ACL 권한을 버킷 정책의 로깅 서비스 보안 주체(`logging.s3.amazonaws.com`)로 마이그레이션해야 합니다. 로그 전달 권한에 대한 자세한 내용은 [로그 전달을 위한 권한](enable-server-access-logging.md#grant-log-delivery-permissions-general) 섹션을 참조하십시오.

이 버킷 ACL은 S3 로그 전달 그룹에 `WRITE` 및 `READ_ACP` 액세스 권한을 부여합니다.

```
{
    "Owner": {
        "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID"
    }, 
    "Grants": [
        {
            "Grantee": {
                "Type": "CanonicalUser", 
                "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID"
            }, 
            "Permission": "FULL_CONTROL"
        }, 
        {
            "Grantee": {
                "Type": "Group", 
                "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery"
            }, 
            "Permission": "WRITE"
        }, 
        {
            "Grantee": {
                "Type": "Group", 
                "URI": "http://acs.amazonaws.com/groups/s3/LogDelivery"
            }, 
            "Permission": "READ_ACP"
        }
    ]
}
```

**버킷 정책의 로깅 서비스 보안 주체로 S3 로그 전달 그룹에 대한 버킷 ACL 권한 마이그레이션**

1. 다음 버킷 정책을 대상 버킷에 추가하여 예시 값을 대체합니다.

   ```
   aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json
   
   policy.json:						{
       {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "S3ServerAccessLogsPolicy",
               "Effect": "Allow",
               "Principal": {
                   "Service": "logging.s3.amazonaws.com"
               },
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/EXAMPLE-LOGGING-PREFIX*",
               "Condition": {
                   "ArnLike": {
                       "aws:SourceArn": "arn:aws:s3:::SOURCE-BUCKET-NAME"
                   },
                   "StringEquals": {
                       "aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID"
                   }
               }
           }
       ]
   }
   ```

1. 대상 버킷의 ACL을 기본 ACL로 재설정합니다.

   ```
   aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
   ```

1. 대상 버킷에 객체 소유권에 대해 [버킷 소유자 적용 설정을 적용](object-ownership-existing-bucket.md)합니다.

### 버킷의 객체에 대한 퍼블릭 읽기 액세스 권한 부여
<a name="object-ownership-public-read"></a>

객체 ACL이 버킷의 모든 객체에 대해 퍼블릭 읽기 액세스 권한을 부여하는 경우 이러한 ACL 권한을 버킷 정책으로 마이그레이션할 수 있습니다.

이 객체 ACL은 버킷의 객체에 대한 퍼블릭 읽기 액세스 권한을 부여합니다.

```
{
    "Owner": {
        "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID"
    },
    "Grants": [
        {
            "Grantee": {
                "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "Type": "Group",
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        }
    ]
}
```

**버킷 정책으로 퍼블릭 읽기 ACL 권한 마이그레이션**

1. 버킷의 모든 객체에 대한 퍼블릭 읽기 액세스 권한을 부여하려면 다음 버킷 정책을 추가하여 예제 값을 바꿉니다.

   ```
   aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json
   
   policy.json:
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "PublicReadGetObject",
               "Effect": "Allow",
               "Principal": "*",
               "Action": [
                   "s3:GetObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           }
       ]
   }
   ```

   버킷 정책의 특정 객체에 대한 퍼블릭 액세스 권한을 부여하려면 `Resource` 요소에 다음 형식을 사용합니다.

   ```
   "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/OBJECT-KEY"
   ```

   특정 접두사가 있는 모든 객체에 대한 퍼블릭 액세스 권한을 부여하려면 `Resource` 요소에 다음 형식을 사용합니다.

   ```
   "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/PREFIX/*"
   ```

1. 객체 소유권에 대해 [버킷 소유자 적용 설정을 적용](object-ownership-existing-bucket.md)합니다.

### Amazon ElastiCache(Redis OSS)에 S3 버킷에 대한 액세스 권한 부여
<a name="object-ownership-elasticache-redis"></a>

S3 버킷으로 [ElastiCache(Redis OSS) 백업을 내보내면](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/backups-exporting.html) ElastiCache 외부에서 백업에 액세스할 수 있습니다. S3 버킷으로 백업을 내보내려면 버킷에 스냅샷을 복사할 수 있는 권한을 ElastiCache에 부여해야 합니다. 버킷 ACL에서 ElastiCache에 권한을 부여한 경우 버킷 소유자 적용 설정을 적용하여 ACL을 비활성화하기 전에 이러한 권한을 버킷 정책으로 마이그레이션해야 합니다. 자세한 내용은 *Amazon ElastiCache 사용 설명서*의 [ElastiCache에 Amazon S3 버킷에 대한 액세스 권한 부여](https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/backups-exporting.html#backups-exporting-grant-access)를 참조하십시오.

다음 예에서는 ElastiCache에 권한을 부여하는 버킷 ACL 권한을 보여줍니다.

```
{
    "Owner": {
        "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID"
    },
    "Grants": [
        {
            "Grantee": {
                "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353",
                "Type": "CanonicalUser"
            },
            "Permission": "READ"
        },
        {
            "Grantee": {
                "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353",
                "Type": "CanonicalUser"
            },
            "Permission": "WRITE"
        },
        {
            "Grantee": {
                "ID": "540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353",
                "Type": "CanonicalUser"
            },
            "Permission": "READ_ACP"
        }
    ]
}
```

**버킷 정책으로 ElastiCache(Redis OSS)에 대한 버킷 ACL 권한 마이그레이션**

1. 다음 버킷 정책을 버킷에 추가하여 예제 값을 대체합니다.

   ```
   aws s3api put-bucket-policy --bucket amzn-s3-demo-bucket --policy file://policy.json
   
   policy.json:
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "Stmt15399483",
               "Effect": "Allow",
               "Principal": {
                   "Service": "Region.elasticache-snapshot.amazonaws.com"
               },
               "Action": [
                   "s3:PutObject",
                   "s3:GetObject",
                   "s3:ListBucket",
                   "s3:GetBucketAcl",
                   "s3:ListMultipartUploadParts",
                   "s3:ListBucketMultipartUploads"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket",
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           }
       ]
   }
   ```

1. 버킷의 ACL을 기본 ACL로 재설정합니다.

   ```
   aws s3api put-bucket-acl --bucket amzn-s3-demo-bucket --acl private
   ```

1. 객체 소유권에 대해 [버킷 소유자 적용 설정을 적용](object-ownership-existing-bucket.md)합니다.

# 버킷을 생성할 때 객체 소유권 설정
<a name="object-ownership-new-bucket"></a>

버킷을 생성할 때 S3 객체 소유권을 구성할 수 있습니다. 기존 버킷에 대한 객체 소유권을 설정하려면 [기존 버킷에 대한 객체 소유권 설정](object-ownership-existing-bucket.md) 섹션을 참조하세요.

S3 객체 소유권은 [액세스 제어 목록(ACL)](acl-overview.md)을 사용 중지하고 버킷에 있는 모든 객체의 소유권을 가져오는 데 사용할 수 있는 Amazon S3 버킷 수준 설정으로, Amazon S3에 저장된 데이터에 대한 액세스 관리를 간소화합니다. 기본적으로 S3 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 신규 버킷에 대해 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 액세스 관리 정책을 사용하여 데이터에 대한 액세스를 독점적으로 관리합니다. 각 객체에 대해 액세스를 개별적으로 제어해야 하는 드문 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다.

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

**ACL 사용 중지됨**
+ **버킷 소유자 적용(기본값)** – ACL이 비활성화되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하고 완전히 제어합니다. ACL은 더 이상 S3 버킷의 데이터에 대한 권한에 영향을 주지 않습니다. 버킷은 정책을 사용하여 액세스 제어를 정의합니다.

**ACL 사용됨**
+ **버킷 소유자 기본(Bucket owner preferred)** – 버킷 소유자가 `bucket-owner-full-control` 미리 제공 ACL을 사용하여 다른 계정이 버킷에 작성하는 새 객체를 소유하고 완전히 제어합니다.
+ **객체 작성자(Object writer)** – 객체를 업로드하는 AWS 계정은 객체를 소유하고 완전히 제어하며 ACL을 통해 다른 사용자에게 이에 대한 액세스 권한을 부여할 수 있습니다.

**권한**: **버킷 소유자 적용** 설정이나 **버킷 소유자 선호** 설정을 적용하려면 `s3:CreateBucket` 및 `s3:PutBucketOwnershipControls` 권한이 있어야 합니다. **객체 라이터** 설정이 적용된 버킷을 만들 때는 추가 권한이 필요하지 않습니다. Amazon S3 권한에 대한 자세한 내용은 **서비스 승인 참조에서 [Amazon S3에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)를 참조하세요.

S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 [Amazon S3 API 작업에 필요한 권한](using-with-s3-policy-actions.md) 섹션을 참조하세요.

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

## S3 콘솔 사용
<a name="object-ownership-new-bucket-console"></a>

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. 페이지 상단의 탐색 모음에서 현재 표시된 AWS 리전의 이름을 선택합니다. 그런 다음 버킷을 생성하려는 리전을 선택합니다.
**참고**  
버킷을 만든 후에는 리전을 변경할 수 없습니다.
지연 시간과 요금을 최소화하고 규제 요건을 충족하려면 가장 가까운 리전을 선택하십시오. 특정 리전에 저장된 객체는 사용자가 명시적으로 객체를 다른 리전으로 전송하지 않는 한 해당 리전을 벗어나지 않습니다. Amazon S3 AWS 리전 목록은 **Amazon Web Services 일반 참조의 [AWS 서비스 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)를 참조하십시오.

1. 왼쪽 탐색 창에서 **범용 버킷**을 선택합니다.

1. **버킷 만들기**를 선택합니다. **버킷 만들기** 페이지가 열립니다.

1. [**Bucket Name**]에서 버킷 이름을 입력합니다.

   버킷 이름은 다음과 같아야 합니다.
   + 파티션 내에서 고유해야 합니다. 파티션은 리전의 그룹입니다. AWS에는 현재 `aws`(상용 리전), `aws-cn`(중국 리전) 및 `aws-us-gov`(AWS GovCloud (US) Regions), 이렇게 세 가지 파티션이 있습니다.
   + 3\$163자 이내여야 합니다.
   + 소문자, 숫자, 마침표(`.`) 및 하이픈(`-`)만 포함해야 합니다. 최상의 호환성을 위해 정적 웹 사이트 호스팅에만 사용되는 버킷을 제외하고 버킷 이름에 마침표(`.`)를 사용하지 않는 것이 좋습니다.
   + 문자나 숫자로 시작하고 끝나야 합니다.
   + 버킷 이름 지정 규칙의 전체 목록은 [범용 버킷 이름 지정 규칙](bucketnamingrules.md) 섹션을 참조하세요.
**중요**  
버킷을 생성한 후에는 해당 이름을 변경할 수 없습니다.
버킷 이름에 민감한 정보가 포함되어서는 안 됩니다. 버킷 이름은 버킷의 객체를 가리키는 URL에 표시됩니다.

1. (선택 사항) **일반 구성** 아래에서 기존 버킷의 설정을 새 버킷에 복사하도록 선택할 수 있습니다. 기존 버킷의 설정을 복사하지 않으려면 다음 단계로 건너뛰세요.
**참고**  
이 옵션:  
AWS CLI에서는 사용할 수 없으며 Amazon S3 콘솔에서만 사용할 수 있습니다.
기존 버킷의 버킷 정책을 새 버킷으로 복사하지 않습니다.

    기존 버킷의 설정을 복사하려면 **기존 버킷에서 설정 복사** 아래에서 **버킷 선택**을 선택합니다. **버킷 선택** 창이 열립니다. 복사하려는 설정이 있는 버킷을 찾아 **버킷 선택**을 선택합니다. **버킷 선택** 창이 닫히고 **버킷 생성** 창이 다시 열립니다.

   이제 **기존 버킷에서 설정 복사** 아래에 선택한 버킷의 이름이 표시됩니다. 이제 새 버킷의 설정이 선택한 버킷의 설정과 일치합니다. 복사된 설정을 제거하려면 **기본값 복원**을 선택합니다. **버킷 생성** 페이지에서 나머지 버킷 설정을 검토하세요. 변경하지 않으려면 마지막 단계로 건너뛸 수 있습니다.

1. **객체 소유권(Object Ownership)**에서 ACL을 사용 중지 또는 사용 설정하고 버킷에 업로드된 객체의 소유권을 제어하려면 다음 설정 중 하나를 선택합니다.

**ACL 사용 중지됨**
   +  **버킷 소유자 적용(기본값)** – ACL이 비활성화되고 버킷 소유자는 범용 버킷의 모든 객체를 자동으로 소유하고 완전히 제어합니다. ACL은 더 이상 S3 범용 버킷의 데이터에 대한 권한에 영향을 주지 않습니다. 버킷은 정책을 독점적으로 사용하여 액세스 제어를 정의합니다.

     기본적으로 ACL은 비활성화되어 있습니다. Amazon S3의 최신 사용 사례 대부분은 더 이상 ACL을 사용할 필요가 없습니다. 각 객체에 대해 액세스를 개별적으로 제어해야 하는 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](about-object-ownership.md) 섹션을 참조하세요.

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

     **버킷 소유자 선호** 설정을 적용하는 경우 모든 Amazon S3 업로드에 `bucket-owner-full-control` 미리 제공된 ACL을 포함하도록 요구하려면 이 ACL을 사용하는 객체 업로드만 허용하는 [버킷 정책을 추가](ensure-object-ownership.md#ensure-object-ownership-bucket-policy)할 수 있습니다.
   + **객체 작성자(Object writer)** – 객체를 업로드하는 AWS 계정은 객체를 소유하고 완전히 제어하며 ACL을 통해 다른 사용자에게 이에 대한 액세스 권한을 부여할 수 있습니다.
**참고**  
기본 설정은 **버킷 소유자 적용**입니다. 기본 설정을 적용하고 ACL을 비활성화된 상태로 유지하려면 `s3:CreateBucket` 권한만 있으면 됩니다. ACL을 활성화하려면 `s3:PutBucketOwnershipControls` 권한이 있어야 합니다.

1. **퍼블릭 액세스 차단을 위한 버킷 설정**에서 버킷에 적용할 퍼블릭 액세스 차단 설정을 선택합니다.

   기본적으로, 네 개의 퍼블릭 액세스 차단 설정이 모두 활성화되어 있습니다. 특정 사용 사례에 대해 하나 이상의 설정을 해제해야 하는 경우가 아니라면 모든 설정을 활성화된 상태로 유지하는 것이 좋습니다. 퍼블릭 액세스 차단에 대한 자세한 내용은 [Amazon S3 스토리지에 대한 퍼블릭 액세스 차단](access-control-block-public-access.md) 섹션을 참조하십시오.
**참고**  
모든 퍼블릭 액세스 차단 설정을 활성화하려면 `s3:CreateBucket` 권한만 있으면 됩니다. 퍼블릭 액세스 차단 설정을 해제하려면 `s3:PutBucketPublicAccessBlock` 권한이 있어야 합니다.

1. (선택 사항) **버킷 버전 관리**는 기본으로 비활성화됩니다. 버전 관리는 동일 버킷 내에 여러 개의 객체 변형을 보유하는 것을 의미합니다. 버전 관리를 사용하여 버킷에 저장된 모든 버전의 객체를 모두 보존, 검색 및 복원할 수 있습니다. 또한, 의도치 않은 사용자 작업 및 애플리케이션 장애가 발생해도 쉽게 복구할 수 있습니다. 버전 관리에 대한 자세한 내용은 [S3 버전 관리로 여러 버전의 객체 유지](Versioning.md) 섹션을 참조하십시오.

   버킷에서 버전 관리를 활성화하려면 **활성화**를 선택합니다.

1. (선택 사항) **Tags**(태그)에서 버킷에 태그를 추가할 수 있습니다. AWS 비용 할당을 하면서 버킷 태그를 지정해 버킷 사용에 대한 요금 청구 주석을 달 수 있습니다. 태그는 버킷에 할당된 라벨을 나타내는 한 쌍의 키-값입니다. 자세한 내용은 [비용 할당 S3 버킷 태그 사용](CostAllocTagging.md) 섹션을 참조하세요.

   버킷 태그를 추가하려면 **Key**(키) 및 원하는 경우 **Value**(값)를 입력하고 **Add Tag**(태그 추가)를 선택합니다.

1. **기본 암호화**를 구성하려면 **암호화 유형** 아래에서 다음 중 하나를 선택합니다.
   + **Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3)**
   + **AWS Key Management Service 키를 사용한 서버 측 암호화(SSE-KMS)**
   + **AWS Key Management Service(AWS KMS) 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)**
**중요**  
기본 암호화 구성으로 SSE-KMS 또는 DSSE-KMS 옵션을 사용할 경우 AWS KMS의 초당 요청 수(RPS) 할당량이 적용됩니다. AWS KMS 할당량과 할당량 증대를 요청하는 방법에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [할당량](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)을 참조하십시오.

   버킷과 새 객체는 Amazon S3 관리형 키(SSE-S3)를 암호화 구성의 기본 수준으로 사용하는 서버 측 암호화로 암호화됩니다. 기본 암호화에 대한 자세한 내용은 [Amazon S3 버킷에 대한 기본 서버 측 암호화 동작 설정](bucket-encryption.md) 섹션을 참조하십시오. SSE-S3에 대한 자세한 내용은 [Amazon S3 관리형 키를 사용한 서버 측 암호화(SSE-S3) 사용](UsingServerSideEncryption.md) 섹션을 참조하세요.

   서버 측 암호화를 사용하는 데이터 암호화에 대한 자세한 내용은 [암호화로 데이터 보호](UsingEncryption.md) 섹션을 참조하세요.

1. **AWS Key Management Service 키를 사용한 서버 측 암호화(SSE-KMS)** 또는 **AWS Key Management Service(AWS KMS) 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS)**를 선택한 경우 다음과 같이 하세요.

   1. **AWS KMS 키**에서 다음 방법 중 하나로 KMS 키를 지정합니다.
      + 사용 가능한 KMS 키 목록에서 **AWS KMS keys 중에서 선택**을 선택하고 사용 가능한 키 목록에서 **KMS 키**를 선택합니다.

        AWS 관리형 키(`aws/s3`)와 고객 관리형 키가 모두 목록에 표시됩니다. 고객 관리형 키에 대한 자세한 내용은 *AWS Key Management Service* 개발자 안내서의 [ 고객 키 및 AWS 키](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt)를 참조하십시오.
      + KMS 키 ARN을 입력하려면 **AWS KMS key ARN 입력**을 선택하고 나타나는 필드에 KMS 키 ARN을 입력합니다.
      + AWS KMS 콘솔에서 고객 관리형 키를 생성하려면 **KMS 키 생성**을 선택합니다.

        AWS KMS key 생성에 대한 자세한 내용은 *AWS Key Management Service 개발자 가이드*의 [키 생성](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html)을 참조하십시오.
**중요**  
버킷과 동일한 AWS 리전에서 사용할 수 있는 KMS 키만 사용 가능합니다. Amazon S3 콘솔은 버킷과 동일한 리전에 있는 처음 100개의 KMS 키만 나열합니다. 목록에 없는 KMS 키를 사용하려면 KMS 키 ARN을 입력해야 합니다. 다른 계정에서 소유한 KMS 키를 사용하려면 먼저 해당 키에 대한 사용 권한이 있어야 하고, 다음 단계로 KMS 키 ARN을 입력해야 합니다. KMS 키의 크로스 계정 권한에 대한 자세한 내용은 **AWS Key Management Service 개발자 안내서의 [Creating KMS keys that other accounts can use](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)를 참조하세요. SSE-KMS에 대한 자세한 내용은 [AWS KMS(SSE-KMS)를 사용한 서버 측 암호화 지정](specifying-kms-encryption.md) 단원을 참조하십시오. DSSE-KMS에 대한 자세한 내용은 [AWS KMS 키를 사용한 이중 계층 서버 측 암호화(DSSE-KMS) 사용](UsingDSSEncryption.md) 섹션을 참조하세요.  
Amazon S3에서 서버 측 암호화에 AWS KMS key을 사용하는 경우 대칭 암호화 KMS 키를 선택해야 합니다. Amazon S3는 대칭 암호화 KMS 키만 지원하며 비대칭 KMS 키는 지원하지 않습니다. 자세한 내용은 **AWS Key Management Service 개발자 안내서에서 [대칭 및 비대칭 KMS 키 식별](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html)을 참조하십시오.

   1. SSE-KMS와 함께 기본 암호화를 사용하도록 버킷을 구성할 때 S3 버킷 키를 사용할 수도 있습니다. S3 버킷 키를 사용하면 Amazon S3에서 AWS KMS로의 요청 트래픽이 줄어 암호화 비용이 절감됩니다. 자세한 내용은 [Amazon S3 버킷 키를 사용하여 SSE-KMS 비용 절감](bucket-key.md) 섹션을 참조하세요. S3 버킷 키는 DSSE-KMS에서 지원되지 않습니다.

      기본적으로 S3 버킷 키는 Amazon S3 콘솔에서 활성화됩니다. 비용을 낮추려면 S3 버킷 키를 활성화된 상태로 두는 것이 좋습니다. 버킷에 대해 S3 버킷 키를 비활성화하려면 **버킷 키** 아래에서 **비활성화**를 선택합니다.

1. (선택 사항) S3 Object Lock을 사용하면 새 객체가 삭제되거나 덮어쓰이지 않도록 보호할 수 있습니다. 자세한 내용은 [Object Lock으로 객체 잠금](object-lock.md) 섹션을 참조하세요. S3 Object Lock을 활성화하려면 다음을 수행합니다.

   1. **고급 설정(Advanced Settings)**을 선택합니다.
**중요**  
Object Lock을 활성화하면 버킷의 버전 관리도 활성화됩니다. 버킷을 활성화하고 성공적으로 만든 후에는 버킷의 **속성** 탭에서 Object Lock 기본 보존 및 법적 보존 설정도 구성해야 합니다.

   1. 객체 잠금을 활성화하려면 **Enable**(활성화)을 선택하고 표시되는 경고를 읽고 확인합니다.
**참고**  
Object Lock을 사용하는 버킷을 만들려면 `s3:CreateBucket`, `s3:PutBucketVersioning` 및 `s3:PutBucketObjectLockConfiguration` 권한이 있어야 합니다.

1. **버킷 생성**을 선택합니다.

## AWS CLI 사용
<a name="object-ownership-new-bucket-cli"></a>

새 버킷을 생성할 때 객체 소유권을 설정하려면 `--object-ownership` 파라미터와 함께 `create-bucket` AWS CLI 명령을 사용합니다.

이 예에서는 AWS CLI를 사용하여 새 버킷에 대해 버킷 소유자 적용 설정을 적용합니다.

```
aws s3api create-bucket --bucket  amzn-s3-demo-bucket --region us-east-1 --object-ownership BucketOwnerEnforced
```

**중요**  
AWS CLI를 사용하여 버킷을 만들 때 객체 소유권을 설정하지 않으면 기본 설정은 `ObjectWriter`(ACL 활성화)가 됩니다.

## Java용 AWS SDK 사용
<a name="object-ownership-new-bucket-sdk-java"></a>

이 예에서는 AWS SDK for Java를 사용하여 새 버킷에 대해 버킷 소유자 적용 설정을 지정합니다.

```
    // Build the ObjectOwnership for CreateBucket
    CreateBucketRequest createBucketRequest = CreateBucketRequest.builder()
            .bucket(bucketName)
            .objectOwnership(ObjectOwnership.BucketOwnerEnforced)
            .build()

     // Send the request to Amazon S3 
     s3client.createBucket(createBucketRequest);
```

## 사용CloudFormation
<a name="object-ownership-new-bucket-cfn"></a>

새 버킷을 생성할 때 `AWS::S3::Bucket` CloudFormation 리소스를 사용하여 객체 소유권을 설정하려면 *AWS CloudFormation 사용 설명서*의 [AWS::S3::Bucket 내 OwnershipControls](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket.html#cfn-s3-bucket-ownershipcontrols) 섹션을 참조하십시오.

## REST API 사용
<a name="object-ownership-new-bucket-rest-api"></a>

S3 객체 소유권에 대해 버킷 소유자 적용 설정을 적용하려면 `x-amz-object-ownership` 요청 헤더를 `BucketOwnerEnforced`로 설정한 상태에서 `CreateBucket` API 작업을 사용합니다. 자세한 내용 및 예제는 **Amazon Simple Storage Service API 참조의 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateBucket.html)를 참조하십시오.

**다음 단계**: 객체 소유권에 대해 버킷 소유자 적용 또는 버킷 소유자 기본 설정을 적용한 후 다음 단계를 추가로 수행할 수 있습니다.
+ [버킷 소유자 시행(Bucket owner enforced)](ensure-object-ownership.md#object-ownership-requiring-bucket-owner-enforced) – IAM 또는 조직 정책을 사용하여 사용 중지된 ACL로 모든 새 버킷을 생성하도록 요구합니다.
+ [버킷 소유자 기본(Bucket owner preferred)](ensure-object-ownership.md#ensure-object-ownership-bucket-policy) - 버킷에 모든 객체 업로드에 대해 `bucket-owner-full-control` 미리 제공 ACL을 요구하도록 S3 버킷 정책을 추가합니다.

# 기존 버킷에 대한 객체 소유권 설정
<a name="object-ownership-existing-bucket"></a>

기존 S3 버킷에 대한 S3 객체 소유권을 구성할 수 있습니다. 버킷을 생성할 때 객체 소유권을 적용하려면 [버킷을 생성할 때 객체 소유권 설정](object-ownership-new-bucket.md) 섹션을 참조하십시오.

S3 객체 소유권은 [액세스 제어 목록(ACL)](acl-overview.md)을 사용 중지하고 버킷에 있는 모든 객체의 소유권을 가져오는 데 사용할 수 있는 Amazon S3 버킷 수준 설정으로, Amazon S3에 저장된 데이터에 대한 액세스 관리를 간소화합니다. 기본적으로 S3 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 신규 버킷에 대해 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 액세스 관리 정책을 사용하여 데이터에 대한 액세스를 독점적으로 관리합니다. 각 객체에 대해 액세스를 개별적으로 제어해야 하는 드문 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다.

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

**ACL 사용 중지됨**
+ **버킷 소유자 적용(기본값)** – ACL이 비활성화되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하고 완전히 제어합니다. ACL은 더 이상 S3 버킷의 데이터에 대한 권한에 영향을 주지 않습니다. 버킷은 정책을 사용하여 액세스 제어를 정의합니다.

**ACL 사용됨**
+ **버킷 소유자 기본(Bucket owner preferred)** – 버킷 소유자가 `bucket-owner-full-control` 미리 제공 ACL을 사용하여 다른 계정이 버킷에 작성하는 새 객체를 소유하고 완전히 제어합니다.
+ **객체 작성자(Object writer)** – 객체를 업로드하는 AWS 계정은 객체를 소유하고 완전히 제어하며 ACL을 통해 다른 사용자에게 이에 대한 액세스 권한을 부여할 수 있습니다.

**사전 조건**: 버킷 소유자 적용 설정을 적용하여 ACL을 비활성화하기 전에 버킷 ACL 권한을 버킷 정책으로 마이그레이션하고 버킷 ACL을 기본 프라이빗 ACL로 재설정해야 합니다. 또한 객체 ACL 권한을 버킷 정책으로 마이그레이션하고 버킷 소유자 전체 제어 ACL 이외의 ACL이 필요한 버킷 정책을 편집하는 것이 좋습니다. 자세한 내용은 [ACL 사용 중지를 위한 사전 조건](object-ownership-migrating-acls-prerequisites.md) 섹션을 참조하세요.

**권한**: 이 작업을 사용하려면 `s3:PutBucketOwnershipControls` 권한이 있어야 합니다. Amazon S3 권한에 대한 자세한 내용은 **서비스 승인 참조에서 [Amazon S3에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)를 참조하세요.

S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 [Amazon S3 API 작업에 필요한 권한](using-with-s3-policy-actions.md) 섹션을 참조하세요.

## S3 콘솔 사용
<a name="add-object-ownership"></a>

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

1. **버킷(Buckets)** 목록에서 S3 객체 소유권 설정을 적용할 버킷의 이름을 선택합니다.

1. **권한** 탭을 선택합니다.

1. **객체 소유권(Object Ownership)**에서 **편집(Edit)**을 선택합니다.

1. **객체 소유권(Object Ownership)**에서 ACL을 사용 중지 또는 사용 설정하고 버킷에 업로드된 객체의 소유권을 제어하려면 다음 설정 중 하나를 선택합니다.

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

     IAM 또는 AWS Organizations 정책을 사용하여 사용 중지된 ACL로 모든 새 버킷을 생성하도록 요구하려면 [모든 새 버킷에 대해 ACL 사용 중지(버킷 소유자 시행)](ensure-object-ownership.md#object-ownership-requiring-bucket-owner-enforced) 섹션을 참조하십시오.

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

     버킷 소유자 기본 설정을 적용하는 경우 모든 Amazon S3 업로드에 `bucket-owner-full-control` 미리 제공 ACL을 포함하도록 요구하려면 이 ACL을 사용하는 객체 업로드만 허용하는 [버킷 정책을 추가](ensure-object-ownership.md#ensure-object-ownership-bucket-policy)할 수 있습니다.
   + **객체 작성자(Object writer)** – 객체를 업로드하는 AWS 계정은 객체를 소유하고 완전히 제어하며 ACL을 통해 다른 사용자에게 이에 대한 액세스 권한을 부여할 수 있습니다.

1. **저장**을 선택합니다.

## AWS CLI 사용
<a name="object-ownership-existing-bucket-cli"></a>

기존 버킷에 대한 객체 소유권 설정을 적용하려면 `--ownership-controls` 파라미터와 함께 `put-bucket-ownership-controls` 명령을 사용합니다. 유효한 소유권 값은`BucketOwnerEnforced`, `BucketOwnerPreferred`, 또는 `ObjectWriter`입니다.

이 예에서는 AWS CLI를 사용하여 기존 버킷에 대해 버킷 소유자 적용 설정을 적용합니다.

```
aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"
```

`put-bucket-ownership-controls`에 대한 자세한 내용은 **AWS Command Line Interface 사용 설명서의 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-ownership-controls.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-ownership-controls.html) 섹션을 참조하십시오.

## Java용 AWS SDK 사용
<a name="object-ownership-existing-bucket-sdk-java"></a>

이 예에서는 AWS SDK for Java를 사용하여 기존 버킷에 대해 `BucketOwnerEnforced` 설정을 적용합니다.

```
         // Build the ObjectOwnership for BucketOwnerEnforced
         OwnershipControlsRule rule = OwnershipControlsRule.builder()
                .objectOwnership(ObjectOwnership.BucketOwnerEnforced)
                .build();

         OwnershipControls ownershipControls = OwnershipControls.builder()
                   .rules(rule)
                   .build()

          // Build the PutBucketOwnershipControlsRequest
          PutBucketOwnershipControlsRequest putBucketOwnershipControlsRequest =
                PutBucketOwnershipControlsRequest.builder()
                        .bucket(BUCKET_NAME)
                        .ownershipControls(ownershipControls)
                        .build();
                        
          // Send the request to Amazon S3 
          s3client.putBucketOwnershipControls(putBucketOwnershipControlsRequest);
```

## 사용CloudFormation
<a name="object-ownership-existing-bucket-cfn"></a>

CloudFormation을 사용하여 기존 버킷에 대한 객체 소유권 설정을 적용하려면 *AWS CloudFormation 사용 설명서*의 [https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ownershipcontrols.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-ownershipcontrols.html) 섹션을 참조하십시오.

## REST API 사용
<a name="object-ownership-existing-bucket-rest-api"></a>

REST API를 사용하여 기존 S3 버킷에 객체 소유권 설정을 적용하려면 `PutBucketOwnershipControls`를 사용하십시오. 자세한 내용은 *Amazon Simple Storage Service API 참조*의 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketOwnershipControls.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketOwnershipControls.html)를 참조하십시오.

**다음 단계**: 객체 소유권에 대해 버킷 소유자 적용 또는 버킷 소유자 기본 설정을 적용한 후 다음 단계를 추가로 수행할 수 있습니다.
+ [버킷 소유자 시행(Bucket owner enforced)](ensure-object-ownership.md#object-ownership-requiring-bucket-owner-enforced) – IAM 또는 조직 정책을 사용하여 사용 중지된 ACL로 모든 새 버킷을 생성하도록 요구합니다.
+ [버킷 소유자 기본(Bucket owner preferred)](ensure-object-ownership.md#ensure-object-ownership-bucket-policy) - 버킷에 모든 객체 업로드에 대해 `bucket-owner-full-control` 미리 제공 ACL을 요구하도록 S3 버킷 정책을 추가합니다.

# S3 버킷에 대한 객체 소유권 설정 보기
<a name="object-ownership-retrieving"></a>

S3 객체 소유권은 [액세스 제어 목록(ACL)](acl-overview.md)을 사용 중지하고 버킷에 있는 모든 객체의 소유권을 가져오는 데 사용할 수 있는 Amazon S3 버킷 수준 설정으로, Amazon S3에 저장된 데이터에 대한 액세스 관리를 간소화합니다. 기본적으로 S3 객체 소유권은 버킷 소유자 적용 설정으로 설정되며 신규 버킷에 대해 ACL이 비활성화되어 있습니다. ACL이 비활성화되면 버킷 소유자는 버킷의 모든 객체를 소유하고 액세스 관리 정책을 사용하여 데이터에 대한 액세스를 독점적으로 관리합니다. 각 객체에 대해 액세스를 개별적으로 제어해야 하는 드문 상황을 제외하고는 ACL을 비활성화한 채로 두는 것이 좋습니다.

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

**ACL 사용 중지됨**
+ **버킷 소유자 적용(기본값)** – ACL이 비활성화되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하고 완전히 제어합니다. ACL은 더 이상 S3 버킷의 데이터에 대한 권한에 영향을 주지 않습니다. 버킷은 정책을 사용하여 액세스 제어를 정의합니다.

**ACL 사용됨**
+ **버킷 소유자 기본(Bucket owner preferred)** – 버킷 소유자가 `bucket-owner-full-control` 미리 제공 ACL을 사용하여 다른 계정이 버킷에 작성하는 새 객체를 소유하고 완전히 제어합니다.
+ **객체 작성자(Object writer)** – 객체를 업로드하는 AWS 계정은 객체를 소유하고 완전히 제어하며 ACL을 통해 다른 사용자에게 이에 대한 액세스 권한을 부여할 수 있습니다.

Amazon S3 버킷에 대한 S3 객체 소유권 설정을 볼 수 있습니다. 새 버킷에 대한 객체 소유권을 설정하려면 [버킷을 생성할 때 객체 소유권 설정](object-ownership-new-bucket.md) 섹션을 참조하십시오. 기존 버킷에 대한 객체 소유권을 설정하려면 [기존 버킷에 대한 객체 소유권 설정](object-ownership-existing-bucket.md) 섹션을 참조하십시오.

**권한**: 이 작업을 사용하려면 `s3:GetBucketOwnershipControls` 권한이 있어야 합니다. Amazon S3 권한에 대한 자세한 내용은 **서비스 승인 참조에서 [Amazon S3에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)를 참조하세요.

S3 리소스 유형별 S3 API 작업 권한에 대한 자세한 내용은 [Amazon S3 API 작업에 필요한 권한](using-with-s3-policy-actions.md) 섹션을 참조하세요.

## S3 콘솔 사용
<a name="object-ownership-retrieving-console"></a>

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 Amazon S3 콘솔을 엽니다.

1. **버킷(Buckets)** 목록에서 객체 소유권 설정을 적용할 버킷의 이름을 선택합니다.

1. **권한** 탭을 선택합니다.

1. **객체 소유권(Object Ownership)**에서 버킷에 대한 객체 소유권 설정을 볼 수 있습니다.

## AWS CLI 사용
<a name="object-ownership-retrieving-cli"></a>

S3 버킷에 대한 S3 객체 소유권 설정을 검색하려면 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-ownership-controls.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/get-bucket-ownership-controls.html) AWS CLI 명령을 사용합니다.

```
aws s3api get-bucket-ownership-controls --bucket amzn-s3-demo-bucket
```

## REST API 사용
<a name="object-ownership-retrieving-rest-api"></a>

S3 버킷에 대한 객체 소유권 설정을 검색하려면 `GetBucketOwnershipControls` API 작업을 사용합니다. [자세한 내용은 GetBucketOwnershipControls 단원을 참조하세요.](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketOwnershipControls.html)

# 모든 새 버킷에 대해 ACL 사용 중지 및 객체 소유권 시행
<a name="ensure-object-ownership"></a>

Amazon S3 버킷에서 ACL을 사용 중지하는 것이 좋습니다. S3 객체 소유권에 대해 버킷 소유자 적용 설정을 적용하여 이 작업을 수행할 수 있습니다. 이 설정을 적용하면 ACL이 사용 중지되고 버킷의 모든 객체를 자동으로 소유하고 완전히 제어할 수 있습니다. 모든 새 버킷이 ACL을 비활성화한 상태로 생성되도록 하려면 다음 섹션에 설명된 대로 AWS Identity and Access Management(IAM) 정책 또는 AWS Organizations 서비스 제어 정책(SCP)을 사용하십시오.

ACL을 사용 중지하지 않고 새 객체에 대해 객체 소유권을 시행하려면 버킷 소유자 기본 설정을 적용합니다. 이 설정을 적용할 때 버킷에 대한 모든 `PUT` 요청에 `bucket-owner-full-control` 미리 제공된 ACL을 요구하도록 버킷 정책을 업데이트하는 것이 좋습니다. 다른 계정에서 버킷으로 `bucket-owner-full-control` 미리 제공된 ACL을 보내도록 클라이언트도 업데이트해야 합니다.

**Topics**
+ [모든 새 버킷에 대해 ACL 사용 중지(버킷 소유자 시행)](#object-ownership-requiring-bucket-owner-enforced)
+ [Amazon S3 `PUT` 작업에 bucket-owner-full-control 미리 제공된 ACL 요구(버킷 소유자 기본)](#ensure-object-ownership-bucket-policy)

## 모든 새 버킷에 대해 ACL 사용 중지(버킷 소유자 시행)
<a name="object-ownership-requiring-bucket-owner-enforced"></a>

다음 예시 IAM 정책은 객체 소유권에 대해 버킷 소유자 적용 설정이 적용되지 않는 한 특정 IAM 사용자 또는 역할에 대해 `s3:CreateBucket` 권한을 거부합니다. `Condition` 블록의 키-값 페어는 `s3:x-amz-object-ownership`을 키로 지정하고 `BucketOwnerEnforced` 설정을 값으로 지정합니다. 즉, IAM 사용자는 객체 소유권에 대해 버킷 소유자 적용 설정을 지정하고 ACL을 비활성화하는 경우에만 버킷을 생성할 수 있습니다. 이 정책을 AWS 조직의 경계 SCP로 사용할 수도 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RequireBucketOwnerFullControl",
            "Action": "s3:CreateBucket",
            "Effect": "Deny",
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "s3:x-amz-object-ownership": "BucketOwnerEnforced"
                }
            }
        }
    ]
}
```

------

## Amazon S3 `PUT` 작업에 bucket-owner-full-control 미리 제공된 ACL 요구(버킷 소유자 기본)
<a name="ensure-object-ownership-bucket-policy"></a>

객체 소유권에 대해 버킷 소유자 기본 설정을 사용하면 버킷 소유자는 다른 계정이 `bucket-owner-full-control` 미리 제공된 ACL을 사용하여 버킷에 작성하는 새 객체를 소유하고 완전히 제어할 수 있습니다. 그러나 다른 계정이 `bucket-owner-full-control` 미리 제공 ACL 없이 버킷에 객체를 작성하는 경우 객체 작성자는 모든 제어 액세스 권한을 유지합니다. 버킷 소유자는 `bucket-owner-full-control` 미리 제공 ACL을 지정하는 경우에만 쓰기를 허용하는 버킷 정책을 구현할 수 있습니다.

**참고**  
버킷 소유자 적용 설정으로 ACL을 비활성화한 경우 버킷 소유자는 버킷의 모든 객체를 자동으로 소유하고 완전히 제어할 수 있습니다. 버킷 소유자에 대해 객체 소유권을 시행하기 위해 이 섹션을 사용하여 버킷 정책을 업데이트할 필요가 없습니다.

다음 버킷 정책은 객체의 ACL이 `111122223333`로 설정된 경우에만 *`amzn-s3-demo-bucket`* 계정이 *`bucket-owner-full-control`*에 객체를 업로드할 수 있도록 지정합니다. *`111122223333`*을 계정으로 바꾸고 *`amzn-s3-demo-bucket`*을 버킷의 이름으로 바꿔야 합니다.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "OnlyAllowWritesToMyBucketWithBucketOwnerFullControl",
         "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"
            }
         }
      }
   ]
}
```

------

다음은 AWS Command Line Interface(AWS CLI)를 사용하여 미리 제공된 ACL `bucket-owner-full-control`을 포함하는 복사 작업을 수행하는 예입니다.

```
aws s3 cp file.txt s3://amzn-s3-demo-bucket --acl bucket-owner-full-control
```

버킷 정책이 적용된 후 클라이언트에 `bucket-owner-full-control` 미리 제공된 ACL이 포함되어 있지 않으면 작업이 실패하고 업로드하는 사용자에게 다음 오류가 표시됩니다.

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied(PutObject 작업을 호출할 때 오류(AccessDenied) 발생: 액세스 거부).

**참고**  
업로드 후 클라이언트에서 객체에 액세스해야 하는 경우 업로드하는 계정에 추가 권한을 부여해야 합니다. 계정에 리소스에 대한 액세스 권한을 부여하는 방법은 [정책을 사용하여 Amazon S3 리소스에 대한 액세스를 관리하는 연습](example-walkthroughs-managing-access.md) 단원을 참조하십시오.

# 문제 해결
<a name="object-ownership-error-responses"></a>

S3 객체 소유권에 대해 버킷 소유자 적용 설정을 적용하면 액세스 제어 목록(ACL)이 비활성화되고 버킷 소유자는 버킷의 모든 객체를 자동으로 소유합니다. ACL은 더 이상 버킷의 객체에 대한 권한에 영향을 주지 않습니다. 정책을 사용하여 권한을 부여할 수 있습니다. 모든 S3 `PUT` 요청은 `bucket-owner-full-control` 미리 준비된 ACL을 지정하거나 ACL을 지정하지 않아야 합니다. 이렇게 하지 않으면 요청이 실패합니다. 자세한 내용은 [객체 소유권 제어 및 버킷에 대해 ACL 사용 중지](about-object-ownership.md) 섹션을 참조하세요.

잘못된 ACL이 지정되거나 버킷 ACL 권한이 AWS 계정 외부의 액세스 권한을 부여하면 다음과 같은 오류 응답이 표시될 수 있습니다.

## AccessControlListNotSupported
<a name="object-ownership-error-responses-acl-not-supported"></a>

객체 소유권에 대해 버킷 소유자 적용 설정을 적용하면 ACL이 비활성화됩니다. ACL 설정 또는 ACL 업데이트 요청은 `400` 오류와 함께 실패하고 AccessControlListNotSupported 오류 코드를 반환합니다. ACL 읽기 요청은 계속 지원됩니다. ACL 읽기 요청은 항상 버킷 소유자에 대한 전체 제어 권한을 보여주는 응답을 반환합니다. `PUT` 작업에서 버킷 소유자 전체 권한 ACL을 지정하거나 ACL을 지정하지 않아야 합니다. 그렇지 않으면 `PUT` 작업이 실패합니다.

다음 예제 `put-object` AWS CLI 명령에는 `public-read` 미리 제공된 ACL이 포함되어 있습니다.

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key object-key-name --body doc-example-body --acl public-read
```

버킷이 버킷 소유자 적용 설정을 사용하여 ACL을 비활성화하면 작업이 실패하고 업로드하는 사용자에게 다음 오류 메시지가 표시됩니다.

PutObject 작업을 호출할 때 오류(AccessControlListNotSupported)가 발생했습니다. 버킷이 ACL을 허용하지 않습니다

## InvalidBucketAclWithObjectOwnership
<a name="object-ownership-error-responses-invalid-acl"></a>

버킷 소유자 적용 설정을 적용하여 ACL을 비활성화하려면 버킷 ACL이 버킷 소유자에게만 전체 제어 권한을 부여해야 합니다. 버킷 ACL은 외부 AWS 계정 또는 다른 그룹에 대한 액세스 권한을 부여할 수 없습니다. 예를 들어 `CreateBucket` 요청이 버킷 소유자 시행을 설정하고 외부 AWS 계정에 대한 액세스를 제공하는 버킷 ACL을 지정하는 경우 요청은 `400` 오류와 함께 실패하고 InvalidBucketAclWithObjectOwnership 오류 코드를 반환합니다. 마찬가지로 `PutBucketOwnershipControls` 요청이 다른 사람에게 권한을 부여하는 버킷 ACL이 있는 버킷에 적용되는 버킷 소유자를 설정하는 경우 요청이 실패합니다.

**Example : 기존 버킷 ACL이 퍼블릭 읽기 액세스 권한 부여**  
예를 들어 기존 버킷 ACL이 퍼블릭 읽기 액세스 권한을 부여하는 경우 이러한 ACL 권한을 버킷 정책으로 마이그레이션하고 버킷 ACL을 기본 프라이빗 ACL로 재설정할 때까지 객체 소유권에 대해 버킷 소유자 적용 설정을 적용할 수 없습니다. 자세한 내용은 [ACL 사용 중지를 위한 사전 조건](object-ownership-migrating-acls-prerequisites.md) 섹션을 참조하세요.  
이 예제 버킷 ACL은 퍼블릭 읽기 액세스 권한을 부여합니다.  

```
{
    "Owner": {
        "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID"
    },
    "Grants": [
        {
            "Grantee": {
                "ID": "852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID",
                "Type": "CanonicalUser"
            },
            "Permission": "FULL_CONTROL"
        },
        {
            "Grantee": {
                "Type": "Group",
                "URI": "http://acs.amazonaws.com/groups/global/AllUsers"
            },
            "Permission": "READ"
        }
    ]
}
```
다음 예시 `put-bucket-ownership-controls` AWS CLI 명령은 객체 소유권에 대해 버킷 소유자 적용 설정을 적용합니다.  

```
aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]
```
버킷 ACL이 퍼블릭 읽기 액세스 권한을 부여하기 때문에 요청이 실패하고 다음 오류 코드를 반환합니다.  
PutBucketOwnershipControls 작업을 호출할 때 오류(InvalidBucketAclWithObjectOwnership)가 발생했습니다. 버킷은 ObjectOwnership의 BucketOwnerEnforced 설정으로 ACL을 설정할 수 없습니다.