

# ライブレプリケーションのアクセス許可の設定
<a name="setting-repl-config-perm-overview"></a>

Amazon S3 でライブレプリケーションを設定する場合は、次のように必要なアクセス許可を取得します。
+ レプリケーションルールを作成する AWS Identity and Access Management (IAM) プリンシパル (ユーザーまたはロール) に、特定のアクセス許可のセットを付与する必要があります。
+ Simple Storage Service (Amazon S3) は、ユーザーに代わってオブジェクトをレプリケートするための許可を必要とします。IAM ロールを作成してこれらの許可を付与し、その後、レプリケーション設定でそのロールを指定します。
+ レプリケート元バケットとレプリケート先バケットが同じアカウントによって所有されていない場合、レプリケート先バケット所有者は、レプリカを保存するためのアクセス許可をレプリケート元バケット所有者にも付与する必要があります。

**注記**  
ライブレプリケーションを設定する代わりに S3 バッチオペレーションを使用してオンデマンドでオブジェクトをレプリケートする場合は、S3 バッチレプリケーションに別の IAM ロールとポリシーが必要です。バッチレプリケーションの IAM ロールとポリシーの例については、「[S3 バッチレプリケーション用の IAM ロールの設定](s3-batch-replication-policies.md)」を参照してください。

**Topics**
+ [ステップ 1: レプリケーションルールを作成する IAM プリンシパルにアクセス許可を付与する](#setting-repl-config-role)
+ [ステップ 2: Amazon S3 が引き受ける IAM ロールを作成する](#setting-repl-config-same-acctowner)
+ [(オプション) ステップ 3: レプリケーション元とレプリケーション先のバケットが異なる AWS アカウントによって所有されている場合の許可の付与](#setting-repl-config-crossacct)
+ [(オプション) ステップ 4: レプリカの所有権を変更するアクセス許可の付与](#change-replica-ownership)

## ステップ 1: レプリケーションルールを作成する IAM プリンシパルにアクセス許可を付与する
<a name="setting-repl-config-role"></a>

レプリケーションルールの作成に使用する IAM ユーザーまたはロールには、一方向または双方向レプリケーションのレプリケーションルールを作成するためのアクセス許可が必要です。ユーザーまたはロールにこれらのアクセス許可がない場合、レプリケーションルールを作成することはできません。詳細については、「*IAM ユーザーガイド*」の「[IAM アイデンティティ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)」を参照してください。

ユーザーまたはロールには、次のアクションが必要です。
+ `iam:AttachRolePolicy`
+ `iam:CreatePolicy`
+ `iam:CreateServiceLinkedRole`
+ `iam:PassRole`
+ `iam:PutRolePolicy`
+ `s3:GetBucketVersioning`
+ `s3:GetObjectVersionAcl`
+ `s3:GetObjectVersionForReplication`
+ `s3:GetReplicationConfiguration`
+ `s3:PutReplicationConfiguration`

これらのアクションを含む IAM ポリシーの例を次に示します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetAccessPoint",
                "s3:GetAccountPublicAccessBlock",
                "s3:GetBucketAcl",
                "s3:GetBucketLocation",
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketPublicAccessBlock",
                "s3:ListAccessPoints",
                "s3:ListAllMyBuckets",
                "s3:PutReplicationConfiguration",
                "s3:GetReplicationConfiguration",
                "s3:GetBucketVersioning",
                "s3:GetObjectVersionForReplication",
                "s3:GetObjectVersionAcl",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetObjectVersion",
                "s3:GetBucketOwnershipControls",
                "s3:PutBucketOwnershipControls",
                "s3:GetObjectLegalHold",
                "s3:GetObjectRetention",
                "s3:GetBucketObjectLockConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1-*",
                "arn:aws:s3:::amzn-s3-demo-bucket2-*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:List*AccessPoint*",
                "s3:GetMultiRegion*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:CreateServiceLinkedRole",
                "iam:CreateRole",
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/service-role/s3*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:List*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "iam:CreatePolicy"
              ],
            "Resource": [
                "arn:aws:iam::*:policy/service-role/s3*",
                "arn:aws:iam::*:role/service-role/s3*"
            ]
        }
    ]
}
```

------

## ステップ 2: Amazon S3 が引き受ける IAM ロールを作成する
<a name="setting-repl-config-same-acctowner"></a>



デフォルトで、すべての Simple Storage Service (Amazon S3) リソース (バケット、オブジェクト、関連するサブリソース) はプライベートであり、リソース所有者のみがリソースにアクセスできます。Amazon S3 には、ソースバケットからオブジェクトを読み取って、レプリケートするアクセス許可が必要です。IAM ロールを作成してこれらの許可を付与し、レプリケーション設定でそのロールを指定します。

このセクションでは、信頼ポリシーとこの IAM ロールにアタッチされた最低限必要なアクセス許可ポリシーについて説明します。チュートリアル例では、IAM ロールを作成するための手順をステップバイステップで説明しています。詳細については、「[ライブレプリケーションの設定例](replication-example-walkthroughs.md)」を参照してください。

**注記**  
コンソールを使用してレプリケーション設定を作成する場合は、このセクションをスキップし、代わりにコンソールで、この IAM ロールと必要な信頼ポリシーおよびアクセス許可ポリシーを作成することをお勧めします。

信頼ポリシーは、IAM ロールを引き受けることができるプリンシパル ID を識別します。**アクセス許可ポリシーは、IAM ロールが実行できるアクション、リソース、および条件を指定します。**
+ 以下の例は、信頼ポリシーを示しています。ここでは、このロールを引き受けることができる AWS のサービスプリンシパルとして Amazon S3 を特定します。**

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

****  

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

------
+ 以下の例は、信頼ポリシーを示しています。ここでは、このロールを引き受けることができるプリンシパルとして Amazon S3 および S3 バッチオペレーションを特定します。**バッチレプリケーションジョブを作成する場合はこの方法を使用します。詳細については、「[新しいレプリケーションルールまたは新しいレプリケート先にバッチレプリケーションジョブを作成する](s3-batch-replication-new-config.md)」を参照してください。

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

****  

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

------

  IAM ロールの詳細については、*IAM ユーザーガイド*の [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)を参照してください。
+ 以下の例は、アクセス許可ポリシーを示しています。ここでは、ユーザーに代わってレプリケーションタスクを実行する許可を IAM ロールに付与します。**Amazon S3 がこのロールを引き受ける場合、このポリシーで指定されたアクセス許可を持つことになります。このポリシーでは、`{{amzn-s3-demo-source-bucket}}` はレプリケート元バケットで、`{{amzn-s3-demo-destination-bucket}}` はレプリケート先バケットです。

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

****  

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

------

  以下のアクセス許可ポリシーは、以下のアクションに対する許可を付与します。
  +  `s3:GetReplicationConfiguration` および `s3:ListBucket` — `{{amzn-s3-demo-source-bucket}}` バケットでのこれらのアクションの許可により、Amazon S3 はレプリケーション設定とリストバケットのコンテンツを取得できます。(現在の権限モデルには、`s3:ListBucket` 削除マーカーにアクセスするために許可が必要です。)
  + `s3:GetObjectVersionForReplication` および `s3:GetObjectVersionAcl` – すべてのオブジェクトに付与されているこれらのアクションの許可で、Simple Storage Service (Amazon S3) はオブジェクトに関連付けられた特定のオブジェクトバージョンとアクセスコントロールリスト (ACL) を取得することができます。

    
  + `s3:ReplicateObject` および `s3:ReplicateDelete` — `{{amzn-s3-demo-destination-bucket}}` バケットのオブジェクトに属すこれらのアクションの許可により、Simple Storage Service (Amazon S3) はレプリケート先バケットにオブジェクトまたは削除マーカーをレプリケートできます。削除マーカーの詳細については、「[削除オペレーションがレプリケーションに与える影響](replication-what-is-isnot-replicated.md#replication-delete-op)」を参照してください。
**注記**  
`{{amzn-s3-demo-destination-bucket}}` バケット に対する `s3:ReplicateObject` アクションの許可により、オブジェクトタグや ACL などのメタデータのレプリケーションも許可されます。したがって、`s3:ReplicateTags` アクションのアクセス許可を明示的に付与する必要はありません。
  + `s3:GetObjectVersionTagging` — `{{amzn-s3-demo-source-bucket}}` バケットのオブジェクトに属するこのアクションの許可により、Amazon S3 はレプリケーションのためにオブジェクトタグを読み取ることができるようになります。オブジェクトタグの詳細については、[タグを使用したオブジェクトの分類](object-tagging.md)を参照してください。Amazon S3 が `s3:GetObjectVersionTagging` アクセス許可を持っていない場合は、オブジェクトはレプリケートされますが、オブジェクトタグはレプリケートされません。

  Amazon S3 アクションの一覧については、「サービス認可リファレンス」の「[Amazon S3 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#list_amazons3-actions-as-permissions)」を参照してください。**

  S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。
**重要**  
IAM ロールを所有する AWS アカウントは、IAM ロールに付与するアクションの許可を持っている必要があります。  
例えば、レプリケート元バケットに別の AWS アカウントが所有するオブジェクトが含まれていたとします。オブジェクトの所有者は、IAM ロールを所有する AWS アカウントに、オブジェクトのアクセスコントロールリスト (ACL) を介して必要な許可を明示的に付与する必要があります。そうでない場合、Amazon S3 はオブジェクトにアクセスできず、オブジェクトのレプリケーションは失敗します。ACL のアクセス許可については、「[アクセスコントロールリスト (ACL) の概要](acl-overview.md)」を参照してください。  
  
ここで説明されているアクセス許可は、最小のレプリケーション設定に関連しています。オプションのレプリケーション設定を追加する場合は、追加のアクセス許可を Amazon S3 に付与する必要があります。  
暗号化されたオブジェクトをレプリケートする場合は、必要な AWS Key Management Service (AWS KMS) キーアクセス許可も付与する必要があります。詳細については、「[暗号化されたオブジェクトのレプリケート (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)](replication-config-for-kms-objects.md)」を参照してください。
レプリケーションでオブジェクトロックを使用するには、レプリケーションの設定に使用する AWS Identity and Access Management (IAM) ロールで、ソース S3 バケットに対する 2 つの追加のアクセス許可を付与する必要があります。2 つの新しいアクセス許可とは `s3:GetObjectRetention` と `s3:GetObjectLegalHold` です。ロールに `s3:Get*` アクセス許可がある場合、そのステートメントは要件を満たしています。詳細については、「[S3 レプリケーションでのオブジェクトロックの使用](object-lock-managing.md#object-lock-managing-replication)」を参照してください。

## (オプション) ステップ 3: レプリケーション元とレプリケーション先のバケットが異なる AWS アカウントによって所有されている場合の許可の付与
<a name="setting-repl-config-crossacct"></a>

レプリケート元バケットとレプリケート先バケットが同じアカウントによって所有されていない場合、レプリケート先バケット所有者は、次のように、レプリケート元バケット所有者にレプリケーションアクションを実行する許可を付与するバケットポリシーも追加する必要があります。このポリシーの例では、`{{amzn-s3-demo-destination-bucket}}` はレプリケーション先バケットです。

Amazon S3 コンソールを使用して、このバケットポリシーを自動的に生成することもできます。詳細については、「[レプリケートされたオブジェクトをレプリケート元バケットから受信できるようにする](#receiving-replicated-objects)」を参照してください。

**注記**  
ロールの ARN 形式が異なって表示される場合があります。コンソールを使用してロールが作成された場合、ARN 形式は `arn:aws:iam::{{account-ID}}:role/service-role/{{role-name}}` です。AWS CLI を使用してロールが作成された場合、ARN 形式は `arn:aws:iam::{{account-ID}}:role/{{role-name}}` です。詳細については、「*IAM ユーザーガイド*」の「[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)」を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "PolicyForDestinationBucket",
    "Statement": [
        {
            "Sid": "Permissions on objects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:{{role/service-role/source-account-IAM-role}}"
            },
            "Action": [
                "s3:ReplicateDelete",
                "s3:ReplicateObject"
            ],
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}/*"
        },
        {
            "Sid": "Permissions on bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{111122223333}}:{{role/service-role/source-account-IAM-role}}"
            },
            "Action": [
                "s3:List*",
                "s3:GetBucketVersioning",
                "s3:PutBucketVersioning"
            ],
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}"
        }
    ]
}
```

