

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

# 設定即時複寫概觀
<a name="replication-how-setup"></a>

**注意**  
您設定複寫之前就已存在的物件不會自動複寫。換句話說，Amazon S3 不會追溯複寫物件。若要複寫在複寫組態之前建立的物件，請使用 S3 批次複寫。如需設定批次複寫的詳細資訊，請參閱[複寫現有物件](s3-batch-replication-batch.md)。

若要啟用即時複寫 (相同區域複寫 (SRR) 或跨區域複寫 (CRR))，請將複寫組態新增至來源儲存貯體。此組態會通知 Amazon S3 依指定方式複寫物件。在複寫組態中，您必須提供以下項目：
+ **目的地儲存貯體** – 您希望 Amazon S3 在其中複寫物件的儲存貯體。
+ **您要複寫的物件** – 您可以複寫來源儲存貯體中的所有物件或物件子集。您可以在組態中提供[金鑰名稱前綴](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#keyprefix)、一或多個物件標籤或兩者，來識別子集。

  例如，如果您將複寫規則設定為僅複寫具有金鑰名稱前綴為 `Tax/` 的物件，則 Amazon S3 會複寫具有 `Tax/doc1` 或 `Tax/doc2` 等金鑰的物件。但不會複寫具有 `Legal/doc3` 金鑰的物件。如果您指定字首以及一或多個標籤，則 Amazon S3 僅會複寫具備特定索引鍵字首和標籤的物件。
+ ** AWS Identity and Access Management (IAM) 角色** – Amazon S3 會擔任此 IAM 角色來代表您複寫物件。如需有關建立 IAM 角色和管理許可的詳細資訊，請參閱[設定即時複寫的許可](setting-repl-config-perm-overview.md)。

除了這些最低需求以外，您可以選擇下列選項：
+ **複本儲存體方案** – 根據預設，Amazon S3 會使用與來源物件相同的儲存體方案來存放物件複本。您可以為複本指定不同的儲存體方案。
+ **複本擁有權** – Amazon S3 會假設物件複本的擁有者持續是來源物件擁有者。所以，當複寫物件時，也會複寫對應的物件存取控制清單 (ACL) 或 S3 物件擁有權設定。如果來源與目的地儲存貯體的擁有者是不同的 AWS 帳戶，您可以設定複寫，以將複本擁有者變更為擁有目標儲存貯體的 AWS 帳戶 。如需詳細資訊，請參閱[變更複本擁有者](replication-change-owner.md)。

您可以使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI)、 AWS SDKs或 Amazon S3 REST API 來設定複寫。如需如何設定複寫的詳細逐步解說，請參閱[設定即時複寫的範例](replication-example-walkthroughs.md)。

 Amazon S3 也提供 REST API 操作來支援設定複寫規則。如需詳細資訊，請參閱 *Amazon Simple Storage Service API 參考*中的下列主題：
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketReplication.html) 

**Topics**
+ [複寫組態檔案元素](replication-add-config.md)
+ [設定即時複寫的許可](setting-repl-config-perm-overview.md)
+ [設定即時複寫的範例](replication-example-walkthroughs.md)

# 複寫組態檔案元素
<a name="replication-add-config"></a>

Amazon S3 會以 XML 的形式存放複寫組態。如果您透過 Amazon S3 REST API，以程式設計方式設定複寫，您可以在此 XML 檔案中指定複寫組態的各種元素。如果您透過 AWS Command Line Interface (AWS CLI) 設定複寫，您可以使用 JSON 格式指定複寫組態。如需 JSON 範例，請參閱[設定即時複寫的範例](replication-example-walkthroughs.md)中的逐步解說。

