

# 暗号化されたオブジェクトのレプリケート (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)
<a name="replication-config-for-kms-objects"></a>

**重要**  
Amazon S3 では、Amazon S3 内のすべてのバケットの基本レベルの暗号化として、Amazon S3 が管理するキー (SSE-S3) によるサーバー側の暗号化が適用されるようになりました。2023 年 1 月 5 日以降、Amazon S3 にアップロードされるすべての新しいオブジェクトは、追加費用なしで、パフォーマンスに影響を与えずに自動的に暗号化されます。S3 バケットのデフォルト暗号化設定と新しいオブジェクトのアップロードのための自動暗号化ステータスは、CloudTrail ログ、S3 インベントリ、S3 ストレージレンズ、Amazon S3 コンソール、および AWS CLI と AWS SDK の追加の Amazon S3 API レスポンスヘッダーとして利用できるようになりました。詳細については、「[デフォルト暗号化に関するよくある質問](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html)」を参照してください。

サーバー側の暗号化を使用して暗号化されているオブジェクトをレプリケートする場合は、いくつかの特別な考慮事項があります。Amazon S3 は、以下の 3 種類のサーバー側の暗号化をサポートしています。
+ Amazon S3 マネージドキーを用いたサーバー側の暗号化 (SSE-S3)
+ AWS Key Management Service (AWS KMS) キー (SSE-KMS) によるサーバー側の暗号化
+ AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS)
+ お客様が用意したキーを使用したサーバー側の暗号化 (SSE-C)

サーバーサイドの暗号化の詳細については、「[サーバー側の暗号化によるデータの保護](serv-side-encryption.md)」を参照してください。

このトピックでは、サーバー側の暗号化を使用して暗号化されているオブジェクトをレプリケートするよう Amazon S3 に指示するために必要なアクセス許可について説明します。このトピックでは、追加できるその他の設定要素や、暗号化されたオブジェクトのレプリケーションに必要なアクセス許可を付与する AWS Identity and Access Management (IAM) ポリシーの例も提供します。