------

例については、「[異なるアカウントでのバケットのレプリケーション設定](replication-walkthrough-2.md)」を参照してください。

レプリケート元バケットのオブジェクトがタグ付きの場合は、以下の点に注意してください。
+ レプリケート元のバケット所有者が (IAM ロールによって) オブジェクトタグをレプリケートするための `s3:GetObjectVersionTagging` および `s3:ReplicateTags` アクションのアクセス許可を Amazon S3 に付与した場合、Amazon S3 はオブジェクトと共にタグをレプリケートします。IAM ロールに関する詳細は、「[ステップ 2: Amazon S3 が引き受ける IAM ロールを作成する](#setting-repl-config-same-acctowner)」を参照してください。
+ レプリケート先のバケット所有者は、タグがレプリケートされるのを望まない場合、次のステートメントをレプリケート先のバケットポリシーに追加することで、`s3:ReplicateTags` アクションのアクセス許可を明示的に拒否できます。このポリシーでは、`{{amzn-s3-demo-destination-bucket}}` はレプリケーション先バケットです。

  ```
  ...
     "Statement":[
        {
           "Effect":"Deny",
           "Principal":{
              "AWS":"arn:aws:iam::{{source-bucket-account-id}}:{{role/service-role/source-account-IAM-role}}"
           },
           "Action":"s3:ReplicateTags",
           "Resource":"arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}/*"
        }
     ]
  ...
  ```

**注記**  
暗号化されたオブジェクトをレプリケートする場合は、必要な AWS Key Management Service (AWS KMS) キーアクセス許可も付与する必要があります。詳細については、「[暗号化されたオブジェクトのレプリケート (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)](replication-config-for-kms-objects.md)」を参照してください。
レプリケーションでオブジェクトロックを使用するには、レプリケーションの設定に使用する AWS Identity and Access Management (IAM) ロールで、ソース S3 バケットに対する 2 つの追加のアクセス許可を付与する必要があります。2 つの新しいアクセス許可とは `s3:GetObjectRetention` と `s3:GetObjectLegalHold` です。ロールに `s3:Get*` アクセス許可がある場合、そのステートメントは要件を満たしています。詳細については、「[S3 レプリケーションでのオブジェクトロックの使用](object-lock-managing.md#object-lock-managing-replication)」を参照してください。

**レプリケートされたオブジェクトをレプリケート元バケットから受信できるようにする**  
上記のポリシーをレプリケート先バケットに手動で追加する代わりに、Amazon S3 コンソールを介して、レプリケート元バケットからレプリケートされたオブジェクトの受信を有効にするために必要なポリシーをすばやく生成できます。

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

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. **バケット**リストで、レプリケート先バケットとして使用するバケットを選択します。

1. [**Management (管理)**] タブを選択し、[**Replication rules (レプリケーションルール)**] まで下にスクロールします。

1. **[Actions]** (アクション)で、**[Receive replicated objects]** (レプリケートされたオブジェクトの受信)を選択します。

   プロンプトに従って、レプリケート元バケットアカウントの AWS アカウント ID を選択し、**[ポリシーの生成]** を選択します。コンソールにより、Amazon S3 バケットポリシーと KMS キーポリシーが生成されます。

1. このポリシーを既存のバケットポリシーに追加するには、**[Apply settings]** (設定の適用) を選択するか、または **[Copy]** (コピー) をクリックして、変更を手動でコピーします。

1. (オプション) AWS KMS ポリシーを AWS Key Management Service コンソール上の必要な KMS キーポリシーへコピーします。

## (オプション) ステップ 4: レプリカの所有権を変更するアクセス許可の付与
<a name="change-replica-ownership"></a>

レプリケート元とレプリケート先のバケットが、異なる AWS アカウントによって所有されている場合、レプリケート先バケットを所有する AWS アカウントにレプリカの所有者を変更するように Amazon S3 に指示できます。レプリカの所有権を上書きするには、追加のアクセス許可を付与するか、レプリケート先バケットの S3 オブジェクト所有権設定を調整する必要があります。所有者上書きの詳細については、「[レプリカ所有者の変更](replication-change-owner.md)」を参照してください。