**注意**  
複寫組態 XML 格式的最新版本為 V2。XML V2 複寫組態是指包含規則 `<Filter>` 元素和指定 S3 複寫時間控制 (S3 RTC) 規則的組態。  
若要查看您的複寫組態版本，您可以使用 `GetBucketReplication` API 操作。如需詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html)。  
為提供回溯相容性，Amazon S3 會繼續支援 XML V1 複寫組態格式。如果您已使用 XML V1 複寫組態格式，請參閱[回溯相容性考量](#replication-backward-compat-considerations)以了解回溯相容性考量。

在複寫組態 XML 檔案中，您必須指定 AWS Identity and Access Management (IAM) 角色和一或多個規則，如下列範例所示：

```
<ReplicationConfiguration>
    <Role>IAM-role-ARN</Role>
    <Rule>
        ...
    </Rule>
    <Rule>
         ... 
    </Rule>
     ...
</ReplicationConfiguration>
```

Amazon S3 必須先獲得您的許可，才可以複寫物件。您可以使用複寫組態中指定的 IAM 角色來為 Amazon S3 授予許可。Amazon S3 會擔任此 IAM 角色以代您複寫物件。您必須先將所需的許可授予 IAM 角色。如需如何管理許可的詳細資訊，請參閱 [設定即時複寫的許可](setting-repl-config-perm-overview.md)。

針對下列情況，您只會在複寫組態中新增一個規則：
+ 您想要複寫所有物件。
+ 您想要只複寫一個物件子集。您在規則中新增篩選條件，以識別物件子集。您可以在篩選條件中指定物件金鑰前綴、標籤，或這兩項的組合，以識別要套用規則的物件子集。篩選條件的目標是確切符合您指定值的物件。

若您想複寫不同的物件子集，請在複寫組態中新增多項規則。在每個規則中，您可以指定篩選條件以選取不同的子集。例如，您可以選擇複寫含有 `tax/` 或 `document/` 索引鍵字首的物件。要做到這一點，您需要新增兩個規則，一個指定 `tax/` 索引鍵字首篩選條件，另一個指定 `document/` 索引鍵字首。如需物件金鑰字首的詳細資訊，請參閱[使用字首整理物件](using-prefixes.md)。

下列各節提供了額外的資訊。

**Topics**
+ [基本規則組態](#replication-config-min-rule-config)
+ [選用：指定篩選條件](#replication-config-optional-filter)
+ [其他目標組態](#replication-config-optional-dest-config)
+ [範例複寫組態](#replication-config-example-configs)
+ [回溯相容性考量](#replication-backward-compat-considerations)

## 基本規則組態
<a name="replication-config-min-rule-config"></a>

每個規則都必須包括規則的狀態和優先順序。規則還必須指示是否複寫刪除標記。
+ `<Status>` 元素會指出是使用 `Enabled` 還是 `Disabled` 值來啟用或停用規則。當規則停用時，Amazon S3 即不會執行規則中指定的動作。
+ `<Priority>` 元素會指出當兩個或多個複寫規則發生衝突時，哪些規則具有優先權。Amazon S3 會嘗試根據所有複寫規則來複寫物件。不過，如果有兩個或多個規則具有相同目的地儲存貯體，則會根據具有最高優先順序的規則來複寫物件。數字愈高，優先順序愈高。
+ `<DeleteMarkerReplication>` 元素會使用 `Enabled` 或 `Disabled` 值，指示是否複寫刪除標記。

在 `<Destination>` 元素組態中，您必須提供目的地儲存貯體名稱，或希望 Amazon S3 複寫其中物件的儲存貯體。

以下範例顯示 V2 規則所需的最低需求。為了回溯相容性，Amazon S3 繼續支援 XML V1 格式。如需詳細資訊，請參閱[回溯相容性考量](#replication-backward-compat-considerations)。

```
...
    <Rule>
        <ID>Rule-1</ID>
        <Status>Enabled-or-Disabled</Status>
        <Filter>
            <Prefix></Prefix>   
        </Filter>
        <Priority>integer</Priority>
        <DeleteMarkerReplication>
           <Status>Enabled-or-Disabled</Status>
        </DeleteMarkerReplication>
        <Destination>        
           <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket> 
        </Destination>    
    </Rule>
    <Rule>
         ...
    </Rule>
     ...
...
```

您也可以指定其他組態選項。例如，若物件複本的儲存體方案與來源物件的方案不同，您可以選擇為物件複本使用儲存體方案。

## 選用：指定篩選條件
<a name="replication-config-optional-filter"></a>

若要選擇物件子集以套用規則，請新增選用的篩選條件。您可以依物件索引鍵字首、物件標籤或兩者的組合來進行篩選。如果您依索引鍵字首和物件標籤兩者來篩選，Amazon S3 會使用邏輯 `AND` 運算子來合併篩選條件。換句話說，規則會套用到具有特定金鑰前綴與特定標籤的物件子集。

**根據物件金鑰前綴進行篩選**  
若要指定含物件金鑰字首篩選條件的規則，請使用下列 XML。您只能為每項規則指定一個字首。

```
<Rule>
    ...
    <Filter>
        <Prefix>key-prefix</Prefix>   
    </Filter>
    ...
</Rule>
...
```

**根據物件標籤篩選**  
若要指定含物件標籤篩選條件的規則，請使用下列 XML。您可以指定一或多個物件標籤。

```
<Rule>
    ...
    <Filter>
        <And>
            <Tag>
                <Key>key1</Key>
                <Value>value1</Value>
            </Tag>
            <Tag>
                <Key>key2</Key>
                <Value>value2</Value>
            </Tag>
             ...
        </And>
    </Filter>
    ...
</Rule>
...
```

**使用金鑰前綴和物件標籤篩選**  
若要指定含物件金鑰字首和物件標籤組合的規則篩選條件，請使用下列 XML。您可以將這些篩選條件包裝在 `<And>` 父元素中。Amazon S3 會執行邏輯 `AND` 操作來結合這些篩選條件。換句話說，規則會套用到具有特定金鑰前綴與特定標籤的物件子集。

```
<Rule>
    ...
    <Filter>
        <And>
            <Prefix>key-prefix</Prefix>
            <Tag>
                <Key>key1</Key>
                <Value>value1</Value>
            </Tag>
            <Tag>
                <Key>key2</Key>
                <Value>value2</Value>
            </Tag>
             ...
    </Filter>
    ...
</Rule>
...
```

**注意**  
如果您指定具有空白 `<Filter>` 元素的規則，規則將套用至儲存貯體中的所有物件。
當您使用標籤型複寫規則搭配即時複寫時，新物件必須在 `PutObject` 操作中以相符的複寫規則標籤進行標記。否則，系統不會複寫物件。如果在 `PutObject` 操作之後為物件加上標籤，則系統也不會複寫這些物件。  
若要複寫在 `PutObject` 操作之後標記的物件，您必須使用 S3 批次複寫。如需批次複寫的詳細資訊，請參閱 [複寫現有物件](s3-batch-replication-batch.md)。

## 其他目標組態
<a name="replication-config-optional-dest-config"></a>

在目的地組態中，您可以指定希望 Amazon S3 複寫其中物件的儲存貯體。您可以設定組態以將一個來源儲存貯體中的物件複寫至一個或多個目的地儲存貯體。

```
...
<Destination>        
    <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
</Destination>
...
```

您可以在 `<Destination>` 元素中新增下列選項。

**Topics**
+ [指定儲存類別](#storage-class-configuration)
+ [新增多個目的地儲存貯體](#multiple-destination-buckets-configuration)
+ [為具有多個目的地儲存貯體的每個複寫規則指定不同的參數](#replication-rule-configuration)
+ [變更複本擁有權](#replica-ownership-configuration)
+ [啟用 S3 複寫時間控制](#rtc-configuration)
+ [使用 複寫使用伺服器端加密建立的物件 AWS KMS](#sse-kms-configuration)

### 指定儲存類別
<a name="storage-class-configuration"></a>

您可以為物件複本指定儲存體方案。根據預設，Amazon S3 會使用來源物件的儲存體方案來建立物件複本，如下列範例所示。

```
...
<Destination>
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
       <StorageClass>storage-class</StorageClass>
</Destination>
...
```

### 新增多個目的地儲存貯體
<a name="multiple-destination-buckets-configuration"></a>

您可以在單一複寫組態中新增多個目的地儲存貯體，如下所示。

```
...
<Rule>
    <ID>Rule-1</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Enabled-or-Disabled</Status>
    </DeleteMarkerReplication>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket1</Bucket> 
    </Destination>    
</Rule>
<Rule>
    <ID>Rule-2</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Enabled-or-Disabled</Status>
    </DeleteMarkerReplication>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket2</Bucket> 
    </Destination>    
</Rule>
...
```

### 為具有多個目的地儲存貯體的每個複寫規則指定不同的參數
<a name="replication-rule-configuration"></a>

在單一複寫組態中新增多個目的地儲存貯體時，您可以為每個複寫規則指定不同的參數，如下所示。

```
...
<Rule>
    <ID>Rule-1</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Disabled</Status>
    </DeleteMarkerReplication>
      <Metrics>
    <Status>Enabled</Status>
    <EventThreshold>
      <Minutes>15</Minutes> 
    </EventThreshold>
  </Metrics>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket1</Bucket> 
    </Destination>    
</Rule>
<Rule>
    <ID>Rule-2</ID>
    <Status>Enabled-or-Disabled</Status>
    <Priority>integer</Priority>
    <DeleteMarkerReplication>
       <Status>Enabled</Status>
    </DeleteMarkerReplication>
      <Metrics>
    <Status>Enabled</Status>
    <EventThreshold>
      <Minutes>15</Minutes> 
    </EventThreshold>
  </Metrics>
  <ReplicationTime>
    <Status>Enabled</Status>
    <Time>
      <Minutes>15</Minutes>
    </Time>
  </ReplicationTime>
    <Destination>        
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket2</Bucket> 
    </Destination>    
</Rule>
...
```

### 變更複本擁有權
<a name="replica-ownership-configuration"></a>

當來源和目的地儲存貯體不是由相同的帳戶擁有時，您可以將複本的擁有權變更為 AWS 帳戶 擁有目的地儲存貯體的 。要做到這一點，請新增 `<AccessControlTranslation>` 元素。此元素採用 `Destination` 的值。

```
...
<Destination>
   <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
   <Account>destination-bucket-owner-account-id</Account>
   <AccessControlTranslation>
       <Owner>Destination</Owner>
   </AccessControlTranslation>
</Destination>
...
```

如果您未將 `<AccessControlTranslation>`元素新增至複寫組態，複本會由擁有來源物件的相同 AWS 帳戶 所擁有。如需詳細資訊，請參閱[變更複本擁有者](replication-change-owner.md)。

### 啟用 S3 複寫時間控制
<a name="rtc-configuration"></a>

您可以在複寫組態中啟用 S3 複寫時間控制 (S3 RTC)。S3 RTC 會在數秒內複寫多數物件，以及在 15 分鐘內複寫 99.99% 的物件 (由服務水準協議支援)。

**注意**  
`<EventThreshold>` 與 `<Time>` 元素可接受的唯一一個有效值為 `<Minutes>15</Minutes>`。

```
...
<Destination>
  <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
  <Metrics>
    <Status>Enabled</Status>
    <EventThreshold>
      <Minutes>15</Minutes> 
    </EventThreshold>
  </Metrics>
  <ReplicationTime>
    <Status>Enabled</Status>
    <Time>
      <Minutes>15</Minutes>
    </Time>
  </ReplicationTime>
</Destination>
...
```

如需詳細資訊，請參閱[使用 S3 複寫時間控制來滿足合規要求](replication-time-control.md)。如需 API 範例，請參閱 Amazon Simple Storage Service API 參考**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketReplication.html)。

### 使用 複寫使用伺服器端加密建立的物件 AWS KMS
<a name="sse-kms-configuration"></a>

您的來源儲存貯體可能包含使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 以伺服器端加密建立的物件。依預設，Amazon S3 不會複寫這些物件。您可以選擇性地指示 Amazon S3 複寫這些物件。要做到這一點，請先新增 `<SourceSelectionCriteria>` 元素，明確選擇使用此功能。然後提供用於加密物件複本的 AWS KMS key （適用於目的地儲存貯體 AWS 區域 的 )。下列範例顯示如何指定這些元素。

```
...
<SourceSelectionCriteria>
  <SseKmsEncryptedObjects>
    <Status>Enabled</Status>
  </SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
  <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
  <EncryptionConfiguration>
    <ReplicaKmsKeyID>AWS KMS key ID to use for encrypting object replicas</ReplicaKmsKeyID>
  </EncryptionConfiguration>
</Destination>
...
```

如需詳細資訊，請參閱[複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)](replication-config-for-kms-objects.md)。

## 範例複寫組態
<a name="replication-config-example-configs"></a>

若要開始使用，您可以視需要將下列範例複寫組態新增至您的儲存貯體。

**重要**  
若要將複寫組態新增至儲存貯體，您必須具有 `iam:PassRole` 許可。這項許可允許您傳遞授予 Amazon S3 複寫許可的 IAM 角色。您可以提供 Amazon Resource Name (ARN) 以指定 IAM 角色，其用於複寫組態 XML 中的 `<Role>` 元素。如需詳細資訊，請參閱 *IAM 使用者指南*中[授予使用者將角色傳遞至 AWS 服務的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

**Example 1：具有一項規則的複寫組態**  
下列基本複寫組態可指定一個規則。此規則可指定 Amazon S3 可擔任的 IAM 角色，以及物件複本的單一目的地儲存貯體。`<Status>` 元素為 `Enabled` 值表示規則處於作用中。  

```
<?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>
    <Status>Enabled</Status>

    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```
若要選擇物件子集以供複寫，您可以新增篩選條件。在下列組態中，篩選條件指定了一個物件金鑰前綴。此規則會套用至金鑰名稱前綴為 `Tax/` 的物件。  

```
<?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>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>

    <Filter>
       <Prefix>Tax/</Prefix>
    </Filter>

    <Destination>
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>

  </Rule>
</ReplicationConfiguration>
```
如果您指定 `<Filter>` 元素，則必須也包含 `<Priority>` 與 `<DeleteMarkerReplication>` 元素。在此範例中，因為只有一個規則，所以您為 `<Priority>` 元素設定的值不相關。  
在下列組態中，篩選條件指定了一個前綴和兩個標籤。此規則會套用至具有指定之金鑰前綴和標籤的物件子集。具體來說，其會套用至具有 `Tax/` 金鑰名稱前綴和兩個指定物件標籤的物件。在此範例中，因為只有一個規則，所以您為 `<Priority>` 元素設定的值不相關。  

```
<?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>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>

    <Filter>
        <And>
          <Prefix>Tax/</Prefix>
          <Tag>
             <Tag>
                <Key>tagA</Key>
                <Value>valueA</Value>
             </Tag>
          </Tag>
          <Tag>
             <Tag>
                <Key>tagB</Key>
                <Value>valueB</Value>
             </Tag>
          </Tag>
       </And>

    </Filter>

    <Destination>
        <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>

  </Rule>
</ReplicationConfiguration>
```
您可以指定物件複本的儲存類別，如下所示。  

```
<?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>
    <Status>Enabled</Status>
    <Destination>
       <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
       <StorageClass>storage-class</StorageClass>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```
您可以指定 Amazon S3 支援的任何儲存體方案。

**Example 2：具有兩項規則的複寫組態**  

**Example**  
在下列複寫組態中，規則會指定下列項目：  
+ 每個規則會篩選不同的金鑰前綴，每個規則會套用至不同的物件子集。在此例中，Amazon S3 會複寫金鑰名稱為 *`Tax/doc1.pdf`* 和 *`Project/project1.txt`* 的物件，但不會複寫金鑰名稱為 *`PersonalDoc/documentA`* 的物件。
+ 雖然這兩個規則都會指定 `<Priority>` 元素的值，但因為規則會套用至兩組不同的物件，所以規則優先順序無關緊要。下一個範例說明套用規則優先順序時會發生的情況。
+ 第二個規則指定物件複本的 S3 標準 – IA 儲存體方案。Amazon S3 會針對那些物件複本使用指定的儲存體方案。
   

```
<?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>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>Tax</Prefix>
    </Filter>
    <Status>Enabled</Status>
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
     ...
  </Rule>
 <Rule>
    <Status>Enabled</Status>
    <Priority>2</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>Project</Prefix>
    </Filter>
    <Status>Enabled</Status>
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
     <StorageClass>STANDARD_IA</StorageClass>
    </Destination>
     ...
  </Rule>


</ReplicationConfiguration>
```

**Example 3：具有兩項前綴重疊之規則的複寫組態**  <a name="overlap-rule-example"></a>
在此組態中，有兩項規則指定了含 *`star`* 和 *`starship`* 重疊索引鍵字首的篩選條件。這兩個規則都會套用到金鑰名稱為 *`starship-x`* 的物件。在此情況下，Amazon S3 會使用規則優先順序來判斷要套用哪一個規則。數字愈高，優先順序愈高。  

```
<ReplicationConfiguration>

  <Role>arn:aws:iam::account-id:role/role-name</Role>

  <Rule>
    <Status>Enabled</Status>
    <Priority>1</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>star</Prefix>
    </Filter>
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
  </Rule>
  <Rule>
    <Status>Enabled</Status>
    <Priority>2</Priority>
    <DeleteMarkerReplication>
       <Status>string</Status>
    </DeleteMarkerReplication>
    <Filter>
        <Prefix>starship</Prefix>
    </Filter>    
    <Destination>
      <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
    </Destination>
  </Rule>
</ReplicationConfiguration>
```

**Example 4：範例演練**  
如需範例逐步解說，請參閱 [設定即時複寫的範例](replication-example-walkthroughs.md)。

如需有關複寫組態 XML 結構的詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [PutBucketReplication](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTreplication.html)。

## 回溯相容性考量
<a name="replication-backward-compat-considerations"></a>

複寫組態 XML 格式的最新版本為 V2。XML V2 複寫組態是指包含規則 `<Filter>` 元素和指定 S3 複寫時間控制 (S3 RTC) 規則的組態。

若要查看您的複寫組態版本，您可以使用 `GetBucketReplication` API 操作。如需詳細資訊，請參閱《Amazon Simple Storage Service API 參考》**中的 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketReplication.html)。

為提供回溯相容性，Amazon S3 會繼續支援 XML V1 複寫組態格式。如果您已使用 XML V1 複寫組態，請注意以下會影響回溯相容性的問題：
+ 複寫組態 XML V2 格式包含規則的 `<Filter>` 元素。使用 `<Filter>` 元素時，您可以依物件金鑰前綴、標籤，或這兩項的組合，指定物件篩選條件，以限定要套用規則的物件範圍。複寫組態 XML V1 格式支援僅根據金鑰前綴來進行篩選。在這個情況下，您會新增 `<Prefix>` 元素，並將其直接作為 `<Rule>` 元素的子元素，如下列範例所示：

  ```
  <?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>
      <Status>Enabled</Status>
      <Prefix>key-prefix</Prefix>
      <Destination>
         <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket>
      </Destination>
  
    </Rule>
  </ReplicationConfiguration>
  ```
+ 當您從來源儲存貯體刪除未指定版本 ID 的物件，Amazon S3 會在此物件上新增刪除標記。如果您使用複寫組態 XML V1 格式，Amazon S3 只會複寫由使用者動作產生的刪除標記。換言之，Amazon S3 僅在使用者刪除物件時才會複寫刪除標記。如果 Amazon S3 移除了過期的物件 (在生命週期操作期間)，Amazon S3 不會複寫刪除標記。

  在複寫組態 XML V2 格式中，您可以針對非標籤型規則啟用刪除標記複寫。如需詳細資訊，請參閱[複寫儲存貯體之間的刪除標記](delete-marker-replication.md)。

 

# 設定即時複寫的許可
<a name="setting-repl-config-perm-overview"></a>

設定 Amazon S3 中的即時複寫時，您必須用以下方式取得必要的許可：
+ 您必須授予建立複寫規則的 AWS Identity and Access Management (IAM) 委託人 （使用者或角色） 一組特定許可。
+ Amazon S3 需要許可，才能代您複寫物件。您可建立 IAM 角色並在您的複寫組態中指定此角色以授予這些許可。
+ 當來源與目的地儲存貯體的擁有者是不同的帳戶時，目的地儲存貯體的擁有者也必須將存放複本的許可授予來源儲存貯體擁有者。

**注意**  
如果您使用 S3 Batch Operations 隨需複寫物件，而不是設定即時複寫，S3 批次複寫需要不同的 IAM 角色和政策。如需批次複寫 IAM 角色和政策範例，請參閱[設定 S3 批次複寫的 IAM 角色](s3-batch-replication-policies.md)。

**Topics**
+ [步驟 1：將許可權授予建立複寫規則的 IAM 主體](#setting-repl-config-role)
+ [步驟 2：為 Amazon S3 建立要擔任的 IAM 角色](#setting-repl-config-same-acctowner)
+ [（選用） 步驟 3：在來源和目的地儲存貯體由不同 擁有時授予許可 AWS 帳戶](#setting-repl-config-crossacct)
+ [(選用) 步驟 4：授予變更複本擁有權的許可](#change-replica-ownership)

## 步驟 1：將許可權授予建立複寫規則的 IAM 主體
<a name="setting-repl-config-role"></a>

您將用來建立複寫規則的 IAM 使用者或角色需要許可權，才能為單向或雙向複寫建立複寫規則。如果使用者或角色沒有這些許可權，您將無法建立複寫規則。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 識別碼](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)。

使用者或角色需要下列動作：
+ `iam:AttachRolePolicy`
+ `iam:CreatePolicy`
+ `iam:CreateServiceLinkedRole`
+ `iam:PassRole`
+ `iam:PutRolePolicy`
+ `s3:GetBucketVersioning`
+ `s3:GetObjectVersionAcl`
+ `s3:GetObjectVersionForReplication`
+ `s3:GetReplicationConfiguration`
+ `s3:PutReplicationConfiguration`

以下是包含這些動作的範例 IAM 政策。

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

****  

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

------

## 步驟 2：為 Amazon S3 建立要擔任的 IAM 角色
<a name="setting-repl-config-same-acctowner"></a>



根據預設，所有 Amazon S3 資源 (儲存貯體、物件與相關子資源) 皆為私有，且只有資源擁有者才可存取該資源。Amazon S3 需要從來源儲存貯體讀取和複寫物件的許可。您可建立 IAM 角色並在您的複寫組態中指定該角色，以授予這些許可。

本節說明附加至此 IAM 角色的信任政策與最低必要許可政策。這些範例演練提供建立 IAM 角色的逐步說明。如需詳細資訊，請參閱[設定即時複寫的範例](replication-example-walkthroughs.md)。

**注意**  
如果您使用主控台建立複寫組態，建議您略過本節，改為讓主控台為您建立此 IAM 角色和必要的信任和許可政策。

*信任政策*會識別哪些主體身分可以擔任 IAM 角色。*許可政策*會指定 IAM 角色可以在哪些條件下對哪些資源執行的動作。
+ 下列範例顯示*信任政策*，其中您將 Amazon S3 識別為可擔任該角色的 AWS 服務 委託人：

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

****  

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

------
+ 以下範例顯示*信任政策*，您可以在其中將 Amazon S3 和 S3 批次操作識別為可擔任該角色的服務主體。如果您要建立批次複寫任務，請使用此操作。如需詳細資訊，請參閱[為新複寫規則或目的地建立批次複寫任務](s3-batch-replication-new-config.md)。

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

****  

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

------

  如需 IAM 角色的詳細資訊，請參閱 *IAM 使用者指南*中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。
+ 下列範例顯示*許可政策*，您可以在其中授予 IAM 角色許可來代您執行複寫作業。當 Amazon S3 擔任該角色時，即具備您在此政策中指定的許可。在這項政策中，`amzn-s3-demo-source-bucket` 是來源儲存貯體，`amzn-s3-demo-destination-bucket` 是目的地儲存貯體。

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

****  

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

------

  許可政策會授予執行下列動作的許可：
  +  `s3:GetReplicationConfiguration` 和 `s3:ListBucket` – 針對 `amzn-s3-demo-source-bucket` 儲存貯體的這些動作的許可，允許 Amazon S3 擷取複寫組態並列出儲存貯體內容。(目前的許可模型需要 `s3:ListBucket` 許可以存取刪除標記。)
  + `s3:GetObjectVersionForReplication` 與 `s3:GetObjectVersionAcl` – 所有物件上授予的這些動作許可，其允許 Amazon S3 取得特定物件版本以及與物件相關聯的存取控制清單 (ACL)。

    
  + `s3:ReplicateObject` 與 `s3:ReplicateDelete` – `amzn-s3-demo-destination-bucket` 儲存貯體的所有物件上這些動作的許可，其允許 Amazon S3 將物件或刪除標記複寫至目的地儲存貯體。如需刪除標記的資訊，請參閱 [刪除操作對複寫的影響](replication-what-is-isnot-replicated.md#replication-delete-op)。
**注意**  
`amzn-s3-demo-destination-bucket` 儲存貯體上 `s3:ReplicateObject` 動作的許可也允許複寫物件標籤和 ACL 等中繼資料。因此，您不需要明確授予 `s3:ReplicateTags` 動作的許可。
  + `s3:GetObjectVersionTagging` – 針對 `amzn-s3-demo-source-bucket` 儲存貯體內物件之這項動作的許可，可讓 Amazon S3 讀取要複寫的物件標籤。如需物件標籤的詳細資訊，請參閱 [使用標籤為物件分類](object-tagging.md)。如果 Amazon S3 不具備 `s3:GetObjectVersionTagging` 許可，則會複寫物件，但不會複寫物件標籤。

  如需 Amazon S3 動作清單，請參閱服務授權參考**中的[適用於 Amazon S3 的動作、資源和條件金鑰](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html#list_amazons3-actions-as-permissions)。

  如需依 S3 資源類型列出 S3 API 操作許可的詳細資訊，請參閱[Amazon S3 API 操作所需的許可](using-with-s3-policy-actions.md)。
**重要**  
 AWS 帳戶 擁有 IAM 角色的 必須具有授予 IAM 角色之動作的許可。  
例如，假設來源儲存貯體包含另一個 AWS 帳戶所擁有的物件。物件的擁有者必須透過物件的存取控制清單 (ACLs)，明確授予 AWS 帳戶 擁有 IAM 角色的必要許可。否則，Amazon S3 就無法存取這些物件，而導致物件的複寫失敗。如需 ACL 許可的資訊，請參閱「[存取控制清單 (ACL) 概觀](acl-overview.md)」。  
  
此處描述的許可與基本複寫組態相關。如果您選擇新增額外的複寫組態，則必須將額外許可權授予 Amazon S3。  
若要複寫加密物件，您也需要授予必要的 AWS Key Management Service (AWS KMS) 金鑰許可。如需詳細資訊，請參閱[複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)](replication-config-for-kms-objects.md)。
若要搭配複寫使用物件鎖定，您必須在用於設定複寫的 AWS Identity and Access Management (IAM) 角色中授予來源 S3 儲存貯體的兩個額外許可。這兩項額外的許可為 `s3:GetObjectRetention` 和 `s3:GetObjectLegalHold`。若該角色有 `s3:Get*` 許可陳述式，該陳述式即符合需求。如需詳細資訊，請參閱[搭配 S3 複寫使用物件鎖定](object-lock-managing.md#object-lock-managing-replication)。

## （選用） 步驟 3：在來源和目的地儲存貯體由不同 擁有時授予許可 AWS 帳戶
<a name="setting-repl-config-crossacct"></a>

當來源與目的地儲存貯體的擁有者是不同的帳戶時，目的地儲存貯體的擁有者也必須新增儲存貯體政策，以將執行複寫動作的許可授予來源儲存貯體擁有者，如下列範例所示。在此政策範例中，`amzn-s3-demo-destination-bucket` 是目的地儲存貯體。

您也可以使用 Amazon S3 主控台自動為您產生此儲存貯體政策。如需詳細資訊，請參閱[允許從來源儲存貯體接收所複寫物件](#receiving-replicated-objects)。

**注意**  
角色的 ARN 格式出現時可能會有所不同。如果使用主控台建立角色，ARN 格式為 `arn:aws:iam::account-ID:role/service-role/role-name`。如果角色是使用 建立的 AWS CLI，則 ARN 格式為 `arn:aws:iam::account-ID:role/role-name`。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html)。

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

****  

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

------

如需範例，請參閱 [設定不同帳戶內的儲存貯體複寫](replication-walkthrough-2.md)。

如果來源儲存貯體中的物件已標記，請注意下列情況：
+ 如果來源儲存貯體擁有者將 `s3:GetObjectVersionTagging` 與 `s3:ReplicateTags` 動作的許可授予 Amazon S3 來複寫物件標籤 (透過 IAM 角色)，Amazon S3 會連同物件一起複寫標籤。如需 IAM 角色的資訊，請參閱 [步驟 2：為 Amazon S3 建立要擔任的 IAM 角色](#setting-repl-config-same-acctowner)。
+ 如果目的地儲存貯體擁有者不想要複寫標籤，擁有者可以將下列陳述式新增至目的地儲存貯體政策，以明確拒絕 `s3:ReplicateTags` 動作的許可。在此政策中，`amzn-s3-demo-destination-bucket` 是目的地儲存貯體。

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

**注意**  
如果您想要複寫加密的物件，您還必須授予必要的 AWS Key Management Service (AWS KMS) 金鑰許可。如需詳細資訊，請參閱[複寫加密的物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)](replication-config-for-kms-objects.md)。
若要搭配複寫使用物件鎖定，您必須在用於設定複寫的 AWS Identity and Access Management (IAM) 角色中授予來源 S3 儲存貯體的兩個額外許可。這兩項額外的許可為 `s3:GetObjectRetention` 和 `s3:GetObjectLegalHold`。若該角色有 `s3:Get*` 許可陳述式，該陳述式即符合需求。如需詳細資訊，請參閱[搭配 S3 複寫使用物件鎖定](object-lock-managing.md#object-lock-managing-replication)。

**允許從來源儲存貯體接收複寫的物件**  
您可以快速產生所需的政策，以透過 Amazon S3 主控台從來源儲存貯體接收複寫物件，而不是手動將上述政策新增至目的地儲存貯體。

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

1. 在左側導覽窗格中，選擇 **Buckets** (儲存貯體)。

1. 在 **Buckets (儲存貯體)** 清單中，選擇您要作為目的地儲存貯體的儲存貯體。

1. 選擇 **Management (管理)** 標籤，然後向下捲動至 **Replication rules (複寫規則)**。

1. 針對 **Actions (動作)**，選擇 **Receive replicated objects (接收複寫物件)**。

   遵循提示並輸入來源儲存貯體帳戶的 AWS 帳戶 ID，然後選擇**產生政策**。主控台隨即產生 Amazon S3 儲存貯體政策和 KMS 金鑰政策。

1. 若要將此政策新增到現有儲存貯體政策，請選擇 **Apply settings (套用設定)**，或選擇 **Copy (複製)** 手動複製變更。

1. （選用） 在主控台中將 AWS KMS 政策複製到您想要的 AWS Key Management Service KMS 金鑰政策。

## (選用) 步驟 4：授予變更複本擁有權的許可
<a name="change-replica-ownership"></a>

當不同的 AWS 帳戶 擁有來源和目的地儲存貯體時，您可以指示 Amazon S3 將複本的擁有權變更為 AWS 帳戶 擁有目的地儲存貯體的 。若要覆寫複本的擁有權，您必須授予一些額外的許可，或調整目的地儲存貯體的 S3 物件擁有權設定。如需擁有者覆寫的詳細資訊，請參閱 [變更複本擁有者](replication-change-owner.md)。

# 設定即時複寫的範例
<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)。