

# レプリカ所有者の変更
<a name="replication-change-owner"></a>

レプリケーションでは、デフォルトで、レプリケート元オブジェクトの所有者もレプリカを所有しています。しかし、レプリケート元とレプリケート先のバケットが、異なる AWS アカウントによって所有されている場合、レプリカの所有権を変更することができます。例えば、所有権を変更して、オブジェクトレプリカへのアクセスを制限できます。レプリケーション設定では、レプリカの所有権をレプリカ先バケットを所有する AWS アカウントに変更するためのオプションの設定を追加できます。

レプリカ所有者を変更するには、以下を実行します。
+ レプリカの所有権を変更するよう Amazon S3 に指示するには、レプリケーション設定に所有者オーバーライドオプションを追加します。**
+ レプリカの所有権を変更する `s3:ObjectOwnerOverrideToBucketOwner` アクセス許可を Amazon S3 に付与します。
+ レプリケート先バケットポリシーに `s3:ObjectOwnerOverrideToBucketOwner` アクセス許可を追加して、レプリカの所有権を変更できるようにします。`s3:ObjectOwnerOverrideToBucketOwner` アクセス許可により、レプリケート先バケットの所有者がオブジェクトレプリカの所有権を受け入れることができるようになります。

詳細については、「[所有権オーバーライドオプションに関する考慮事項](#repl-ownership-considerations)」および「[レプリケーション設定への所有者オーバーライドオプションの追加](#repl-ownership-owneroverride-option)」を参照してください。ステップバイステップの手順を含む実例については、「[レプリカの所有者を変更する方法](#replication-walkthrough-3)」を参照してください。

**重要**  
所有者オーバーライドオプションを使用する代わりに、オブジェクト所有権にバケット所有者の強制設定を使用できます。S3 レプリケーションを使用し、レプリケート元バケットとレプリケート先バケットが異なる AWS アカウントによって所有される場合、バケットを使用する場合、レプリケート先バケットのバケット所有者は [オブジェクト所有権] に対するバケット所有者の強制設定を使用して、レプリカの所有権を送信先バケットを所有する AWS アカウントに変更することができます。この設定は、オブジェクトアクセスコントロールリスト (ACL) を無効にします。  
このバケット所有者の強制設定は、`s3:ObjectOwnerOverrideToBucketOwner` 許可の必要なく、既存の所有者のオーバーライド動作を模倣します。バケット所有者強制設定で宛先バケットにレプリケーションされるすべてのオブジェクトは、宛先バケット所有者によって所有されます。オブジェクトの所有権の詳細については、「[オブジェクトの所有権の制御とバケットの ACL の無効化。](about-object-ownership.md)」を参照してください。

## 所有権オーバーライドオプションに関する考慮事項
<a name="repl-ownership-considerations"></a>

所有権オーバーライドオプションを設定するときは、次の考慮事項が適用されます。
+ デフォルトでは、レプリケート元オブジェクトの所有者がレプリカの所有者となります。Amazon S3 は、オブジェクトバージョンとそれに関連付けられた ACL をレプリケートします。

  レプリケーション設定に所有者オーバーライドオプションを追加すると、Amazon S3 はオブジェクトのバージョンのみをレプリケートし、ACL はレプリケートしません。さらに、Amazon S3 は、以降の変更をレプリケート元オブジェクト ACL にレプリケートしません。Amazon S3 は、完全な制御をレプリケート先バケット所有者に許可する ACL をレプリカに設定します。
+  所有者オーバーライドを有効、または無効にするようにレプリケーション設定を更新すると、以下の挙動が生じます。
  + レプリケーション設定へ所有者オーバーライドオプションを追加する場合。

    Amazon S3 がオブジェクトバージョンをレプリケートすると、レプリケート元オブジェクトに関連付けられている ACL は破棄されます。代わりに、Amazon S3 は完全なコントロールをレプリケート先バケットの所有者に与えるレプリカに設定されます。Amazon S3 は、以降の変更をレプリケート元オブジェクト ACL にレプリケートしません。ただし、この ACL 変更は、所有者オーバーライドオプションを設定する前にレプリケートされたオブジェクトバージョンには適用されません。所有者オーバーライドが設定される前にレプリケートされたレプリケート元オブジェクトの ACL 更新は、レプリケートされ続けます (オブジェクトとそのレプリカの所有者が引き続き同じであるため)。
  + レプリケーション設定から所有者オーバーライドオプションを削除する場合。

    Amazon S3 は、レプリケート元バケットと関連 ACL に表示される新しいオブジェクトを、レプリケート先バケットにレプリケートします。所有者オーバーライドを削除する前にレプリケートされたオブジェクトの場合、Amazon S3 によるオブジェクト所有権の変更が有効なため、Amazon S3 は ACL をレプリケートしません。つまり、所有者オーバーライド設定時にレプリケートされたオブジェクトバージョンに設定された ACL は、引き続きレプリケートされません。

## レプリケーション設定への所有者オーバーライドオプションの追加
<a name="repl-ownership-owneroverride-option"></a>

**警告**  
所有者オーバーライドオプションを追加するのは、レプリケーション元バケットとレプリケーション先バケットが異なる AWS アカウントによって所有されている場合のみです。Amazon S3 はバケットが同じアカウントによって所有されているか、異なるアカウントによって所有されているかをチェックしません。両方のバケットが同じ AWS アカウントによって所有されている場合に所有者オーバーライドを追加すると、Amazon S3 は所有者オーバーライドを適用します。このオプションは、レプリケート先バケットの所有者にフルアクセス権を付与し、その後の更新はソースオブジェクトのアクセスコントロールリスト (ACL) にレプリケートされません。レプリカの所有者は、`PutObjectAcl` リクエストを持つレプリカに関連付けられた ACL を直接変更できますが、レプリケーションを通して変更することはできません。

所有者の上書きオプションを指定するには、各`Destination`要素に次を追加します。
+ Amazon S3 にレプリカの所有権を変更するよう指示する `AccessControlTranslation` 要素
+ レプリケート先バケット所有者の AWS アカウントを指定する `Account` 要素 

```
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    ...
    <Destination>
      ...
      <AccessControlTranslation>
           <Owner>Destination</Owner>
       </AccessControlTranslation>
      <Account>destination-bucket-owner-account-id</Account>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```

次のレプリケーション設定例では、*`Tax`* キープレフィックスを持つオブジェクトを `amzn-s3-demo-destination-bucket` レプリケート先バケットにレプリケートし、レプリカの所有権を変更するようAmazon S3 に指示します。この例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

```
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
   <Role>arn:aws:iam::account-id:role/role-name</Role>
   <Rule>
      <ID>Rule-1</ID>
      <Priority>1</Priority>
      <Status>Enabled</Status>
      <DeleteMarkerReplication>
         <Status>Disabled</Status>
      </DeleteMarkerReplication>
      <Filter>
         <Prefix>Tax</Prefix>
      </Filter>
      <Destination>
         <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
         <Account>destination-bucket-owner-account-id</Account>
         <AccessControlTranslation>
            <Owner>Destination</Owner>
         </AccessControlTranslation>
      </Destination>
   </Rule>
</ReplicationConfiguration>
```

## レプリカの所有権を変更するための Amazon S3 アクセス許可の付与
<a name="repl-ownership-add-role-permission"></a>

AWS Identity and Access Management IAM ロールに関連付けられているアクセス許可ポリシーに `s3:ObjectOwnerOverrideToBucketOwner` アクションのアクセス許可を追加することで、Amazon S3 にレプリカの所有権を変更するアクセス許可を付与します。このロールは、Amazon S3 がユーザーに代わってオブジェクトを引き受けてレプリケートすることを可能にする、レプリケーション設定で指定した IAM ロールです。次の例を使用するには、`amzn-s3-demo-destination-bucket` をレプリケート先バケットの名前に置き換えます。

```
...
{
    "Effect":"Allow",
         "Action":[
       "s3:ObjectOwnerOverrideToBucketOwner"
    ],
    "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}
...
```

## レプリケート先バケットポリシーへのレプリカの所有権を変更するアクセス許可の追加
<a name="repl-ownership-accept-ownership-b-policy"></a>

レプリケート先バケットの所有者は、レプリケート元バケットの所有者に、レプリカの所有権を変更するためのアクセス権限を付与する必要があります。レプリケート先バケットの所有者は、レプリケート元バケットの所有者に、`s3:ObjectOwnerOverrideToBucketOwner` アクションのためのアクセス権限を付与します。このアクセス許可により、レプリケート先バケット所有者はオブジェクトレプリカの所有権を受け入れることができるようになります。次のバケットポリシーステートメントの例は、この操作を行う方法を示しています。この例を実行するには、`user input placeholders` をユーザー自身の情報に置き換えます。

```
...
{
    "Sid":"1",
    "Effect":"Allow",
    "Principal":{"AWS":"source-bucket-account-id"},
    "Action":["s3:ObjectOwnerOverrideToBucketOwner"],
    "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
}
...
```

## レプリカの所有者を変更する方法
<a name="replication-walkthrough-3"></a>

レプリケーション設定内のレプリケーション元のバケットとレプリケーション先のバケットが異なる AWS アカウントによって所有されている場合、Amazon S3 に対し、レプリカの所有権をレプリケーション先のバケットを所有している AWS アカウントに変更するよう指示できます。次の例は、Amazon S3 コンソール、AWS Command Line Interface (AWS CLI)、および AWS SDK を使用してレプリカの所有権を変更する方法を示しています。

### S3 コンソールの使用
<a name="replication-ex3-console"></a>

手順については、「[同じアカウントでのバケットのレプリケーションの設定](replication-walkthrough1.md)」を参照してください。このトピックでは、レプリケート元およびレプリケート先バケットが同一の、または異なる AWS アカウントによって所有されている場合にレプリケーション設定を行う手順について説明します。

### の使用AWS CLI
<a name="replication-ex3-cli"></a>

次の手順は、AWS CLI を使用してレプリカの所有権を変更する方法を示しています。この手順では、次の操作を行います。
+ レプリケート元バケットとレプリケート先バケットを作成します。
+ バケットでのバージョニングを有効化します。
+ オブジェクトをレプリケートするための Amazon S3 許可を付与する AWS Identity and Access Management (IAM) ロールを作成します。
+ レプリケート元バケットにレプリケーション設定を追加します。
+ レプリケーション設定で、Amazon S3 にレプリカ所有権の変更を指示します。
+ レプリケーション設定をテストします。

**レプリケート元とレプリケート先のバケットが、異なる AWS アカウントによって所有されている場合にレプリカの所有権を変更するには (AWS CLI)**

この手順の AWS CLI コマンドの例を使用するには、`user input placeholders` を自分の情報に置き換えてください。

1. この例では、レプリケート元およびレプリケート先バケットを 2 つの異なる AWS アカウントで作成します。これらの 2 つのアカウントを使用するには、2 つの名前付きプロファイルで AWS CLI を設定します。この例では、それぞれ *`acctA`* と *`acctB`* という名前のプロファイルを使用します。名前付きプロファイルの設定と使用に関する詳細については、「AWS Command Line Interface ユーザーガイド」の「[設定ファイルと認証情報ファイルの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」を参照してください。**
**重要**  
この手順に使用するプロファイルは、必要なアクセス権限を持っている必要があります。たとえば、レプリケーション設定で、Amazon S3 が引き受けることができる IAM ロールを指定します。使用するプロファイルに `iam:PassRole` アクセス権限がある場合のみ実行できます。管理者ユーザーの認証情報を使用して名前付きプロファイルを作成すると、この手順のすべてのタスクを実行できるようになります。詳細については、*IAM ユーザーガイド*の「[AWS のサービス のサービスにロールを渡すアクセス権限をユーザーに付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」を参照してください。

1. レプリケート元バケットを作成してバージョニングを有効にします。この例では、米国東部 (バージニア北部) (`us-east-1`) リージョンに `amzn-s3-demo-source-bucket` というレプリケート元バケットを作成します。

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-source-bucket \
   --region us-east-1 \
   --profile acctA
   ```

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-source-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctA
   ```

1. レプリケート先バケットを作成してバージョニングを有効にします。この例では、米国西部 (オレゴン) (`us-west-2`) リージョンに `amzn-s3-demo-destination-bucket` というレプリケート先バケットを作成します。レプリケート元バケットに使用したものとは異なる AWS アカウントプロファイルを使用してください。

   ```
   aws s3api create-bucket \
   --bucket amzn-s3-demo-destination-bucket \
   --region us-west-2 \
   --create-bucket-configuration LocationConstraint=us-west-2 \
   --profile acctB
   ```

   ```
   aws s3api put-bucket-versioning \
   --bucket amzn-s3-demo-destination-bucket \
   --versioning-configuration Status=Enabled \
   --profile acctB
   ```

1. レプリケート先バケットポリシーにアクセス許可を追加して、レプリカの所有権を変更できるようにします。

   1.  次のポリシーを `destination-bucket-policy.json` という名前のファイルに保存します。*`user input placeholders`* をユーザー自身の情報に必ず置き換えます。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "destination_bucket_policy_sid",
                  "Principal": {
                      "AWS": "source-bucket-owner-123456789012"
                  },
                  "Action": [
                      "s3:ReplicateObject",
                      "s3:ReplicateDelete",
                      "s3:ObjectOwnerOverrideToBucketOwner",
                      "s3:ReplicateTags",
                      "s3:GetObjectVersionTagging"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
                  ]
              }
          ]
      }
      ```

------

   1. 次の `put-bucket-policy` コマンドを使用して、前述のポリシーを送信先バケットに追加します。

      ```
      aws s3api put-bucket-policy --region $ {destination-region} --bucket $ {amzn-s3-demo-destination-bucket} --policy file://destination_bucket_policy.json
      ```

1. IAM ロールを作成します。レプリケート元バケットに後で追加するレプリケーション設定でこのロールを指定します。Amazon S3 は、ユーザーに代わってオブジェクトをレプリケートするこの ロールを引き受けます。IAM ロールは 2 つのステップで作成します。
   + ロールを作成します。
   + アクセス権限ポリシーをロールにアタッチします。

   1. IAM ロールを作成します。

      1. 次の信頼ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある `s3-role-trust-policy.json` という名前のファイルに保存します。このポリシーは、Amazon S3 がロールを引き受けるためのアクセス許可を付与します。

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

****  

         ```
         {
            "Version":"2012-10-17",		 	 	 
            "Statement":[
               {
                  "Effect":"Allow",
                  "Principal":{
                     "Service":"s3.amazonaws.com"
                  },
                  "Action":"sts:AssumeRole"
               }
            ]
         }
         ```

------

      1. 次の AWS CLI `create-role` コマンドを実行して、IAM ロールを作成します。

         ```
         $ aws iam create-role \
         --role-name replicationRole \
         --assume-role-policy-document file://s3-role-trust-policy.json  \
         --profile acctA
         ```

         作成した IAM ロールの Amazon リソースネーム (ARN) を書き留めます。この ARN は、後のステップで必要になります。

   1. アクセス権限ポリシーをロールにアタッチします。

      1. 次のアクセス権限ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある `s3-role-perm-pol-changeowner.json` という名前のファイルに保存します。このポリシーは、さまざまな Amazon S3 バケットとオブジェクトアクションに対するアクセス許可を付与します。次の手順では、このポリシーを先ほど作成した IAM ロールにアタッチします。

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

****  

         ```
         {
            "Version":"2012-10-17",		 	 	 
            "Statement":[
               {
                  "Effect":"Allow",
                  "Action":[
                     "s3:GetObjectVersionForReplication",
                     "s3:GetObjectVersionAcl"
                  ],
                  "Resource":[
                     "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
                  ]
               },
               {
                  "Effect":"Allow",
                  "Action":[
                     "s3:ListBucket",
                     "s3:GetReplicationConfiguration"
                  ],
                  "Resource":[
                     "arn:aws:s3:::amzn-s3-demo-source-bucket"
                  ]
               },
               {
                  "Effect":"Allow",
                  "Action":[
                     "s3:ReplicateObject",
                     "s3:ReplicateDelete",
                     "s3:ObjectOwnerOverrideToBucketOwner",
                     "s3:ReplicateTags",
                     "s3:GetObjectVersionTagging"
                  ],
                  "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
               }
            ]
         }
         ```

------

      1. 前述のアクセス許可ポリシーをロールにアタッチするには、次の `put-role-policy` コマンドを実行します。

         ```
         $ aws iam put-role-policy \
         --role-name replicationRole \
         --policy-document file://s3-role-perm-pol-changeowner.json \
         --policy-name replicationRolechangeownerPolicy \
         --profile acctA
         ```

1. レプリケーション設定をレプリケート元バケットに追加します。

   1. AWS CLI では、レプリケーション設定を JSON で指定する必要があります。以下の JSON を、ローカルコンピュータの現在のディレクトリにある、`replication.json` というファイルに保存します。設定では、`AccessControlTranslation` はレプリカ所有権のレプリケート元バケット所有者からレプリケート先バケット所有者への変更を指定します。

      ```
      {
         "Role":"IAM-role-ARN",
         "Rules":[
            {
               "Status":"Enabled",
               "Priority":1,
               "DeleteMarkerReplication":{
                  "Status":"Disabled"
               },
               "Filter":{
               },
               "Status":"Enabled",
               "Destination":{
                  "Bucket":"arn:aws:s3:::amzn-s3-demo-destination-bucket",
                  "Account":"destination-bucket-owner-account-id",
                  "AccessControlTranslation":{
                     "Owner":"Destination"
                  }
               }
            }
         ]
      }
      ```

   1. レプリケート先バケット名、レプリケート先バケット所有者アカウント ID、および `IAM-role-ARN` の値を指定して JSON を編集します。*`IAM-role-ARN`* を先ほど作成した IAM ロールの ARN に置き換えます。変更を保存します。

   1. 次のコマンドを実行して、レプリケート元バケットにレプリケーション設定を追加します。

      ```
      $ aws s3api put-bucket-replication \
      --replication-configuration file://replication.json \
      --bucket amzn-s3-demo-source-bucket \
      --profile acctA
      ```

1. Amazon S3 コンソールでレプリカの所有権を確認して、レプリケーション設定をテストします。

   1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

   1. オブジェクトをレプリケート元バケットに追加します。レプリケート先バケットにオブジェクトレプリカが含まれていること、およびレプリカの所有権がレプリケート先バケットを所有する AWS アカウントに変更されていることを確認します。

### AWS SDK の使用
<a name="replication-ex3-sdk"></a>

 レプリケーション設定を追加するコード例については、「[AWS SDK の使用](replication-walkthrough1.md#replication-ex1-sdk)」を参照してください。レプリケーション設定を適切に変更する必要があります。概念については、「[レプリカ所有者の変更](#replication-change-owner)」を参照してください。