

# 既存のバケットでのオブジェクトの所有権の設定
<a name="object-ownership-existing-bucket"></a>

既存の S3 バケットで S3 オブジェクトの所有権を設定できます。バケットを作成するときにオブジェクトの所有権を適用するには、[バケットの作成時のオブジェクトの所有権の設定。](object-ownership-new-bucket.md) を参照してください。

S3 オブジェクトの所有権は、[アクセスコントロールリスト (ACL)](acl-overview.md) を無効化するために使用できる Amazon S3 バケットレベルの設定で、バケット内のすべてのオブジェクトの所有権を取得し、Amazon S3 に保存されているデータのアクセス管理を簡素化します。デフォルトでは、オブジェクト所有者はバケット所有者の強制設定に設定され、新しいバケットの ACL が無効になります。ACL を無効にすると、バケット所有者はバケット内のすべてのオブジェクトを所有し、アクセス管理ポリシーのみを使用してデータへのアクセスを管理します。オブジェクトごとに個別に制御する必要がある通常ではない状況を除き、ACL は無効にしておくことをお勧めします。

オブジェクト所有権には、バケットにアップロードされるオブジェクトの所有権を制御し、ACL を無効または有効化するために使用できる 3 つの設定があります。

**ACL の無効化**
+ **バケット所有者の強制 (デフォルト)** – ACL は無効になり、バケット所有者はバケット内のすべてのオブジェクトを自動的に所有し、完全に制御します。ACL は、S3 バケット内のデータに対するアクセス許可に対して影響を与えません。バケットは、ポリシーを使用してアクセスコントロールを定義します。

**ACL の有効化。**
+ **希望するバケット所有者** — バケット所有者は、他のアカウントが `bucket-owner-full-control` 既定 ACL でバケットに書き込む新しいオブジェクトを所有し、完全にコントロールできます。
+ **オブジェクトライター** — オブジェクトをアップロードする AWS アカウント は、そのオブジェクトを所有し、そのオブジェクトを完全にコントロールし、ACL を介して他のユーザーにそのオブジェクトへのアクセス権を付与できます。

**前提条件**: [バケット所有者の強制] 設定を適用して ACL を無効にする前に、バケット ACL アクセス権限をバケットポリシーに移行し、バケット ACL をデフォルトのプライベート ACL にリセットする必要があります。また、オブジェクト ACL アクセス権限をバケットポリシーに移行し、バケット所有者の完全制御 ACL 以外の ACL を必要とするバケットポリシーを編集することをお勧めします。詳細については、[ACL を無効にする前提条件。](object-ownership-migrating-acls-prerequisites.md) を参照してください。

**許可**: このオペレーションを使用するには、`s3:PutBucketOwnershipControls` 許可が必要です。詳細については、「サービス認可リファレンス」の「[Actions, resources, and condition keys for 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 マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. **バケット** リストで、S3 オブジェクトの所有者の設定を適用するバケットの名前を選択します。

1. **[アクセス許可]** タブを選択します。

1. **オブジェクトの所有者**で [**編集**] を選択します。

1. **オブジェクト所有権**は、ACL を無効または有効にして、バケットにアップロードされたオブジェクトの所有権を制御するために、次の設定のいずれか一つを選択します。

**ACL は無効です**
   + **バケット所有者の強制** - ACL は無効になり、バケット所有者はバケット内のすべてのオブジェクトを自動的に所有し、完全にコントロールできます。ACL は、S3 バケット内のデータに対するアクセス許可に対して影響を与えません。このバケットはアクセスコントロールを定義するためにポリシーを使用します。

     IAM または AWS Organizations ポリシーを使用し、ACL を無効にしてすべての新しいバケットを作成することを要求するには、[すべての新しいバケットの ACL を無効にします (バケット所有者の強制)](ensure-object-ownership.md#object-ownership-requiring-bucket-owner-enforced) を参照してください。

**ACL の有効化**
   + **希望するバケット所有者** — バケット所有者は、他のアカウントが `bucket-owner-full-control` 既定 ACL でバケットに書き込む新しいオブジェクトを所有し、完全にコントロールできます。

     バケット所有者の優先設定を適用して、すべての Amazon S3 アップロードに `bucket-owner-full-control` 既定 ACL を含めることを要求する場合は、この ACL を使用するオブジェクトアップロードのみを許可する[バケットポリシーを追加](ensure-object-ownership.md#ensure-object-ownership-bucket-policy)できます。
   + **オブジェクトライター (デフォルト)** – オブジェクトをアップロードする AWS アカウント は、オブジェクトを所有し、オブジェクトを完全に制御し、ACL を介して他のユーザーにオブジェクトへのアクセスを許可できます。

1. **[保存]** を選択します。

## AWS CLI の使用
<a name="object-ownership-existing-bucket-cli"></a>

既存のバケットにオブジェクトの所有権設定を適用するには、`put-bucket-ownership-controls` パラメータのある `--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)」を参照してください。

## AWS SDK for Java の使用
<a name="object-ownership-existing-bucket-sdk-java"></a>

この例では、`BucketOwnerEnforced` を使用して既存のバケットに対してオブジェクト所有権の AWS SDK for Java 設定を適用します。

```
         // 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)」を参照してください。

**次のステップ**: オブジェクトの所有権にバケット所有者の強制設定またはバケット所有者の優先設定を適用した後、さらに次の手順を実行できます。
+ [バケット所有者の強制](ensure-object-ownership.md#object-ownership-requiring-bucket-owner-enforced) − IAM または組織ポリシーを使用して、ACL を無効にしてすべての新しいバケットを作成する必要があります。
+ [バケット所有者推奨](ensure-object-ownership.md#ensure-object-ownership-bucket-policy) − S3 バケットポリシーを追加して、バケットへのすべてのオブジェクトのアップロードに `bucket-owner-full-control` 規定 ACL を要求します