Amazon Simple Storage Service
开发人员指南 (API 版本 2006-03-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon S3 批量操作的跨账户复制示例

您可以使用 Amazon S3 批处理操作创建 PUT 复制作业以将对象复制到不同的 AWS 账户(目标账户)。执行此操作时,您可以使用 Amazon S3 清单将清单报告传输到目标账户以在作业创建期间使用,或者可以在源或目标账户中使用逗号分隔值 (CSV) 清单。以下部分说明如何存储和使用位于不同的 AWS 账户中的清单。

使用传输到目标 AWS 账户的清单报告

Amazon S3 清单生成存储桶中的对象的清单。生成的列表将发布到输出文件。进行清点的存储桶称为源存储桶,其中存储清单报告文件的存储桶称为目标存储桶。Amazon S3 清单报告可配置为将清单报告传输到其他 AWS 账户。这将在目标 AWS 账户中创建作业时允许 Amazon S3 批处理操作读取清单报告。有关 Amazon S3 清单源存储桶和目标存储桶的更多信息,请参阅我如何设置 Amazon S3 清单?

设置清单的最简单方法是使用 AWS 管理控制台,不过您也可以使用 REST API、AWS CLI 或 AWS 开发工具包。

在以下控制台过程中,您可为 Amazon S3 批处理操作作业设置权限以将对象从源账户复制到目标账户,同时清单报告存储在目标 AWS 账户中。

为由不同 AWS 账户的源存储桶和目标存储桶设置 Amazon S3 清单

  1. 选择要将清单报告存储在其中的目标存储桶。

    确定用于存储清单报告的目标清单存储桶。在此过程中,目标账户 是同时拥有目标清单存储桶和对象要复制到的存储桶的账户。

  2. 配置一个清单以列出源存储桶中的对象并将该列表发布到目标清单存储桶。

    为源存储桶配置清单列表。执行此操作时,指定要将该列表存储在其中的目标存储桶。源存储桶的清单报告将发布到目标存储桶。在此过程中,源账户 是拥有源存储桶的账户。

    有关如何使用控制台配置清单的信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的如何配置 Amazon S3 清单?

    为输出格式选择 CSV

    输入目标存储桶的信息时,请选择 Buckets in another account (另一个账户中的存储桶)。然后,输入目标清单存储桶的名称。或者,可以输入目标账户的账户 ID。

    在保存清单配置后,控制台会显示类似于以下内容的一条消息:

    Amazon S3 无法在目标存储桶上创建存储桶策略。要求目标存储桶拥有者添加以下存储桶策略,以允许 Amazon S3 在该存储桶中放置数据。

    然后,控制台会显示可用于目标存储桶的存储桶策略。

  3. 复制显示在控制台上的目标存储桶策略。

  4. 在目标账户中,将复制的存储桶策略添加到存储清单报告所在的目标清单存储桶。

  5. 在目标账户中创建一个基于 Amazon S3 批处理操作 信任策略的角色。有关信任策略的更多信息,请参阅信任策略。有关创建角色的更多信息,请参阅 IAM 用户指南 中的创建将权限委派给 AWS 服务的角色

    输入角色的名称(示例角色使用名称 BatchOperationsDestinationRoleCOPY)。选择 S3 服务,然后选择 S3 bucket Batch Operations (S3 存储桶批量操作) 使用案例,这会将信任策略应用于该角色。

    然后选择 Create policy (创建策略) 以将以下策略附加到该角色。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsDestinationObjectCOPY", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectVersionAcl", "s3:PutObjectAcl", "s3:PutObjectVersionTagging", "s3:PutObjectTagging", "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::ObjectDestinationBucket*/*", "arn:aws:s3:::ObjectSourceBucket/*", "arn:aws:s3:::ObjectDestinationManifestBucket/*" ] } ] }

    该角色使用策略授予 batchoperations.s3.amazonaws.com 权限来读取目标存储桶中的清单。它还授予对源对象存储桶中的 GET 对象、访问控制列表 (ACL)、标签和版本的权限。此外,还授予对目标对象存储桶中的 PUT 对象、ACL、标签和版本的权限。

  6. 在源账户中,为源存储桶创建一个存储桶策略,该策略向您在上一步中创建的角色授予源存储桶中的 GET 对象、ACL、标签和版本的权限。此步骤允许 Amazon S3 批处理操作通过可信角色获取源存储桶中的对象。

    以下是源账户的存储桶策略的示例。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsSourceObjectCOPY", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::DestinationAccountNumber:role/BatchOperationsDestinationRoleCOPY" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": "arn:aws:s3:::ObjectSourceBucket/*" } ] }
  7. 在清单报告可用后,在目标账户中创建一个 Amazon S3 批处理操作 PUT 对象复制作业,同时从目标清单存储桶中选择清单报告。您需要在目标账户中创建的角色的 ARN。

    有关创建作业的一般信息,请参阅创建 Amazon S3 批量操作作业。有关使用控制台创建作业的信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的创建 Amazon S3 批量操作作业

使用存储在源 AWS 账户中的 CSV 清单

您可以使用存储在不同 AWS 账户中的 CSV 文件作为 Amazon S3 批处理操作作业的清单。

以下过程显示如何在使用 Amazon S3 批处理操作作业通过存储在源账户中的 CSV 清单文件将对象从源账户复制到目标账户时设置权限。

设置存储在不同 AWS 账户中的 CSV 清单

  1. 在目标账户中创建一个基于 Amazon S3 批处理操作 信任策略的角色。在此过程中,目标账户 是对象要复制到的账户。

    有关信任策略的更多信息,请参阅信任策略。有关创建角色的更多信息,请参阅 IAM 用户指南 中的创建将权限委派给 AWS 服务的角色

    如果您使用控制台创建角色,请输入角色的名称(示例角色使用名称 BatchOperationsDestinationRoleCOPY)。选择 S3 服务,然后选择 S3 bucket Batch Operations (S3 存储桶批量操作) 使用案例,这会将信任策略应用于该角色。然后选择 Create policy (创建策略) 以将以下策略附加到该角色。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsDestinationObjectCOPY", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectVersionAcl", "s3:PutObjectAcl", "s3:PutObjectVersionTagging", "s3:PutObjectTagging", "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": [ "arn:aws:s3:::ObjectDestinationBucket*/*", "arn:aws:s3:::ObjectSourceBucket/*", "arn:aws:s3:::ObjectSourceManifestBucket/*" ] } ] }

    使用策略,该角色将授予 batchoperations.s3.amazonaws.com 权限以读取源清单存储桶中的清单。它授予对源对象存储桶中的 GET 对象、ACL、标签和版本的权限。还授予对目标对象存储桶中的 PUT 对象、ACL、标签和版本的权限。

  2. 在源账户中,为包含清单的存储桶创建存储桶策略以向您在上一步中创建的角色授予对源清单存储桶中的 GET 对象和版本的权限。此步骤允许 Amazon S3 批处理操作使用可信角色读取清单。将存储桶策略应用于包含清单的存储桶。

    以下是要应用于源清单存储桶的存储桶策略的示例。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsSourceManfiestRead", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::*DestinationAccountNumber*:user/ConsoleUserCreatingJob", "arn:aws:iam::*DestinationAccountNumber*:role/BatchOperationsDestinationRoleCOPY" ] }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::*ObjectSourceManifestBucket*/*" } ] }

    此策略还授予权限来允许要在目标账户中创建作业的控制台用户通过相同的存储桶策略具有源清单存储桶中的相同权限。

  3. 在源账户中,为源存储桶创建一个存储桶策略,该策略向您创建的角色授予对源对象存储桶中的 GET 对象、ACL、标签和版本的权限。然后,Amazon S3 批处理操作可以通过可信角色获取源存储桶中的对象。

    以下是包含源对象的存储桶的存储桶策略示例。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowBatchOperationsSourceObjectCOPY", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::*DestinationAccountNumber*:role/BatchOperationsDestinationRoleCOPY" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetObjectAcl", "s3:GetObjectTagging", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Resource": "arn:aws:s3:::ObjectSourceBucket/*" } ] }
  4. 在目标账户中创建 Amazon S3 批处理操作作业。您需要在目标账户中创建的角色的 ARN。

    有关创建作业的一般信息,请参阅创建 Amazon S3 批量操作作业。有关使用控制台创建作业的信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的创建 Amazon S3 批量操作作业