

# 针对不同账户中的存储桶配置复制
<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 用户指南》**中的 [Configuration and credential file settings](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

1. 按照 [针对同一账户中的存储桶配置复制](replication-walkthrough1.md) 中的分步说明操作，进行以下更改：
   + 对于与源存储桶活动相关的所有 AWS CLI 命令（例如，创建源存储桶、启用版本控制和创建 IAM 角色），请使用 `acctA` 配置文件。使用 `acctB` 配置文件创建目标存储桶。
   + 确保 IAM 角色的权限策略指定您为此示例创建的源存储桶和目标存储桶。

1. 在控制台中，在目标存储存储桶上添加以下存储桶策略，以允许源存储存储桶的拥有者复制对象。有关说明，请参阅[使用 Amazon S3 控制台添加存储桶策略](add-bucket-policy.md)。请务必编辑该策略，即提供源存储桶拥有者的 AWS 账户 ID、IAM 角色名称和目标存储桶名称。
**注意**  
要使用以下示例，请将 `user input placeholders` 替换为您自己的信息。将 `amzn-s3-demo-destination-bucket` 替换为目标存储桶名称。将 IAM Amazon 资源名称（ARN）中的 `source-bucket-account-ID:role/service-role/source-account-IAM-role` 替换为您用于此复制配置的 IAM 角色。  
如果您手动创建了 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)。