ステップバイステップの手順と例については、「[暗号化されたオブジェクトのレプリケーションの有効化](#replication-walkthrough-4)」を参照してください。レプリケーション設定の作成については、「[リージョン内およびリージョン間でのオブジェクトのレプリケート](replication.md)」を参照してください。

**注記**  
Amazon S3 では、マルチリージョン AWS KMS keys を使用できます。ただし、Amazon S3 では現在、マルチリージョンキーは、単一リージョンキーであるかのように処理され、キーのマルチリージョン特徴は使用しません。詳細については、AWS Key Management Service デベロッパーガイドの「[マルチリージョンキーを使用する](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)」を参照してください。**

**Topics**
+ [バケットのデフォルトの暗号化がレプリケーションに与える影響](#replication-default-encryption)
+ [SSE-C で暗号化されたオブジェクトのレプリケーション](#replicationSSEC)
+ [SSE-S3、SSE-KMS、または DSSE-KMS で暗号化されたオブジェクトのレプリケーション](#replications)
+ [暗号化されたオブジェクトのレプリケーションの有効化](#replication-walkthrough-4)

## バケットのデフォルトの暗号化がレプリケーションに与える影響
<a name="replication-default-encryption"></a>

レプリケーション先バケットのデフォルトの暗号化を有効にすると、以下の暗号化動作が適用されます。
+ レプリケート元バケットのオブジェクトが暗号化されていない場合、レプリケート先バケットのレプリカオブジェクトはレプリケート先バケットのデフォルトの暗号化設定を使用して暗号化されます。そのため、レプリケート元のオブジェクトのエンティティタグ (ETag) はレプリカオブジェクトの ETag とは異なります。アプリケーションで ETag を使用している場合は、アプリケーションを更新して、この違いを反映する必要があります。
+ レプリケート元バケット内のオブジェクトが Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS)、または AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) を使用して暗号化されている場合、レプリケート先バケットのレプリカオブジェクトは、レプリケート元オブジェクトと同じタイプの暗号化を使用します。レプリケート先バケットのデフォルトの暗号化設定は使用されません。

## SSE-C で暗号化されたオブジェクトのレプリケーション
<a name="replicationSSEC"></a>

お客様が指定したキーによるサーバー側の暗号化 (SSE-C) を使用することで、独自の暗号化キーを管理できます。SSE-C ではユーザーがキーを管理し、Amazon S3 は暗号化と復号のプロセスを管理します。ユーザーはリクエストの一部として暗号化キーを指定する必要がありますが、オブジェクトの暗号化または復号を実行するコードを記述する必要はありません。オブジェクトをアップロードすると、Amazon S3 は指定されたキーを使用してオブジェクトを暗号化します。その後、Amazon S3 はそのキーをメモリから削除します。オブジェクトを取得するときは、リクエストの中で同じ暗号化キーを指定する必要があります。詳細については、「[お客様が指定したキーによるサーバー側の暗号化 (SSE−C) の使用](ServerSideEncryptionCustomerKeys.md)」を参照してください。

S3 レプリケーションは SSE-C で暗号化されたオブジェクトをサポートしています。SSE-C オブジェクトのレプリケーションは、暗号化されていないオブジェクトのレプリケーションを設定するのと同じ方法で、Amazon S3 コンソールまたは AWS SDK で設定できます。レプリケーションに現在必要な権限以外に SSE-C 権限を追加することはできません。

S3 レプリケーションは、新しくアップロードされた SSE-C 暗号化オブジェクトを、S3 レプリケーション設定に従って自動的にレプリケートします (該当する場合)。バケット内の既存のオブジェクトをレプリケートするには、S3 バッチレプリケーションを使用します。オブジェクトのレプリケーションの詳細については、「[ライブレプリケーションの設定の概要](replication-how-setup.md)」および「[バッチレプリケーションを使用した既存のオブジェクトのレプリケーション](s3-batch-replication-batch.md)」を参照してください。

SSE-C オブジェクトのレプリケートに追加料金はかかりません。レプリケーション料金の詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

## SSE-S3、SSE-KMS、または DSSE-KMS で暗号化されたオブジェクトのレプリケーション
<a name="replications"></a>

デフォルトでは、Amazon S3 は SSE-KMS または DSSE-KMS で暗号化されたオブジェクトをレプリケートしません。このセクションでは、これらのオブジェクトをレプリケートするよう Amazon S3 に指示するために追加できるその他の設定要素について説明します。

ステップバイステップの手順と例については、「[暗号化されたオブジェクトのレプリケーションの有効化](#replication-walkthrough-4)」を参照してください。レプリケーション設定の作成については、「[リージョン内およびリージョン間でのオブジェクトのレプリケート](replication.md)」を参照してください。

### レプリケーション設定の追加情報の指定
<a name="replication-kms-extra-config"></a>

レプリケーション設定で、以下を実行してください。
+ 次のレプリケーション設定例に示すように、レプリケーション設定の `Destination` 要素に、オブジェクトレプリカを暗号化するために Amazon S3 で使用する対称 AWS KMS カスタマーマネージドキーの ID を追加します。
+ KMS キー (SSE-KMS または DSSE-KMS) を使用して暗号化されたオブジェクトのレプリケーションを有効にすることで、明示的にオプトインします。オプトインするには、次のレプリケーション設定例に示すように、`SourceSelectionCriteria` 要素を追加します。

 

```
<ReplicationConfiguration>
   <Rule>
      ...
      <SourceSelectionCriteria>
         <SseKmsEncryptedObjects>
           <Status>Enabled</Status>
         </SseKmsEncryptedObjects>
      </SourceSelectionCriteria>

      <Destination>
          ...
          <EncryptionConfiguration>
             <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS リージョン as the destination bucket.</ReplicaKmsKeyID>
          </EncryptionConfiguration>
       </Destination>
      ...
   </Rule>
</ReplicationConfiguration>
```

**重要**  
KMS キーは、レプリケート先バケットと同じ AWS リージョン内で作成されている必要があります。
KMS キーは有効 *である必要があります*。`PutBucketReplication` API オペレーションは、KMS キーの有効性を確認しません。無効な KMS キーを使用した場合、応答として HTTP `200 OK` ステータスコードを受け取りますが、レプリケーションは失敗します。

次の例は、オプションの設定要素が含まれているレプリケーション設定を示します。このレプリケーション設定にはルールが 1 つあります。このルールは、`Tax` キープレフィックスが付いているオブジェクトに適用されます。Amazon S3 は、指定された AWS KMS key ID を使用して、これらのオブジェクトレプリカを暗号化します。

```
<?xml version="1.0" encoding="UTF-8"?>
<ReplicationConfiguration>
   <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>
         <EncryptionConfiguration>
            <ReplicaKmsKeyID>AWS KMS key ARN or Key Alias ARN that's in the same AWS リージョン as the destination bucket.</ReplicaKmsKeyID>
         </EncryptionConfiguration>
      </Destination>
      <SourceSelectionCriteria>
         <SseKmsEncryptedObjects>
            <Status>Enabled</Status>
         </SseKmsEncryptedObjects>
      </SourceSelectionCriteria>
   </Rule>
</ReplicationConfiguration>
```

### IAM ロールに対する追加のアクセス許可の付与
<a name="replication-kms-permissions"></a>

SSE-S3、SSE-KMS、または DSSE-KMS を使用して保管時に暗号化されたオブジェクトをレプリケートするには、レプリケーション設定で指定した AWS Identity and Access Management (IAM) ロールに以下の追加のアクセス許可を付与します。IAM ロールに関連付けられているアクセス許可ポリシーを更新してこれらの権限を付与します。
+ **レプリケート元オブジェクトのための `s3:GetObjectVersionForReplication` アクション** – このアクションにより、Amazon S3 は、暗号化されていないオブジェクトと、SSE-S3、SSE-KMS、または DSSE-KMS を使用したサーバー側の暗号化で作成されたオブジェクトの両方をレプリケートできるようになります。
**注記**  
`s3:GetObjectVersion` アクションの代わりに `s3:GetObjectVersionForReplication` アクションの使用をお勧めします。`s3:GetObjectVersionForReplication` ではレプリケーションに必要な最小限のアクセス許可のみを Amazon S3 に提供するためです。さらに、`s3:GetObjectVersion` アクションにより、暗号化されていないオブジェクトや SSE-S3 で暗号化されたオブジェクトはレプリケートできますが、KMS キー (SSE-KMS または DSSE-KMS) を使用して暗号化されたオブジェクトをレプリケートすることはできません。
+ **KMS キーの `kms:Decrypt` および `kms:Encrypt` AWS KMS アクション**
  + レプリケート元オブジェクトの復号に使用された AWS KMS keyに対して `kms:Decrypt` 権限を付与する必要があります。
  + オブジェクトレプリカの暗号化に使用された AWS KMS keyに対して `kms:Encrypt` 許可を付与する必要があります。
+ **プレーンテキストオブジェクトをレプリケートするための `kms:GenerateDataKey` アクション** — SSE-KMS または DSSE-KMS 暗号化がデフォルトで有効になっているバケットにプレーンテキストオブジェクトをレプリケートする場合は、レプリケート先の暗号化コンテキストと KMS キーの `kms:GenerateDataKey` アクセス許可を IAM ポリシーに含める必要があります。

**重要**  
S3 バッチレプリケーションを使用してデータセットをリージョン間でレプリケートし、オブジェクトのサーバー側の暗号化タイプを SSE-S3 から SSE-KMS に更新したことがある場合は、追加のアクセス許可が必要になる場合があります。ソースリージョンバケットでは、`kms:decrypt` アクセス許可が必要です。次に、レプリケート先リージョンのバケットの `kms:decrypt` および `kms:encrypt` アクセス許可が必要です。

AWS KMS 条件キーを使用して、これらの許可を、レプリケート先バケットとオブジェクトのみに制限することをお勧めします。IAM ロールを所有する AWS アカウントには、ポリシーにリストされている KMS キーに対する `kms:Encrypt` アクションおよび `kms:Decrypt` アクションのアクセス許可が必要です。KMS キーが別の AWS アカウント によって所有されている場合は、KMS キーの所有者が IAM ロールを所有する AWS アカウントにこれらの許可を付与する必要があります。これらの KMS キーへのアクセス管理の詳細については、「AWS Key Management Service デベロッパーガイド」の「[AWS KMS での IAM ポリシーの使用](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)」を参照してください。**

### S3 バケットキーとレプリケーション
<a name="bk-replication"></a>

S3 バケットキーでレプリケーションを使用するには、オブジェクトレプリカの暗号化に使用する KMS キーの AWS KMS keyポリシーに、呼び出し元のプリンシパルの `kms:Decrypt` 許可を含める必要があります。`kms:Decrypt` の呼び出しでは、S3 バケットキーを使用する前にその整合性を検証します。詳細については、「[レプリケーションでの S3 バケットキーの使用](bucket-key.md#bucket-key-replication)」を参照してください。

レプリケート元バケットまたはレプリケート先バケットで S3 バケットキーを有効にすると、暗号化コンテキストはバケットの Amazon リソースネーム (ARN) になり、オブジェクトの ARN  (`arn:aws:s3:::bucket_ARN` など) にはなりません。IAM ポリシーを更新して、暗号化コンテキストにバケット ARN を使用する必要があります。

```
"kms:EncryptionContext:aws:s3:arn": [
"arn:aws:s3:::bucket_ARN"
]
```

詳細については、「[暗号化コンテキスト (`x-amz-server-side-encryption-context`)](specifying-kms-encryption.md#s3-kms-encryption-context)」 (「REST API の使用」セクション) と「[S3 バケットキーを有効にする前に注意するべき変更点](bucket-key.md#bucket-key-changes)」を参照してください。

### ポリシーの例: レプリケーションに SSE-S3 と SSE-KMS を使用する
<a name="kms-replication-examples"></a>

次の IAM ポリシーの例は、SSE-S3 と SSE-KMS をレプリケーションで使用するためのステートメントを示しています。

**Example – 個別のレプリケート先バケットで SSE-KMS を使用する**  
次のポリシーの例は、個別のレプリケート先バケットで SSE-KMS を使用するためのステートメントを示しています。

**Example - SSE-S3 と SSE-KMS で作成したオブジェクトのレプリケーション**  
以下は、暗号化されていないオブジェクト、SSE-S3 で作成したオブジェクト、および SSE-KMS で作成したオブジェクトをレプリケートするのに必要な許可を付与する完全な IAM ポリシーを示しています。    
****  

```
{
   "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"
         ],
         "Resource":[
            "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ReplicateObject",
            "s3:ReplicateDelete"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/key-prefix1*"
      },
      {
         "Action":[
            "kms:Decrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*"
               ]
            }
         },
         "Resource":[
           "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      },
      {
         "Action":[
            "kms:Encrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-destination-bucket/prefix1*"
               ]
            }
         },
         "Resource":[
            "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      }
   ]
}
```

**Example – S3 バケットキーを使用したオブジェクトのレプリケーション**  
次に示すのは、S3 バケットキーを使用してオブジェクトをレプリケートするのに必要なアクセス許可を付与する完全な IAM ポリシーです。    
****  

```
{
   "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"
         ],
         "Resource":[
            "arn:aws:s3:::amzn-s3-demo-source-bucket/key-prefix1*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ReplicateObject",
            "s3:ReplicateDelete"
         ],
         "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/key-prefix1*"
      },
      {
         "Action":[
            "kms:Decrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-source-bucket"
               ]
            }
         },
         "Resource":[
           "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      },
      {
         "Action":[
            "kms:Encrypt"
         ],
         "Effect":"Allow",
         "Condition":{
            "StringLike":{
               "kms:ViaService":"s3.us-east-1.amazonaws.com",
               "kms:EncryptionContext:aws:s3:arn":[
                  "arn:aws:s3:::amzn-s3-demo-destination-bucket"
               ]
            }
         },
         "Resource":[
            "arn:aws:kms:us-east-1:111122223333:key/key-id"
         ]
      }
   ]
}
```

### クロスアカウントシナリオに対する追加のアクセス許可の付与
<a name="replication-kms-cross-acct-scenario"></a>

レプリケート元バケットとレプリケート先バケットが、異なる AWS アカウントによって所有されているクロスアカウントシナリオでは、KMS キーを使用してオブジェクトレプリカを暗号化できます。ただし、KMS キー所有者は、レプリケート元バケットの所有者に KMS キーを使用する許可を付与する必要があります。

**注記**  
SSE-KMS データをクロスアカウントでレプリケートする必要がある場合、レプリケーションルールでは、レプリケート先アカウントの AWS KMS からの[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を指定する必要があります。[AWS マネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) はクロスアカウントの使用を許可しないため、クロスアカウントレプリケーションの実行には使用できません。<a name="cross-acct-kms-key-permission"></a>

**レプリケート元バケット所有者に KMS キー (AWS KMS コンソール) を使用する許可を付与するには**

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

1. AWS リージョン を変更するにはページの右上隅にあるリージョンセレクターを使用します。

1. ユーザーが作成および管理するアカウント内のキーを表示するには、ナビゲーションペインで **[Customer managed keys]** (カスタマーマネージドキー) を選択します。

1. KMS キーを選択します。

1. **[一般設定]** セクションで、**[キーポリシー]** タブを選択します。

1. **[別の AWS アカウント]** まで下にスクロールします。

1. **[別の AWS アカウントを追加]** を選択します。

   **[別の AWS アカウント]**ダイアログボックスが表示されます。

1. ダイアログボックスで、**[別の AWS アカウントを追加]** を選択します。**[arn:aws:iam::]** に、レプリケート元バケットのアカウント ID を入力します。

1. **[変更の保存]** をクリックします。

**レプリケート元バケット所有者に KMS キー(AWS CLI) を使用する許可を付与するには**
+ `put-key-policy` AWS Command Line Interface (AWS CLI) コマンドの詳細については、「*AWS CLI コマンドリファレンス*」の「[https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html](https://docs.aws.amazon.com/cli/latest/reference/kms/put-key-policy.html)」を参照してください。基盤となる `PutKeyPolicy` API オペレーションの詳細については、「[AWS Key Management Service API リファレンス](https://docs.aws.amazon.com/kms/latest/APIReference/)」の「[https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)」を参照してください。

### AWS KMS トランザクションクォータに関する考慮事項
<a name="crr-kms-considerations"></a>

クロスリージョンレプリケーション (CRR) を有効にした後で、AWS KMS 暗号化を使用して多数の新しいオブジェクトを追加すると、スロットリング (HTTP `503 Service Unavailable` エラー) が発生する可能性があります。1 秒あたりの AWS KMS トランザクション数が現在のクォータを超えると、スロットリングが発生します。詳細については、*AWS Key Management Service デベロッパーガイド*の「[クォータ](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)」を参照してください。

クォータの引き上げをリクエストするには、Service Quotas を使用してください。詳細については、「[Requesting a quota increase](https://docs.aws.amazon.com/servicequotas/latest/userguide/request-quota-increase.html)」(クォータ引き上げのリクエスト) を参照してください。リージョンの Service Quotas がサポートされていない場合は、[AWS サポート ケースを開きます](https://console.aws.amazon.com/support/home#/)。

## 暗号化されたオブジェクトのレプリケーションの有効化
<a name="replication-walkthrough-4"></a>

デフォルトでは、Amazon S3 は AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) または AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) を使用して暗号化されたオブジェクトをレプリケートしません。SSE-KMS または DSSE-KMS で暗号化されたオブジェクトをレプリケートするには、バケットレプリケーション設定を変更して、Amazon S3 がこれらのオブジェクトをレプリケートするように指示します。この例では、Amazon S3 コンソールと AWS Command Line Interface (AWS CLI) を使用してバケットのレプリケーション設定を変更し、暗号化オブジェクトのレプリケーションを有効にする方法について説明します。

**注記**  
レプリケート元バケットまたはレプリケート先バケットで S3 バケットキーを有効にすると、暗号化コンテキストはバケットの Amazon リソースネーム (ARN) になり、オブジェクトの ARN にはなりません。暗号化コンテキストとしてバケット ARN を使用するには、IAM ポリシーを更新する必要があります。詳細については、「[S3 バケットキーとレプリケーション](#bk-replication)」を参照してください。

**注記**  
Amazon S3 では、マルチリージョン AWS KMS keys を使用できます。ただし、Amazon S3 では現在、マルチリージョンキーは、単一リージョンキーであるかのように処理され、キーのマルチリージョン特徴は使用しません。詳細については、「AWS Key Management Service デベロッパーガイド」の「[マルチリージョンキーを使用する](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)」を参照してください。**

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

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

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

AWS CLI で暗号化されたオブジェクトをレプリケートするには、以下の操作を実行します。
+ レプリケート元バケットとレプリケート先バケットを作成して、これらのバケットのバージョニングを有効にします。
+ Amazon S3 にオブジェクトをレプリケートするアクセス許可を付与する AWS Identity and Access Management (IAM) サービスロールを作成します。IAM ロールのアクセス許可には、暗号化されたオブジェクトをレプリケートするために必要なアクセス許可が含まれています。
+ レプリケート元バケットにレプリケーション設定を追加します。レプリケーション設定は、KMS キーを使用して暗号化されたオブジェクトのレプリケーションに関する情報を提供します。
+ レプリケート元バケットに暗号化されたオブジェクトを追加します。
+ セットアップをテストして、暗号化されたオブジェクトがレプリケート先バケットにレプリケートされていることを確認します。

このプロセスを以下の手順で説明します。

**サーバー側の暗号化されたオブジェクトをレプリケートするには (AWS CLI)**

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

1. この例では、レプリケート元 (*`amzn-s3-demo-source-bucket`*) および レプリケート先 (*`amzn-s3-demo-destination-bucket`*) バケットの両方を同じ AWS アカウントで作成します。AWS CLI の認証情報プロファイルも設定します。この例では、プロファイル名 `acctA` を使用します。

   名前付きプロファイルの設定と使用に関する詳細については、「AWS Command Line Interface ユーザーガイド」の「[設定ファイルと認証情報ファイルの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」を参照してください。**

1. 次のコマンドを使用して `amzn-s3-demo-source-bucket` バケットを作成し、バージョニングを有効にします。次の例のコマンドは、`amzn-s3-demo-source-bucket` バケットを米国東部 (バージニア北部) (`us-east-1`) リージョンに作成します。

   ```
   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. 次のコマンドを使用して `amzn-s3-demo-destination-bucket` バケットを作成し、バージョニングを有効にします。次のコマンドは、`amzn-s3-demo-destination-bucket` バケットを米国西部 (オレゴン) (`us-west-2`) リージョンに作成します。
**注記**  
`amzn-s3-demo-source-bucket` と `amzn-s3-demo-destination-bucket` の両方のバケットが同じ AWS アカウントにあるときに、レプリケーション設定をセットアップするには、同じプロファイルを使用します。この例では `acctA` を使用します。バケットが異なる AWS アカウント によって所有されているときに、レプリケーションを設定するには、それぞれに異なるプロファイルを指定します。

   

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

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

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

   1. IAM サービスロールを作成するには、以下を実行します。

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

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

****  

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

------

      1. 次のコマンドを使用して、ロールを作成します。

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

   1. 次に、アクセス許可ポリシーをロールにアタッチします。このポリシーは、さまざまな Amazon S3 バケットとオブジェクトアクションに対するアクセス許可を付与します。

      1. 次のアクセス権限ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある `s3-role-permissions-policykmsobj.json` という名前のファイルに保存します。IAM ロールを作成して、後でポリシーをアタッチします。
**重要**  
アクセス許可ポリシーで、`amzn-s3-demo-source-bucket` および `amzn-s3-demo-destination-bucket` バケットの暗号化に使用される AWS KMS キー ID を指定します。`amzn-s3-demo-source-bucket` バケットと `amzn-s3-demo-destination-bucket` バケット用に 2 つの別々の KMS キーを作成する必要があります。AWS KMS keys は、それらが作成された AWS リージョンの外部で共有されることはありません。

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

****  

         ```
         {
            "Version":"2012-10-17",		 	 	 
            "Statement":[
               {
                  "Action":[
                     "s3:ListBucket",
                     "s3:GetReplicationConfiguration",
                     "s3:GetObjectVersionForReplication",
                     "s3:GetObjectVersionAcl",
                     "s3:GetObjectVersionTagging"
                  ],
                  "Effect":"Allow",
                  "Resource":[
                     "arn:aws:s3:::amzn-s3-demo-source-bucket",
                     "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
                  ]
               },
               {
                  "Action":[
                     "s3:ReplicateObject",
                     "s3:ReplicateDelete",
                     "s3:ReplicateTags"
                  ],
                  "Effect":"Allow",
                  "Condition":{
                     "StringLikeIfExists":{
                        "s3:x-amz-server-side-encryption":[
                           "aws:kms",
                           "AES256",
                           "aws:kms:dsse"
                        ],
                        "s3:x-amz-server-side-encryption-aws-kms-key-id":[
                           "AWS KMS key IDs(in ARN format) to use for encrypting object replicas"  
                        ]
                     }
                  },
                  "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
               },
               {
                  "Action":[
                     "kms:Decrypt"
                  ],
                  "Effect":"Allow",
                  "Condition":{
                     "StringLike":{
                        "kms:ViaService":"s3.us-east-1.amazonaws.com",
                        "kms:EncryptionContext:aws:s3:arn":[
                           "arn:aws:s3:::amzn-s3-demo-source-bucket/*"
                        ]
                     }
                  },
                  "Resource":[
                     "arn:aws:kms:us-east-1:111122223333:key/key-id" 
                  ]
               },
               {
                  "Action":[
                     "kms:Encrypt"
                  ],
                  "Effect":"Allow",
                  "Condition":{
                     "StringLike":{
                        "kms:ViaService":"s3.us-west-2.amazonaws.com",
                        "kms:EncryptionContext:aws:s3:arn":[
                           "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
                        ]
                     }
                  },
                  "Resource":[
                     "arn:aws:kms:us-west-2:111122223333:key/key-id" 
                  ]
               }
            ]
         }
         ```

------

      1. ポリシーを作成し、ロールにアタッチします。

         ```
         $ aws iam put-role-policy \
         --role-name replicationRolekmsobj \
         --policy-document file://s3-role-permissions-policykmsobj.json \
         --policy-name replicationRolechangeownerPolicy \
         --profile acctA
         ```

1. 次に、以下のレプリケーション設定を `amzn-s3-demo-source-bucket` バケットに追加します。これは、`Tax/` プレフィックスを持つオブジェクトを `amzn-s3-demo-destination-bucket` バケットにレプリケートするように Amazon S3 に指示します。
**重要**  
レプリケーション設定で、Amazon S3 が引き受けることができる IAM ロールを指定します。ユーザーに `iam:PassRole` アクセス権限がある場合のみ実行できます。CLI コマンドで指定するプロファイルには、このアクセス許可が必要です。詳細については、*IAM ユーザーガイド*の「[AWS のサービス のサービスにロールを渡すアクセス権限をユーザーに付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)」を参照してください。

   ```
    <ReplicationConfiguration>
     <Role>IAM-Role-ARN</Role>
     <Rule>
       <Priority>1</Priority>
       <DeleteMarkerReplication>
          <Status>Disabled</Status>
       </DeleteMarkerReplication>
       <Filter>
          <Prefix>Tax</Prefix>
       </Filter>
       <Status>Enabled</Status>
       <SourceSelectionCriteria>
         <SseKmsEncryptedObjects>
           <Status>Enabled</Status>
         </SseKmsEncryptedObjects>
       </SourceSelectionCriteria>
       <Destination>
         <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
         <EncryptionConfiguration>
           <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID>
         </EncryptionConfiguration>
       </Destination>
     </Rule>
   </ReplicationConfiguration>
   ```

   レプリケーション設定を `amzn-s3-demo-source-bucket` バケットに追加するには、以下を実行します。

   1. AWS CLI ではレプリケーション設定を JSON 形式で指定する必要があります。以下の JSON を、ローカルコンピュータの現在のディレクトリにあるファイル (`replication.json`) に保存します。

      ```
      {
         "Role":"IAM-Role-ARN",
         "Rules":[
            {
               "Status":"Enabled",
               "Priority":1,
               "DeleteMarkerReplication":{
                  "Status":"Disabled"
               },
               "Filter":{
                  "Prefix":"Tax"
               },
               "Destination":{
                  "Bucket":"arn:aws:s3:::amzn-s3-demo-destination-bucket",
                  "EncryptionConfiguration":{
                     "ReplicaKmsKeyID":"AWS KMS key IDs (in ARN format) to use for encrypting object replicas"
                  }
               },
               "SourceSelectionCriteria":{
                  "SseKmsEncryptedObjects":{
                     "Status":"Enabled"
                  }
               }
            }
         ]
      }
      ```

   1. JSON を編集して、`amzn-s3-demo-destination-bucket` バケット、`AWS KMS key IDs (in ARN format)`、および `IAM-role-ARN` の値を指定します。変更を保存します。

   1. 次のコマンドを使用して、レプリケーション設定を `amzn-s3-demo-source-bucket` バケットに追加します。必ず `amzn-s3-demo-source-bucket` バケット名を指定してください。

      ```
      $ 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. `amzn-s3-demo-source-bucket` バケットに `Tax` という名前のフォルダを作成します。

   1. サンプルオブジェクトをフォルダに追加します。必ず暗号化オプションを選択し、オブジェクトを暗号化するための KMS キーを指定してください。

   1. `amzn-s3-demo-destination-bucket` バケットにオブジェクトのレプリカが含まれていることと、設定で指定した KMS キーを使用して暗号化されていることを確認します。詳細については、「[レプリケーションステータス情報の取得](replication-status.md)」を参照してください。

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

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

 