

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定即時複寫的範例
<a name="replication-example-walkthroughs"></a>

下列範例提供逐步演練，顯示如何設定常用案例的即時複寫。

**注意**  
即時複寫是指相同區域複寫 (SRR) 和跨區域複寫 (CRR)。在您設定複寫之前，即時複寫不會複寫儲存貯體中存在的任何物件。若要複寫在設定複寫之前已存在的物件，請使用隨需複寫。若要同步儲存貯體並隨需複寫現有物件，請參閱[複寫現有物件](s3-batch-replication-batch.md)。

這些範例示範如何使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI) 和 AWS SDKs（顯示適用於 Java 的 AWS SDK 和 適用於 .NET 的 AWS SDK 範例） 建立複寫組態。

如需有關安裝和設定 的資訊 AWS CLI，請參閱*AWS Command Line Interface 《 使用者指南*》中的下列主題：
+  [開始使用 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) 
+  [設定 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)- 您必須設定至少一個設定檔。如果您要探索跨帳戶案例，請設定兩個描述檔。

如需 AWS SDKs的相關資訊，請參閱 [適用於 Java 的 AWS SDK](https://aws.amazon.com/sdk-for-java/)和 [適用於 .NET 的 AWS SDK](https://aws.amazon.com/sdk-for-net/)。

**提示**  
如需示範如何使用即時複寫來複寫資料的step-by-step教學課程，請參閱[教學課程： AWS 區域 使用 S3 複寫在內部和之間複寫資料](https://aws.amazon.com/getting-started/hands-on/replicate-data-using-amazon-s3-replication/?ref=docs_gateway/amazons3/replication-example-walkthroughs.html)。

**Topics**
+ [設定相同帳戶內的儲存貯體](replication-walkthrough1.md)
+ [設定不同帳戶內的儲存貯體](replication-walkthrough-2.md)
+ [使用 S3 複寫時間控制](replication-time-control.md)
+ [複寫加密的物件](replication-config-for-kms-objects.md)
+ [複寫中繼資料變更](replication-for-metadata-changes.md)
+ [複寫刪除標記](delete-marker-replication.md)

# 設定相同帳戶內的儲存貯體複寫
<a name="replication-walkthrough1"></a>

即時複寫是在相同或不同的一般用途儲存貯體之間自動非同步複製物件 AWS 區域。即時複寫會將來源儲存貯體中新建立的物件和物件更新複製至目的地儲存貯體。如需詳細資訊，請參閱[複寫區域內和跨區域的物件](replication.md)。

設定複寫時，會將複寫規則新增至來源儲存貯體。複寫規則會定義要複寫的來源儲存貯體物件，以及存放已複寫物件的目的地儲存貯體。您可以建立規則，以特定的金鑰名稱前綴、一或多個物件標籤、或兩種都用，複寫儲存貯體中的所有物件，或一部分的物件。目的地儲存貯體可以 AWS 帳戶 與來源儲存貯體位於相同的 ，也可以位於不同的 帳戶中。

如果您指定要刪除的物件版本 ID，Amazon S3 會刪除來源儲存貯體中的該物件版本。但不會在目的地儲存貯體中進行刪除。換句話說，它不會從目的地儲存貯體中刪除相同的物件版本。這可防止資料遭到惡意刪除。

當您將複寫規則新增至儲存貯體時，預設會啟用此規則，讓它在您儲存它之後立即運作。

在此範例中，您會設定來源與目的地儲存貯體為同一 AWS 帳戶所擁有的即時複寫。提供使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI) 和 適用於 Java 的 AWS SDK 的範例 適用於 .NET 的 AWS SDK。

## 先決條件
<a name="replication-prerequisites"></a>

使用下列程序之前，請確定您已設定複寫的必要許可權，這取決於來源和目的地儲存貯體是否屬於相同或不同的帳戶。如需詳細資訊，請參閱[設定即時複寫的許可](setting-repl-config-perm-overview.md)。

**注意**  
如果您想要複寫加密的物件，您還必須授予必要的 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 儲存貯體的兩個額外許可。這兩項額外的許可為 `s3:GetObjectRetention` 和 `s3:GetObjectLegalHold`。若該角色有 `s3:Get*` 許可陳述式，該陳述式即符合需求。如需詳細資訊，請參閱[搭配 S3 複寫使用物件鎖定](object-lock-managing.md#object-lock-managing-replication)。

## 使用 S3 主控台
<a name="enable-replication"></a>

若要在目的地儲存貯體與 AWS 帳戶 來源儲存貯體位於相同 時設定複寫規則，請遵循下列步驟。

如果目的地儲存貯體位在與來源儲存貯體不同的帳戶中，您必須將儲存貯體政策新增至目的地儲存貯體，以將複寫目的地儲存貯體中物件的許可授予來源儲存貯體帳戶擁有者。如需詳細資訊，請參閱[（選用） 步驟 3：在來源和目的地儲存貯體由不同 擁有時授予許可 AWS 帳戶](setting-repl-config-perm-overview.md#setting-repl-config-crossacct)。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇**一般用途儲存貯體**。

1. 在儲存貯體清單中，選擇您所需的儲存貯體名稱。

1. 選擇**管理**標籤，向下捲動至**複寫規則**，然後選擇**建立複寫規則**。

    

1. 在**複寫規則設定**區段的**複寫規則名稱**下，輸入規則名稱，以便之後識別規則。此名稱為必要，且在儲存貯體內必須是唯一的。

1. 在 **Status (狀態)** 下，預設會選取 **Enabled (已啟用)**。已啟用規則在您儲存它之後就會立即運作。如果希望稍後再啟用此規則，請選擇**已停用**。

1. 如果儲存貯體有現存的複寫規則，系統會指示您設定規則的優先順序。您必須設定規則優先順序，以免多項規則範圍內的物件引發衝突。如果發生規則重疊的情況，Amazon S3 會使用規則優先順序來判斷要套用哪一個規則。數字愈高，優先順序愈高。如需有關規則優先順序的詳細資訊，請參閱 [複寫組態檔案元素](replication-add-config.md)。

1. 在**來源儲存貯體**之下，您有下列選項可用來設定複寫來源：
   + 若要複寫整個儲存貯體，請選擇 **Apply to all objects in the bucket** (套用至儲存貯體中的所有物件)。
   + 若要複寫具有相同字首的所有物件，請選擇**Limit the scope of this rule using one or more filters** (使用一或多個篩選器限制此規則的範圍)。這會將複寫限制為具有以您指定字首開頭的所有物件 (例如 `pictures`) 名稱。在**字首**方塊中輸入字首。
**注意**  
如果您輸入的字首是資料夾名稱，最後一個字元必須使用 **/** (正斜線) (例如，`pictures/`)。
   + 若要複寫具有一個或多個物件標籤的所有物件，請選擇**新增標籤**，然後在方塊中輸入關鍵值比對。重複此過程，添加另一個標籤。您可以合併字首與標籤。如需物件標籤的詳細資訊，請參閱 [使用標籤為物件分類](object-tagging.md)。

   新的複寫組態 XML 結構描述支援字首和標籤篩選條件以及規則的優先順序。如需有關新結構描述的資訊，請參閱 [回溯相容性考量](replication-add-config.md#replication-backward-compat-considerations)。如需與在使用者介面後工作之 Amazon S3 API 搭配使用的 XML 的相關資訊，請參閱 [複寫組態檔案元素](replication-add-config.md)。新的結構描述會被描述為*複寫組態 XML V2*。

1. 在**目的地**下，選擇要 Amazon S3 複寫物件的儲存貯體。
**注意**  
目的地儲存貯體的數量僅限於指定分割區 AWS 區域 中的 數量。分割區是 Regions 的群組。 AWS 目前有三個分割區： `aws`（標準區域）、 `aws-cn`（中國區域） 和 `aws-us-gov`(AWS GovCloud (US) 區域）。您可以使用[服務配額](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)來要求增加目的地儲存貯體配額。
   + 若要複寫到帳戶中的儲存貯體，請選擇**選擇此帳戶中的儲存貯體**，然後輸入或瀏覽目的地儲存貯體名稱。
   + 若要複寫至不同儲存貯體或儲存貯體 AWS 帳戶，請選擇在**另一個帳戶中指定儲存貯體**，然後輸入目的地儲存貯體帳戶 ID 和儲存貯體名稱。

     如果目的地儲存貯體位在與來源儲存貯體不同的帳戶中，您必須將儲存貯體原則新增至目的地儲存貯體，以將複寫物件的許可授予來源儲存貯體帳戶擁有者。如需詳細資訊，請參閱[（選用） 步驟 3：在來源和目的地儲存貯體由不同 擁有時授予許可 AWS 帳戶](setting-repl-config-perm-overview.md#setting-repl-config-crossacct)。

     或者，如果您想要啟用協助標準化目的地儲存貯體中新物件的擁有權，請選擇**將物件擁有權變更為目的地儲存貯體擁有者**。如需有關此選項的詳細資訊，請參閱 [控制物件的擁有權並停用儲存貯體的 ACL](about-object-ownership.md)。
**注意**  
如果未在目的地儲存貯體上啟用版本控制，您會收到包含**啟用版本控制**按鈕的警告訊息。選擇此按鈕，以在儲存貯體上啟用版本控制。

1. 設定 AWS Identity and Access Management (IAM) 角色，Amazon S3 可擔任該角色來代表您複寫物件。

   若要設定 IAM 角色，請在 **IAM 角色**區段中，從 **IAM 角色**下拉式清單選取下列其中一項：
   + 強烈建議您選擇**建立新角色**，讓 Amazon S3 為您建立新 IAM 角色。當您儲存規則時，系統會為符合所選擇來源與目的地儲存貯體的 IAM 角色產生新原則。
   + 您可以選擇使用現有 IAM 角色。如果這麼做，則必須選擇將必要複寫許可授予 Amazon S3 的角色。如果此角色未將遵循您複寫規則的足夠許可授予 Amazon S3，則複寫會失敗。
**重要**  
當您新增複寫規則至儲存貯體時，必須擁有 `iam:PassRole` 許可，方能透過 IAM 角色授予 Amazon S3 複寫許可。如需詳細資訊，請參閱《IAM 使用者指南》**中[授予使用者將角色傳遞至 AWS 服務的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

1. 若要複寫來源儲存貯體中以伺服器端加密搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 加密的物件，請選取**加密**下的**複寫物件 AWS KMS**。在**用於加密目的地物件的AWS KMS 金鑰**下，是您允許複寫使用的來源金鑰。根據預設，會包含所有來源 KMS 金鑰。您可以選擇別名或 ID，縮小 KMS 金鑰的選取範圍。

   您未選取之 加密 AWS KMS keys 的物件不會複寫。系統會為您選擇一個 KMS 金鑰或一組 KMS 金鑰，但您也可以自行選擇 KMS 金鑰。如需 AWS KMS 搭配複寫使用 的詳細資訊，請參閱 [複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)](replication-config-for-kms-objects.md)。
**重要**  
當您複寫使用 加密的物件時 AWS KMS， AWS KMS 請求率會在來源區域中加倍，並在目的地區域中增加相同的數量。這些增加的呼叫率 AWS KMS 是由於使用您為複寫目的地區域定義的 KMS 金鑰重新加密資料的方式。 AWS KMS 具有每個區域每個呼叫帳戶的請求率配額。如需配額預設值的資訊，請參閱《AWS Key Management Service 開發人員指南》**中的 [AWS KMS 配額 – 每秒請求數：各有不同](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html#requests-per-second)。  
如果您目前的 Amazon S3 `PUT` 物件請求速率在複寫期間超過您帳戶的預設 AWS KMS 速率限制的一半，我們建議您請求提高 AWS KMS 請求速率配額。若要請求提高，請在 支援 中心的[聯絡我們](https://aws.amazon.com/contact-us/)中內建立案例。例如，假設您目前的`PUT`物件請求率為每秒 1，000 個請求，而您使用 AWS KMS 來加密物件。在此情況下，建議您 支援 要求在來源和目的地區域 （如果不同） 中，將 AWS KMS 速率限制提高到每秒 2，500 個請求，以確保沒有調節 AWS KMS。  
若要在來源儲存貯體中查看 `PUT` 物件請求率，請在 Amazon S3 的 Amazon CloudWatch 請求指標中檢視 `PutRequests`。如需檢視 CloudWatch 指標的相關資訊，請參閱[使用 S3 主控台](configure-request-metrics-bucket.md#configure-metrics)。

   如果您選擇複寫使用 加密的物件 AWS KMS，請執行下列動作：

   1. 在**用於加密目的地物件的AWS KMS key ** 下，使用下列其中一種方式指定 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 金鑰 Amazon Resource Name (ARN)，請選擇**輸入 AWS KMS key ARN**，然後在出現的欄位中輸入您的 KMS 金鑰 ARN。此動作會加密目的地儲存貯體中的複本。您可以在 [IAM 主控台](https://console.aws.amazon.com/iam/)的**加密金鑰**下方找到 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 金鑰。如果選擇的是**從您的 KMS 金鑰選擇**，則 S3 主控台只會列出每個區域的其中 100 個 KMS 金鑰。如果您在相同區域中有超過 100 個 KMS 金鑰，您只能看到 S3 主控台中的前 100 個 KMS 金鑰。若要使用主控台中未列出的 KMS 金鑰，請選擇**輸入 AWS KMS key ARN**，然後輸入 KMS 金鑰 ARN。  
當您在 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)。

     如需建立 的詳細資訊 AWS KMS key，請參閱《 *AWS Key Management Service 開發人員指南*》中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。如需 AWS KMS 搭配 Amazon S3 使用 的詳細資訊，請參閱 [搭配 AWS KMS 金鑰使用伺服器端加密 (SSE-KMS)](UsingKMSEncryption.md)。

1. 在**目的地儲存方案**之下,若要將資料複寫至目的地中的特定儲存方案，請選取**變更已複寫物件的儲存方案**。然後選擇您要用於目的地中已複寫物件的儲存體方案。如果您未選擇此選項，則已複寫物件的儲存體方案會與原始物件的類別相同。

1. 設定**其他複寫選項**時，您具有下列其他選項：
   + 如果您想要在複製組態中啟用 S3 複寫時間控制 (S3 RTC)，請選取 **複製時間控制**。如需有關此選項的詳細資訊，請參閱 [使用 S3 複寫時間控制來滿足合規要求](replication-time-control.md)。
   + 如果您想要在複寫組態中啟用 S3 複寫指標，請選取 **Replication metrics and events** (複寫指標和事件)。如需詳細資訊，請參閱[使用指標、事件通知和狀態監控複寫](replication-metrics.md)。
   + 如果您想要在複寫組態中啟用刪除標記複寫，請選取 **Delete marker replication** (刪除標記複寫)。如需詳細資訊，請參閱[複寫儲存貯體之間的刪除標記](delete-marker-replication.md)。
   + 如果您想要在複寫組態中啟用 Amazon S3 複本修改同步，請選取 **Replica modification sync** (複本修改同步)。如需詳細資訊，請參閱[使用複本修改同步來複寫中繼資料變更](replication-for-metadata-changes.md)。
**注意**  
當您使用 S3 RTC 或 S3 複寫指標時，需支付額外費用。

1. 若要完成，請選擇 **Save** (儲存)。

1. 儲存規則之後，您可以選取規則並選擇編輯規則來**編輯、啟用、停用或刪除規則**。

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

若要在來源和目的地儲存貯體由相同 擁有時使用 AWS CLI 設定複寫 AWS 帳戶，請執行下列動作：
+ 建立來源與目的地儲存貯體。
+ 在儲存貯體上啟用版本控制。
+ 建立 AWS Identity and Access Management (IAM) 角色，授予 Amazon S3 複寫物件的許可。
+ 將複寫組態新增至來源儲存貯體。

您可以測試以驗證設定。

**在來源和目的地儲存貯體由相同 擁有時設定複寫 AWS 帳戶**

1. 設定 AWS CLI的憑證描述檔。此範例使用描述檔名稱 `acctA`。如需設定憑證設定檔和使用具名設定檔的相關資訊，請參閱《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. 使用下列 AWS CLI 命令建立來源儲存貯體，並在其上啟用版本控制。若要使用這些命令，請以您自己的資訊取代 *`user input placeholders`*。

   下列 `create-bucket` 命令會在美國東部 (維吉尼亞北部) (`us-east-1`) 區域中建立名為 `amzn-s3-demo-source-bucket` 的來源儲存貯體。

   

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

   下列 `put-bucket-versioning` 命令會啟用 `amzn-s3-demo-source-bucket` 儲存貯體上的 S3 版本控制。

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

1. 使用以下 AWS CLI 命令建立目的地儲存貯體並啟用其版本控制。若要使用這些命令，請以您自己的資訊取代 *`user input placeholders`*。
**注意**  
若要在來源和目的地儲存貯體都相同時設定複寫組態 AWS 帳戶，請針對來源和目的地儲存貯體使用相同的設定檔。此範例使用 `acctA`。  
若要在儲存貯體由不同 擁有時測試複寫組態 AWS 帳戶，請為每個帳戶指定不同的設定檔。例如，針對目的地儲存貯體使用 `acctB` 設定檔。

   

   下列 `create-bucket` 命令會在美國西部 (奧勒岡) (`us-west-2`) 區域中建立名為 `amzn-s3-demo-destination-bucket` 的目的地儲存貯體。

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

   下列 `put-bucket-versioning` 命令會啟用 `amzn-s3-demo-destination-bucket` 儲存貯體上的 S3 版本控制。

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

1. 建立 IAM 角色。您可以在複寫組態中指定稍後要新增至 *source* 儲存貯體的角色，Amazon S3 就會擔任此角色以代您複寫物件。建立 IAM 角色需要兩個步驟：
   + 建立角色。
   + 將許可政策連接到角色。

   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 iam create-role \
         --role-name replicationRole \
         --assume-role-policy-document file://s3-role-trust-policy.json  \
         --profile acctA
         ```

   1. 將許可政策連接到角色。

      1. 複製下列許可政策，並將它儲存至本機電腦目前目錄中名為 `s3-role-permissions-policy.json` 的檔案。此政策會授予各種 Amazon S3 儲存貯體與物件動作的許可。

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

****  

         ```
         {
            "Version":"2012-10-17",		 	 	 
            "Statement":[
               {
                  "Effect":"Allow",
                  "Action":[
                     "s3:GetObjectVersionForReplication",
                     "s3:GetObjectVersionAcl",
                     "s3:GetObjectVersionTagging"
                  ],
                  "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: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 儲存貯體的兩個額外許可。這兩項額外的許可為 `s3:GetObjectRetention` 和 `s3:GetObjectLegalHold`。若該角色有 `s3:Get*` 許可陳述式，該陳述式即符合需求。如需詳細資訊，請參閱[搭配 S3 複寫使用物件鎖定](object-lock-managing.md#object-lock-managing-replication)。

      1. 執行下列命令以建立政策，並將它連接至角色。以您自己的資訊取代 *`user input placeholders`*。

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

1. 將複寫組態新增至來源儲存貯體。

   1. 雖然 Amazon S3 API 需要您將複寫組態指定為 XML，但 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"
            }
          }
        ]
      }
      ```

   1. 使用您自己的資訊取代 `amzn-s3-demo-destination-bucket` 和 `IAM-role-ARN` 的值，以更新 JSON。儲存變更。

   1. 執行下列 `put-bucket-replication` 命令，將複寫組態新增至您的來源儲存貯體。請務必提供來源儲存貯體名稱：

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

   若要擷取複寫組態，請使用 `get-bucket-replication` 命令。

   ```
   $ aws s3api get-bucket-replication \
   --bucket amzn-s3-demo-source-bucket \
   --profile acctA
   ```

1. 執行下列步驟，在 Amazon S3 主控台中測試設定：

   1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

   1. 在左側導覽窗格中，選擇 **Buckets** (儲存貯體)。在**一般用途儲存貯體**清單中，選擇來源儲存貯體。

   1. 在來源儲存貯體中，建立名為 `Tax` 的資料夾。

   1. 將範例物件新增至來源儲存貯體的 `Tax` 資料夾。
**注意**  
Amazon S3 複寫物件所需的時間長短，取決於物件大小。如需如何查看複寫狀態的相關資訊，請參閱 [取得複寫狀態資訊](replication-status.md)。

      在 *destination* 儲存貯體中驗證下列事項：
      + Amazon S3 已複寫物件。
      + 該物件是複本。在物件的**屬性**索引標籤上，向下捲動至**物件管理概觀**區段。在**管理組態**下，請參閱**複寫狀態**下的值。請確保將此值設定為 `REPLICA`。
      + 複本由來源儲存貯體帳戶擁有。您可以在物件的**許可**索引標籤上驗證物件擁有權。

        如果來源和目的地儲存貯體由不同帳戶所擁有時，您可以新增選用組態，指示 Amazon S3 將複本擁有權變更為目的地帳戶。如需範例，請參閱 [如何變更複本擁有者](replication-change-owner.md#replication-walkthrough-3)。

## 使用 AWS SDKs
<a name="replication-ex1-sdk"></a>

使用以下程式碼範例，分別使用 適用於 Java 的 AWS SDK 和 將複寫組態新增至儲存貯體 適用於 .NET 的 AWS SDK。

**注意**  
如果您想要複寫加密的物件，您還必須授予必要的 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 儲存貯體的兩個額外許可。這兩項額外的許可為 `s3:GetObjectRetention` 和 `s3:GetObjectLegalHold`。若該角色有 `s3:Get*` 許可陳述式，該陳述式即符合需求。如需詳細資訊，請參閱[搭配 S3 複寫使用物件鎖定](object-lock-managing.md#object-lock-managing-replication)。

------
#### [ Java ]

若要將複寫組態新增至儲存貯體，然後使用適用於 Java 的 AWS SDK 擷取和驗證組態，您可以使用 S3Client 以程式設計方式管理複寫設定。

如需如何使用適用於 Java 的 AWS SDK 設定複寫的範例，請參閱《*Amazon S3 API 參考*》中的在[儲存貯體上設定複寫組態](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_PutBucketReplication_section.html)。

------
#### [ C\$1 ]

下列 適用於 .NET 的 AWS SDK 程式碼範例會將複寫組態新增至儲存貯體，然後擷取它。若要使用此程式碼，請提供儲存貯體的名稱和 IAM 角色的 Amazon Resource Name (ARN)。如需設定和執行程式碼範例的資訊，請參閱《適用於 .NET 的 AWS SDK 開發人員指南》**中的 [適用於 .NET 的 AWS SDK入門](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/net-dg-config.html)。

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class CrossRegionReplicationTest
    {
        private const string sourceBucket = "*** source bucket ***";
        // Bucket ARN example - arn:aws:s3:::destinationbucket
        private const string destinationBucketArn = "*** destination bucket ARN ***";
        private const string roleArn = "*** IAM Role ARN ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint sourceBucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;
        public static void Main()
        {
            s3Client = new AmazonS3Client(sourceBucketRegion);
            EnableReplicationAsync().Wait();
        }
        static async Task EnableReplicationAsync()
        {
            try
            {
                ReplicationConfiguration replConfig = new ReplicationConfiguration
                {
                    Role = roleArn,
                    Rules =
                        {
                            new ReplicationRule
                            {
                                Prefix = "Tax",
                                Status = ReplicationRuleStatus.Enabled,
                                Destination = new ReplicationDestination
                                {
                                    BucketArn = destinationBucketArn
                                }
                            }
                        }
                };

                PutBucketReplicationRequest putRequest = new PutBucketReplicationRequest
                {
                    BucketName = sourceBucket,
                    Configuration = replConfig
                };

                PutBucketReplicationResponse putResponse = await s3Client.PutBucketReplicationAsync(putRequest);

                // Verify configuration by retrieving it.
                await RetrieveReplicationConfigurationAsync(s3Client);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
        private static async Task RetrieveReplicationConfigurationAsync(IAmazonS3 client)
        {
            // Retrieve the configuration.
            GetBucketReplicationRequest getRequest = new GetBucketReplicationRequest
            {
                BucketName = sourceBucket
            };
            GetBucketReplicationResponse getResponse = await client.GetBucketReplicationAsync(getRequest);
            // Print.
            Console.WriteLine("Printing replication configuration information...");
            Console.WriteLine("Role ARN: {0}", getResponse.Configuration.Role);
            foreach (var rule in getResponse.Configuration.Rules)
            {
                Console.WriteLine("ID: {0}", rule.Id);
                Console.WriteLine("Prefix: {0}", rule.Prefix);
                Console.WriteLine("Status: {0}", rule.Status);
            }
        }
    }
}
```

------

# 設定不同帳戶內的儲存貯體複寫
<a name="replication-walkthrough-2"></a>

即時複寫是在相同或不同的儲存貯體之間自動非同步複製物件 AWS 區域。即時複寫會將來源儲存貯體中新建立的物件和物件更新複製至目的地儲存貯體。如需詳細資訊，請參閱[複寫區域內和跨區域的物件](replication.md)。

設定複寫時，會將複寫規則新增至來源儲存貯體。複寫規則會定義要複寫的來源儲存貯體物件，以及存放已複寫物件的目的地儲存貯體。您可以建立規則，以特定的金鑰名稱前綴、一或多個物件標籤、或兩種都用，複寫儲存貯體中的所有物件，或一部分的物件。目的地儲存貯體可以 AWS 帳戶 與來源儲存貯體位於相同的 ，也可以位於不同的 帳戶中。

如果您指定要刪除的物件版本 ID，Amazon S3 會刪除來源儲存貯體中的該物件版本。但不會在目的地儲存貯體中進行刪除。換句話說，它不會從目的地儲存貯體中刪除相同的物件版本。這可防止資料遭到惡意刪除。

當您將複寫規則新增至儲存貯體時，預設會啟用此規則，讓它在您儲存它之後立即運作。

在來源和目的地儲存貯體分屬不同 AWS 帳戶 時的即時複寫設定，與兩個儲存貯體同屬於相同帳戶時的複寫設定類似。不過，當您在跨帳戶案例中設定複寫時，會出現幾個不同之處：
+ 目的地儲存貯體擁有者必須在目的地儲存貯體政策中，授予來源儲存貯體擁有者複寫物件的許可。
+ 如果您要複寫在跨帳戶案例中搭配 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 使用伺服器端加密來進行加密的物件，KMS 金鑰的擁有者必須授予來源儲存貯體擁有者使用 KMS 金鑰的許可。如需詳細資訊，請參閱[跨帳戶案例之授予其他許可](replication-config-for-kms-objects.md#replication-kms-cross-acct-scenario)。
+ 複寫的物件預設會由來源儲存貯體擁有者所擁有。在跨帳戶案例中，您可能會想要設定複寫，將所複寫物件的擁有權變更為由目的地儲存貯體擁有者所擁有。如需詳細資訊，請參閱[變更複本擁有者](replication-change-owner.md)。

**在來源和目的地儲存貯體由不同 擁有時設定複寫 AWS 帳戶**

1. 在此範例中，您會在兩個不同的 AWS 帳戶中建立來源和目的地儲存貯體。您必須為 AWS CLI設定兩個憑證設定檔。此範例會針對這些設定檔名稱使用 `acctA` 和 `acctB`。如需設定憑證設定檔和使用具名設定檔的相關資訊，請參閱《AWS Command Line Interface 使用者指南》**中的[組態和憑證檔案設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

1. 依照[設定相同帳戶內的儲存貯體複寫](replication-walkthrough1.md)中的逐步說明操作，但要進行下列變更​：
   + 對於與來源儲存貯體活動相關的所有 AWS CLI 命令 （例如建立來源儲存貯體、啟用版本控制和建立 IAM 角色），請使用 `acctA`設定檔。使用 `acctB` 設定檔建立目的地儲存貯體。
   + 請確定 IAM 角色許可政策指定您為此範例建立的來源和目的地儲存貯體。

1. 在主控台中，新增 *destination* 儲存貯體上的下列儲存貯體政策，來允許 *source* 儲存貯體擁有者複寫物件。如需說明，請參閱[使用 Amazon S3 主控台新增儲存貯體政策](add-bucket-policy.md)。請務必提供來源儲存貯體擁有者的 AWS 帳戶 ID、IAM 角色名稱和目的地儲存貯體名稱來編輯政策。
**注意**  
若要使用下列範例，請以您自己的資訊取代 `user input placeholders`。用您的目的地儲存貯體名稱取代 `amzn-s3-demo-destination-bucket`。使用您用於此複寫組態的 IAM 角色來取代 IAM Amazon Resource Name (ARN) 中的 `source-bucket-account-ID:role/service-role/source-account-IAM-role`。  
如果您手動建立了 IAM 服務角色，請將角色路徑設定為 IAM ARN 格式的 `role/service-role/`，如下列政策範例所示。如需詳細資訊，請參閱《IAM 使用者指南》中的 [IAM ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

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

****  

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

------

1. (選用) 如果您要複寫使用 SSE-KMS 加密的物件，KMS 金鑰的擁有者必須授予來源儲存貯體擁有者使用 KMS 金鑰的許可。如需詳細資訊，請參閱[跨帳戶案例之授予其他許可](replication-config-for-kms-objects.md#replication-kms-cross-acct-scenario)。

1. (選用) 在複寫中，來源物件的擁有者預設會擁有複本。當來源和目的地儲存貯體由不同的 擁有時 AWS 帳戶，您可以新增選用的組態設定，將複本擁有權變更為 AWS 帳戶 擁有目的地儲存貯體的 。這包含授予 `ObjectOwnerOverrideToBucketOwner` 許可。如需詳細資訊，請參閱[變更複本擁有者](replication-change-owner.md)。

# 變更複本擁有者
<a name="replication-change-owner"></a>

在複寫中，來源物件的擁有者依預設也擁有複本。不過，當來源和目的地儲存貯體由不同的 擁有時 AWS 帳戶，您可能想要變更複本擁有權。例如，您可能想要變更擁有權，以限制對物件複本的存取。在複寫組態中，您可以新增選用的組態設定，將複本擁有權變更為 AWS 帳戶 擁有目的地儲存貯體的 。

若要變更複本擁有者，請執行下列動作：
+ 將*擁有者覆寫*選項新增至複寫組態，以指示 Amazon S3 變更複本所有權。
+ 授予 Amazon S3 變更複本擁有權的 `s3:ObjectOwnerOverrideToBucketOwner` 許可。
+ 在目的地儲存貯體政策中新增 `s3:ObjectOwnerOverrideToBucketOwner` 許可，以允許變更複本所有權。`s3:ObjectOwnerOverrideToBucketOwner` 許可能夠讓目的地儲存貯體的擁有者接受物件複本的擁有權。

如需詳細資訊，請參閱[所有權覆寫選項的考量事項](#repl-ownership-considerations)及[將擁有者覆寫選項新增至複寫組態](#repl-ownership-owneroverride-option)。如需含逐步說明的運作範例，請參閱 [如何變更複本擁有者](#replication-walkthrough-3)。

**重要**  
您可以針對物件擁有權使用儲存貯體擁有者強制執行的「物件擁有權」設定，而不是使用擁有者覆寫選項。當您使用複寫，且來源和目的地儲存貯體由不同的 擁有時 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 會在複本上設定 ACL，將完整控制權授予目的地儲存貯體的擁有者。Amazon S3 不會將後續變更複寫到來源物件 ACL。不過，如果是在您設定擁有者覆寫選項之前即已複寫的物件版本，就不適用這項 ACL 變更。針對在設定擁有者覆寫之前即已複寫的來源物件，系統會繼續複寫其中的任何 ACL 更新 (因為物件及其複本的擁有者仍然相同)。
  + 如果您移除複寫組態中的擁有者覆寫選項：

    Amazon S3 會將來源儲存貯體中出現的新物件與相關聯的 ACL 複寫至目的地儲存貯體。如果物件是在您移除擁有者覆寫之前即已複寫，Amazon S3 就不會複寫 ACL，因為 Amazon S3 所做的物件擁有權變更仍然有效。亦即，針對在設定擁有者覆寫時複寫的物件版本，系統仍然不會複寫其上的 ACL。

## 將擁有者覆寫選項新增至複寫組態
<a name="repl-ownership-owneroverride-option"></a>

**警告**  
只有在來源和目的地儲存貯體由不同 擁有時，才新增擁有者覆寫選項 AWS 帳戶。Amazon S3 不會檢查儲存貯體的擁有者是相同或不同的帳戶。如果您在兩個儲存貯體都由相同擁有時新增擁有者覆寫 AWS 帳戶，Amazon S3 會套用擁有者覆寫。此選項會將完整許可授予目的地儲存貯體擁有者，而且不會將後續更新複寫至來源物件存取控制清單 (ACL)。複本擁有者可以使用 `PutObjectAcl` 要求直接變更與複本相關聯的 ACL，但不是透過複寫。

若要指定擁有者覆寫選項，請將下列項目新增至 `Destination` 元素：
+ `AccessControlTranslation` 元素，其可通知 Amazon S3 變更複本擁有權
+ `Account` 元素，指定目的地儲存貯體擁有者 AWS 帳戶 的 

```
<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>
```

下列複寫組態範例會通知 Amazon S3，將含 *`Tax`* 金鑰字首的物件複寫至 `amzn-s3-demo-destination-bucket` 目的地儲存貯體，並變更複本的擁有權。若要使用此範例，請以您自己的資訊取代 `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 變更複本擁有權的許可。此角色為您在複寫組態中指定的 IAM 角色，其可讓 Amazon S3 擔任角色並代您複寫物件。若要使用下列範例，請使用目的地儲存貯體的名稱取代 `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 SDKs來變更複本擁有權。

### 使用 S3 主控台
<a name="replication-ex3-console"></a>

如需逐步說明，請參閱 [設定相同帳戶內的儲存貯體複寫](replication-walkthrough1.md)。本主題提供當來源和目的地儲存貯體為相同和不同擁有者時，設定複寫組態的指示 AWS 帳戶。

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

下列程序說明如何使用 AWS CLI變更複本擁有權。在此過程中，您將執行以下操作：
+ 建立來源與目的地儲存貯體。
+ 在儲存貯體上啟用版本控制。
+ 建立 AWS Identity and Access Management (IAM) 角色，授予 Amazon S3 複寫物件的許可。
+ 將複寫組態新增至來源儲存貯體。
+ 請在複寫組態中指示 Amazon S3 變更複本擁有權。
+ 測試您的複寫組態。

**在來源和目的地儲存貯體由 different AWS 帳戶 (AWS CLI) 擁有時變更複本擁有權**

若要使用此程序中的範例 AWS CLI 命令，請將 取代`user input placeholders`為您自己的資訊。

1. 在此範例中，您會在兩個不同的 中建立來源和目的地儲存貯體 AWS 帳戶。若要使用這兩個帳戶，請使用兩個具名設定檔來設定 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. 建立 *source* 儲存貯體並啟用版本控制。本範例會在美國東部 (維吉尼亞北部) (`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. 建立 *destination* 儲存貯體並啟用版本控制。本範例會在美國西部 (奧勒岡) (`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. 您必須在 *destination* 儲存貯體政策中新增許可，以允許複本擁有權的變更。

   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 角色。您可以在複寫組態中指定稍後要新增至 *source* 儲存貯體的角色，Amazon S3 就會擔任此角色以代您複寫物件。建立 IAM 角色需要兩個步驟：
   + 建立角色。
   + 將許可政策連接到角色。

   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 Resource Name (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 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

   1. 將物件新增到*來源*儲存貯體。確認目的地儲存貯體包含物件複本，且複本的擁有權已變更為 AWS 帳戶 擁有目的地儲存貯體的 。

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

 如需新增複寫組態的程式碼範例，請參閱[使用 AWS SDKs](replication-walkthrough1.md#replication-ex1-sdk)。您必須正確修改複寫組態。如需相關概念資訊，請參閱 [變更複本擁有者](#replication-change-owner)。

# 使用 S3 複寫時間控制來滿足合規要求
<a name="replication-time-control"></a>

S3 複寫時間控制 (S3 RTC) 可協助滿足資料複寫的合規性或業務要求，讓您清楚掌握 Amazon S3 複寫時間。S3 RTC 會在數秒內複寫您上傳至 Amazon S3 的多數物件，以及在 15 分鐘內複寫 99.9% 的這些物件。

S3 RTC 預設會包含兩種追蹤複寫進度的方式：
+ **S3 複寫指標** - 您可以使用複寫指標來監控待複寫的 S3 API 操作總數、待複寫的物件總大小、目的地區域的複寫時間上限，以及複寫失敗的操作總數。然後，您可以監控個別複寫的每個資料集。您也可以獨立於 S3 RTC 啟用 S3 複寫指標。如需詳細資訊，請參閱[使用 S3 複寫指標](repl-metrics.md)。

  啟用具有 S3 複寫時間控制 (S3 RTC) 的複寫規則會發佈 S3 複寫指標。複寫指標可在啟用 S3 RTC 後的 15 分鐘內使用。複寫指標可透過 Amazon S3 主控台、Amazon S3 API、 AWS SDKs、 AWS Command Line Interface (AWS CLI) 和 Amazon CloudWatch 取得。如需 CloudWatch 指標的詳細資訊，請參閱[使用 Amazon CloudWatch 監控指標](cloudwatch-monitoring.md)。如需有關透過 Amazon S3 主控台檢視複寫指標的詳細資訊，請參閱[檢視複寫指標](repl-metrics.md#viewing-replication-metrics)。

  S3 複寫指標的計費方式與 Amazon CloudWatch 自訂指標相同。如需詳細資訊，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing/)。
+ **Amazon S3 事件通知** – 如果物件複寫超過 15 分鐘閾值或在此閾值之後複寫，S3 RTC 會提供可通知儲存貯體擁有者的 `OperationMissedThreshold` 和 `OperationReplicatedAfterThreshold` 事件。透過 S3 RTC，Amazon S3 事件可在物件未在 15 分鐘內複寫，以及這些物件在 15 分鐘閾值後複寫的罕見情況下通知您。

  複寫事件可在啟用 S3 RTC 後的 15 分鐘內使用。Amazon S3 事件通知可透過 Amazon SQS、Amazon SNS 或 取得 AWS Lambda。如需詳細資訊，請參閱[使用 Amazon S3 事件通知接收複寫失敗事件](replication-metrics-events.md)。

 

## S3 RTC 的最佳實務和指導方針
<a name="rtc-best-practices"></a>

在啟用 S3 複寫時間控制 (S3 RTC) 的 Amazon S3 中複寫資料時，請遵循這些最佳實務指導方針，以最佳化工作負載的複寫效能。

**Topics**
+ [

### Amazon S3 複寫與請求率效能的指導方針
](#rtc-request-rate-performance)
+ [

### 預估您的複寫請求率
](#estimating-replication-request-rates)
+ [

### 超過 S3 RTC 資料傳輸速率限制
](#exceed-rtc-data-transfer-limits)
+ [

### AWS KMS 加密物件複寫請求率
](#kms-object-replication-request-rates)

### Amazon S3 複寫與請求率效能的指導方針
<a name="rtc-request-rate-performance"></a>

從 Amazon S3 上傳和擷取儲存時，您的應用程式可以在請求效能中實現每秒數千筆交易。例如，在 S3 儲存貯體中，應用程式在 S3 儲存貯體內至少可達到每個字首每秒 3,500 個 `PUT`/`COPY`/`POST`/`DELETE` 或 5,500 個 `GET`/`HEAD` 請求，包括 S3 複寫代您進行的請求。在儲存貯體中的字首數不受限制。您可以並行讀取以提升您的讀取或寫入的效能。例如，如果您在 S3 儲存貯體裡建立 10 個字首以進行平行讀取，您可以將讀取效能擴展至每秒 55,000 讀取請求。

Amazon S3 會自動擴展以回應高於這些指導方針的持續請求率，或與 `LIST` 請求並行的持續請求率。當 Amazon S3 在內部針對新請求率最佳化時，您將會暫時收到 HTTP 503 請求回應，直到最佳化完成為止。當每秒的請求率增加，或當您第一次啟用 S3 RTC 時，可能會發生此行為。在這些期間，您的複寫延遲可能會增加。S3 RTC 服務水準協議 (SLA) 不適用 Amazon S3 效能指導方針超過每秒請求數的期間。

S3 RTC SLA 也不適用複寫資料傳輸率超過預設每秒 1 Gigabit (Gbps) 配額的期間。如果預期複寫傳輸率超過 1 Gbps，您可以聯絡 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)或使用 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 來請求增加複寫傳輸率配額。

### 預估您的複寫請求率
<a name="estimating-replication-request-rates"></a>

您的請求率總計 (包括 Amazon S3 代表您進行的複寫請求) 必須符合複寫來源和目的地儲存貯體的 Amazon S3 請求率指導方針。對於每個複寫的物件，Amazon S3 複寫最多會對來源儲存貯體形成五個 `GET`/`HEAD` 請求和一個 `PUT` 請求，以及對每個目的地儲存貯體形成一個 `PUT` 請求。

例如，如果您預期每秒複寫 100 個物件，Amazon S3 複寫可能會代表您執行額外 100 個 `PUT` 請求，因此，對來源 S3 儲存貯體每秒總計 200 個 `PUT` 請求。Amazon S3 複寫也可能會執行最多 500 個 `GET`/`HEAD` 請求 (每個複寫的物件 5 個 `GET`/`HEAD` 請求)。

**注意**  
對於每個複寫的物件，只會產生一個 `PUT` 請求成本。如需詳細資訊，請參閱[有關複寫的 Amazon S3 常見問答集](https://aws.amazon.com/s3/faqs/#Replication)中的定價資訊。

### 超過 S3 RTC 資料傳輸速率限制
<a name="exceed-rtc-data-transfer-limits"></a>

如果您預期 S3 RTC 資料傳輸率會超過預設的 1 Gbps 配額，請聯絡 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)或使用 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 來請求增加複寫傳輸率配額。

### AWS KMS 加密物件複寫請求率
<a name="kms-object-replication-request-rates"></a>

當您複寫使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 進行伺服器端加密的物件時，會套用每秒 AWS KMS 請求配額。 AWS KMS 可能會拒絕其他有效的請求，因為您的請求速率超過每秒請求數的配額。當請求受到調節時， 會 AWS KMS 傳回`ThrottlingException`錯誤。 AWS KMS 請求率配額適用於您直接提出的請求，以及 Amazon S3 複寫代表您提出的請求。

例如，如果您預期每秒複寫 1，000 個物件，您可以從請求率配額中減去 2，000 個 AWS KMS 請求。產生的每秒請求率適用於不包括複寫的 AWS KMS 工作負載。您可以使用 [AWS KMS Amazon CloudWatch 中的請求指標](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-cloudwatch.html)來監控 上的總 AWS KMS 請求率 AWS 帳戶。

若要請求提高每秒 AWS KMS 請求配額，請聯絡 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)或使用 [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)。

## 啟用 S3 複寫時間控制
<a name="replication-walkthrough-5"></a>

您可以開始使用 S3 複寫時間控制 (S3 RTC) 搭配新的或現有的複寫規則。您可以選擇將複寫規則套用至整個儲存貯體，或套用至具有特定字首或標籤的物件。當您啟用 S3 RTC 時，也會在複寫規則上啟用 S3 複寫指標。

您可以使用 Amazon S3 主控台、Amazon S3 API、 AWS SDKs和 AWS Command Line Interface () Amazon S3 RTC AWS CLI。 Amazon S3 

**Topics**

### 使用 S3 主控台
<a name="replication-ex5-console"></a>

如需逐步說明，請參閱 [設定相同帳戶內的儲存貯體複寫](replication-walkthrough1.md)。本主題提供當來源和目的地儲存貯體為相同和不同擁有者時，在複寫組態中啟用 S3 RTC 的說明 AWS 帳戶。

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

若要使用 AWS CLI 複寫已啟用 S3 RTC 的物件，您可以建立儲存貯體、在儲存貯體上啟用版本控制、建立提供 Amazon S3 複寫物件許可的 IAM 角色，以及將複寫組態新增至來源儲存貯體。複寫組態必須啟用 S3 RTC，如下列範例所示。

如需使用 設定複寫組態的step-by-step說明 AWS CLI，請參閱 [設定相同帳戶內的儲存貯體複寫](replication-walkthrough1.md)。

下列範例複寫組態會啟用並設定複寫規則的 `ReplicationTime` 和 `EventThreshold` 值。啟用和設定這些值會在規則上啟用 S3 RTC。

```
{
    "Rules": [
        {
            "Status": "Enabled",
            "Filter": {
                "Prefix": "Tax"
            },
            "DeleteMarkerReplication": {
                "Status": "Disabled"
            },
            "Destination": {
                "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket",
                "Metrics": {
                    "Status": "Enabled",
                    "EventThreshold": {
                        "Minutes": 15
                    }
                },
                "ReplicationTime": {
                    "Status": "Enabled",
                    "Time": {
                        "Minutes": 15
                    }
                }
            },
            "Priority": 1
        }
    ],
    "Role": "IAM-Role-ARN"
}
```

**重要**  
 `Metrics:EventThreshold:Minutes` 和 `ReplicationTime:Time:Minutes` 只能使用 `15` 作為有效值。

### 使用適用於 Java 的 AWS 開發套件
<a name="replication-ex5-sdk"></a>

 下列是在啟用 S3 複寫時間控制 (S3 RTC) 時新增複寫組態的 Java 範例。

```
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.model.DeleteMarkerReplication;
import software.amazon.awssdk.services.s3.model.Destination;
import software.amazon.awssdk.services.s3.model.Metrics;
import software.amazon.awssdk.services.s3.model.MetricsStatus;
import software.amazon.awssdk.services.s3.model.PutBucketReplicationRequest;
import software.amazon.awssdk.services.s3.model.ReplicationConfiguration;
import software.amazon.awssdk.services.s3.model.ReplicationRule;
import software.amazon.awssdk.services.s3.model.ReplicationRuleFilter;
import software.amazon.awssdk.services.s3.model.ReplicationTime;
import software.amazon.awssdk.services.s3.model.ReplicationTimeStatus;
import software.amazon.awssdk.services.s3.model.ReplicationTimeValue;

public class Main {

  public static void main(String[] args) {
    S3Client s3 = S3Client.builder()
      .region(Region.US_EAST_1)
      .credentialsProvider(() -> AwsBasicCredentials.create(
          "AWS_ACCESS_KEY_ID",
          "AWS_SECRET_ACCESS_KEY")
      )
      .build();

    ReplicationConfiguration replicationConfig = ReplicationConfiguration
      .builder()
      .rules(
          ReplicationRule
            .builder()
            .status("Enabled")
            .priority(1)
            .deleteMarkerReplication(
                DeleteMarkerReplication
                    .builder()
                    .status("Disabled")
                    .build()
            )
            .destination(
                Destination
                    .builder()
                    .bucket("destination_bucket_arn")
                    .replicationTime(
                        ReplicationTime.builder().time(
                            ReplicationTimeValue.builder().minutes(15).build()
                        ).status(
                            ReplicationTimeStatus.ENABLED
                        ).build()
                    )
                    .metrics(
                        Metrics.builder().eventThreshold(
                            ReplicationTimeValue.builder().minutes(15).build()
                        ).status(
                            MetricsStatus.ENABLED
                        ).build()
                    )
                    .build()
            )
            .filter(
                ReplicationRuleFilter
                    .builder()
                    .prefix("testtest")
                    .build()
            )
        .build())
        .role("role_arn")
        .build();

    // Put replication configuration
    PutBucketReplicationRequest putBucketReplicationRequest = PutBucketReplicationRequest
      .builder()
      .bucket("source_bucket")
      .replicationConfiguration(replicationConfig)
      .build();

    s3.putBucketReplication(putBucketReplicationRequest);
  }
}
```

# 複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)
<a name="replication-config-for-kms-objects"></a>

**重要**  
Amazon S3 現在將伺服器端加密與 Amazon S3 受管金鑰 (SSE-S3) 套用為 Amazon S3 中每個儲存貯體的基本加密層級。從 2023 年 1 月 5 日起，所有上傳到 Amazon S3 的新物件都會自動加密，無需額外費用，也不會影響效能。S3 儲存貯體預設加密組態和新物件上傳的自動加密狀態可在 CloudTrail 日誌、S3 庫存、S3 Storage Lens、Amazon S3 主控台，以及 AWS CLI 和 AWS SDKs 中的其他 Amazon S3 API 回應標頭中使用。如需詳細資訊，請參閱[預設加密常見問答集](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html)。

複製已使用伺服器端加密進行加密的物件時，有一些特殊的考量。Amazon S3 支援下列三種類型的伺服器端加密：
+ 使用 Amazon S3 受管金鑰 (SSE-S3) 的伺服器端加密
+ 使用 AWS Key Management Service (AWS KMS) 金鑰的伺服器端加密 (SSE-KMS)
+ 使用 AWS KMS 金鑰進行雙層伺服器端加密 (DSSE-KMS)
+ 使用客戶提供金鑰 (SSE-C) 的伺服器端加密

如需伺服器端加密的詳細資訊，請參閱「[使用伺服器端加密保護資料](serv-side-encryption.md)」。

本主題說明指示 Amazon S3 複寫已使用伺服器端加密進行加密的物件所需的許可。本主題也提供您可以新增的其他組態元素，以及授予複寫加密物件必要許可的 example 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 加密的物件。 您可以在 Amazon S3 主控台或使用 AWS SDKs 設定 SSE-C 物件複寫，方法與為未加密物件設定複寫相同。除了目前複寫所需的許可外，沒有其他 SSE-C 許可。

如果新上傳的 SSE-C 加密物件符合資格，S3 複寫會根據 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` 狀態碼回應，但複寫會失敗。

下列範例顯示複寫組態，其中包含選用組態元素。此複寫組態具有一項規則。該規則會套用至金鑰前綴為 `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:GetObjectVersionForReplication` 動作，不要使用 `s3:GetObjectVersion` 動作，因為 `s3:GetObjectVersionForReplication` 只會提供 Amazon S3 複寫所需的最低許可。此外，`s3:GetObjectVersion` 動作還允許複寫未加密物件和 SSE-S3 加密物件，但不允許複寫使用 KMS 金鑰 (SSE-KMS 或 DSSE-KMS) 加密的物件。
+ **`kms:Decrypt` KMS 金鑰的 和 `kms:Encrypt` AWS KMS 動作**
  + 您必須針對用來解密來源物件的 AWS KMS key 授予 `kms:Decrypt` 許可。
  + 您必須針對用來加密物件複本的 AWS KMS key 授予 `kms:Encrypt` 許可。
+ **`kms:GenerateDataKey`複寫純文字物件的動作** – 如果您要將純文字物件複寫到預設已啟用 SSE-KMS 或 DSSE-KMS 加密的儲存貯體，則必須在 IAM 政策中包含目的地加密內容和 KMS 金鑰的 `kms:GenerateDataKey` 許可。

**重要**  
如果您使用 S3 批次複寫跨區域複寫資料集，且您的物件之前已將其伺服器端加密類型從 SSE-S3 更新為 SSE-KMS，則您可能需要額外的許可。在來源區域儲存貯體上，您必須擁有 `kms:decrypt` 許可。然後，您將需要目的地區域中儲存貯體的 `kms:decrypt`和 `kms:encrypt`許可。

我們建議您使用 AWS KMS 條件索引鍵，僅將這些許可限制為目的地儲存貯體和物件。 AWS 帳戶 擁有 IAM 角色的 必須具有政策中所列 KMS 金鑰的 `kms:Encrypt`和 `kms:Decrypt`動作的許可。如果 KMS 金鑰由另一個金鑰擁有 AWS 帳戶，KMS 金鑰的擁有者必須將這些許可授予 AWS 帳戶 擁有 IAM 角色的 。如需管理這些 KMS 金鑰存取權的詳細資訊，請參閱* AWS Key Management Service 《開發人員指南*》中的[搭配 使用 IAM 政策 AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html)。

### S3 儲存貯體金鑰和複寫
<a name="bk-replication"></a>

若要搭配 S3 儲存貯體金鑰使用複寫，用於加密物件複本的 KMS 金鑰 AWS KMS key 政策必須包含呼叫主體的`kms:Decrypt`許可。在使用 S3 儲存貯體金鑰之前，對 `kms:Decrypt` 的呼叫會驗證 S3 儲存貯體金鑰的完整性。如需詳細資訊，請參閱[使用 S3 儲存貯體金鑰與複寫](bucket-key.md#bucket-key-replication)。

針對來源或目的地儲存貯體啟用 S3 儲存貯體金鑰時，加密內容將是儲存貯體 Amazon Resource Name (ARN)，而不是物件的 ARN (例如，`arn:aws:s3:::bucket_ARN`)。您必須更新 IAM 政策，才能將儲存貯體 ARN 用於加密內容：

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

如需詳細資訊，請參閱〈使用 REST API〉一節中的 [加密內容 (`x-amz-server-side-encryption-context`)](specifying-kms-encryption.md#s3-kms-encryption-context) 和 [啟用 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 建立的物件**  
下列是完整 IAM 政策，其會授予必要的許可來複寫未加密的物件、使用 SSE-S3 建立的物件，以及使用 SSE-KMS 建立的物件。    
****  

```
{
   "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 儲存貯體金鑰來複寫物件**  
以下是完整的 IAM 政策，可以授予使用 S3 儲存貯體金鑰來複寫物件的必要許可。    
****  

```
{
   "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 管理主控台 ，並在 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 開啟 AWS 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/)中的 [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`錯誤）。當每秒 AWS KMS 交易數量超過目前配額時，即會發生限流。如需詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的[配額](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)。

若要請求提升配額，請使用 Service Quotas。如需詳細資訊，請參閱[請求增加配額](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 或 DSS-KMS 加密的物件，請務必修改儲存貯體複寫組態，指示 Amazon S3 複寫這些物件。此範例說明如何使用 Amazon S3 主控台和 AWS Command Line Interface (AWS CLI) 來變更儲存貯體複寫組態，以啟用複寫加密物件。

**注意**  
針對來源或目的地儲存貯體啟用 S3 儲存貯體金鑰時，加密內容將是儲存貯體 Amazon Resource Name (ARN)，而不是物件的 ARN。您必須更新 IAM 政策，才能將儲存貯體 ARN 用於加密內容。如需詳細資訊，請參閱[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，請執行下列動作：
+ 建立來源和目的地儲存貯體，並對這些儲存貯體啟用版本控制。
+ 建立 AWS Identity and Access Management (IAM) 服務角色，提供 Amazon S3 複寫物件的許可。IAM 角色許可包含複寫加密物件的必要許可。
+ 將複寫組態新增至來源儲存貯體。複寫組態提供使用 KMS 金鑰複寫加密物件的相關資訊。
+ 將加密物件新增到來源儲存貯體。
+ 測試設定，確認您的加密物件正在複寫到目的地儲存貯體。

下列步驟將逐步引導您完成此程序。

**複寫伺服器端加密物件 (AWS CLI)**

若要在此程序中使用範例，請以您的資訊取代 `user input placeholders`。

1. 在此範例中，您會在相同的 AWS 帳戶中建立來源 (*`amzn-s3-demo-source-bucket`*) 和目的地 (*`amzn-s3-demo-destination-bucket`*) 儲存貯體。您也會設定 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` 儲存貯體並在其上啟用版本控制。下列範例命令會在美國東部 (維吉尼亞北部) (`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. 使用下列命令建立 `amzn-s3-demo-destination-bucket` 儲存貯體並在其上啟用版本控制。下列範例命令會在美國西部 (奧勒岡) (`us-west-2`) 區域中建立 `amzn-s3-demo-destination-bucket` 儲存貯體。
**注意**  
若要在 `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 角色需要兩個步驟：
   + 建立服務角色。
   + 將許可政策連接到角色。

   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 金鑰 IDs。您必須為 `amzn-s3-demo-source-bucket`和 `amzn-s3-demo-destination-bucket`儲存貯體建立兩個單獨的 KMS 金鑰。 AWS KMS keys aren 不會在建立金鑰 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` 儲存貯體。該組態會指示 Amazon S3 使用 `amzn-s3-demo-destination-bucket` 儲存貯體的 `Tax/` 字首複寫物件。
**重要**  
您可以在複寫組態中指定 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 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

   1. 在 `amzn-s3-demo-source-bucket` 儲存貯體中，建立名為 `Tax` 的資料夾。

   1. 將範例物件新增至資料夾。請務必選擇加密選項，並指定您的 KMS 金鑰來加密物件。

   1. 確認 `amzn-s3-demo-destination-bucket` 儲存貯體包含物件複本，且這些複本已使用您在組態中指定的 KMS 金鑰加密。如需詳細資訊，請參閱[取得複寫狀態資訊](replication-status.md)。

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

如需新增複寫組態的程式碼範例，請參閱 [使用 AWS SDKs](replication-walkthrough1.md#replication-ex1-sdk)。您必須正確修改複寫組態。

 

# 使用複本修改同步來複寫中繼資料變更
<a name="replication-for-metadata-changes"></a>

Amazon S3 複本修改同步可協助您在複本和來源物件之間複寫物件中繼資料，例如標籤、存取控制清單 (ACL) 和物件鎖定設定。根據預設，Amazon S3 只會將來源物件中的中繼資料複寫至複本。啟用複本修改同步時，Amazon S3 會將對複寫複本所進行的中繼資料變更複寫回來源物件，從而進行雙向複寫。

## 啟用複本修改同步
<a name="enabling-replication-for-metadata-changes"></a>

您可以將 Amazon S3 複本修改同步與全新或現有的複寫規則搭配使用。您可以將其套用至整個儲存貯體，或具有特定字首的物件。

若要使用 Amazon S3 主控台啟用複本修改同步，請參閱[設定即時複寫的範例](replication-example-walkthroughs.md)。本主題提供當來源和目的地儲存貯體為相同或不同擁有者時，在複寫組態中啟用複本修改同步的說明 AWS 帳戶。

若要使用 AWS Command Line Interface (AWS CLI) 啟用複本修改同步，您必須將複寫組態新增至儲存貯體，其中包含`ReplicaModifications`已啟用的複本。若要設定雙向複寫，請從來源儲存貯體 (`amzn-s3-demo-source-bucket`) 建立至含有複寫 (`amzn-s3-demo-destination-bucket`) 之儲存貯體的複寫規則。接著，從包含複本 (`amzn-s3-demo-destination-bucket`) 的儲存貯體建立至來源儲存貯體 (`amzn-s3-demo-source-bucket`) 的第二個複寫規則。來源和目的地儲存貯體可以位於相同或不同位置 AWS 區域。

**注意**  
您必須在來源和目的地儲存貯體上啟用複本修改同步，才能複寫本中繼資料變更，例如複寫物件中的物件存取控制清單 (ACL)、物件標籤或物件鎖定設定。如同所有複寫規則，您可以將這些規則套用至整個儲存貯體，也可以套用至由字首或物件標籤篩選的物件子集。

在下列範例組態中，Amazon S3 會將字首 `Tax` 下的中繼資料變更複寫至包含來源物件的儲存貯體 `amzn-s3-demo-source-bucket`。

```
{
    "Rules": [
        {
            "Status": "Enabled",
            "Filter": {
                "Prefix": "Tax"
            },
            "SourceSelectionCriteria": {
                "ReplicaModifications":{
                    "Status": "Enabled"
                }
            },
            "Destination": {
                "Bucket": "arn:aws:s3:::amzn-s3-demo-source-bucket"
            },
            "Priority": 1
        }
    ],
    "Role": "IAM-Role-ARN"
}
```

如需使用 建立複寫規則的完整說明 AWS CLI，請參閱 [設定相同帳戶內的儲存貯體複寫](replication-walkthrough1.md)。

# 複寫儲存貯體之間的刪除標記
<a name="delete-marker-replication"></a>

根據預設，啟用 S3 複寫且在來源儲存貯體中刪除物件時，Amazon S3 只會在來源儲存貯體中新增刪除標記。此動作有助於保護目的地儲存貯體中的資料，以避免意外或惡意刪除。如果啟用了*刪除標記複寫*，這些標記會複製至目的地儲存貯體，而 Amazon S3 的行為就像在來源和目的地儲存貯體中刪除物件一樣。如需有關刪除標記如何運作的詳細資訊，請參閱 [使用刪除標記](DeleteMarker.md)。

**注意**  
標籤型複寫規則不支援刪除標記複寫。刪除標記複寫也不符合您使用 S3 複寫時間控制 (S3 RTC) 時授予的 15 分鐘服務水準協議 (SLA)。
如果您未使用最新的複寫組態 XML 版本，刪除作業會以不同的方式影響複寫。如需詳細資訊，請參閱[刪除操作對複寫的影響](replication-what-is-isnot-replicated.md#replication-delete-op)。
如果您啟用刪除標記複寫，且來源儲存貯體具有 S3 生命週期過期規則，則 S3 生命週期過期規則新增的刪除標記將不會複寫至目的地儲存貯體。

## 啟用刪除標記複寫
<a name="enabling-delete-marker-replication"></a>

您可以開始使用新的或現有複寫規則的刪除標記複寫。您可以將刪除標記複寫套用至整個儲存貯體或具有特定字首的物件。

若要使用 Amazon S3 主控台啟用刪除標記複寫，請參閱[使用 S3 主控台](replication-walkthrough1.md#enable-replication)。本主題提供當來源和目的地儲存貯體為相同或不同擁有者時，在複寫組態中啟用刪除標記複寫的指示 AWS 帳戶。

若要使用 AWS Command Line Interface (AWS CLI) 啟用刪除標記複寫，您必須將複寫組態新增至`DeleteMarkerReplication`已啟用 的來源儲存貯體，如下列範例組態所示。

在下列範例複寫組態中，刪除標記會複寫至字首 `Tax` 下物件的目的地儲存貯體 `amzn-s3-demo-destination-bucket`。

```
{
    "Rules": [
        {
            "Status": "Enabled",
            "Filter": {
                "Prefix": "Tax"
            },
            "DeleteMarkerReplication": {
                "Status": "Enabled"
            },
            "Destination": {
                "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket"
            },
            "Priority": 1
        }
    ],
    "Role": "IAM-Role-ARN"
}
```

如需透過 建立複寫規則的完整說明 AWS CLI，請參閱 [設定相同帳戶內的儲存貯體複寫](replication-walkthrough1.md)。