如何向 S3 存储桶添加复制规则? - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如何向 S3 存储桶添加复制规则?

复制是在相同或跨不同 AWS 区域中的存储桶自动、异步地复制对象。复制会将源存储桶中新创建的对象和对象更新复制到目标存储桶。有关复制概念以及如何通过 AWS CLI、AWS 开发工具包和 Amazon S3 REST API 使用复制的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的复制

复制要求在源存储桶和目标存储桶上均启用了版本控制。要查看要求的完整列表,请参阅《Amazon Simple Storage Service 开发人员指南》中的复制的要求。有关版本控制的更多信息,请参阅如何为 S3 存储桶启用或暂停版本控制?

目标存储桶中的对象副本是源存储桶中对象的精确副本。它们具有相同的键名和元数据;例如,创建时间、拥有者、用户定义的元数据、版本 ID、访问控制列表 (ACL) 和存储类。您也可以选择为对象副本明确指定不同的存储类。无论谁拥有此源存储桶或源对象,您都可以选择将副本的所有权更改为拥有目标存储桶的 AWS 账户。有关更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的更改副本拥有者

您可以使用 S3 复制时间控制 (S3 RTC) 在可预测的时间范围内在同一 AWS 区域或跨不同 AWS 区域复制您的数据。S3 RTC 在 15 分钟内复制 Amazon S3 中存储的 99.99% 的新对象,并在几秒钟内复制大多数对象。有关更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的使用 S3 复制时间控制 (S3 RTC) 复制对象

有关复制和生命周期规则的备注

一个对象的元数据在原始对象和副本对象之间保持相同。生命周期规则遵守原始对象的创建时间,而不是复制的对象在目标存储桶中变为可用状态的时间。但是,在复制完成前,不会对等待复制的对象执行生命周期操作。

您使用 Amazon S3 控制台向源存储桶添加复制规则。复制规则定义要复制的源存储桶对象和存储已复制对象的目标存储桶。您可以创建一条规则,以复制存储桶中的所有对象或具有特定键名前缀和/或一个或多个对象标签的对象子集。目标存储桶与源存储桶可以位于同一 AWS 账户中,也可以位于不同的账户中。

如果您指定要删除的对象版本 ID,Amazon S3 会在源存储桶中删除该对象版本。但不会将删除操作复制到目标存储桶中。换句话说,它不会从目标存储桶中删除同一对象版本。这会防止恶意删除数据。

如果目标存储桶与源存储桶位于不同的账户中,您必须向目标存储桶添加存储桶策略以便为源存储桶账户的所有者授予复制目标存储桶中的对象的权利。有关更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的当源存储桶和目标存储桶由不同的 AWS 账户拥有时授予权限

当您将复制规则添加到存储桶后,默认情况下将启用复制规则,使该规则在您保存它后立即启动。

添加复制规则

当目标存储桶与源存储桶位于同一 AWS 账户中时,可按照以下步骤来配置复制规则。

  1. 登录 AWS 管理控制台,并通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. Buckets (存储桶) 列表中,选择您想要的存储桶的名称。

  3. 选择 Management (管理),向下滚动到 Replication rules (复制规则),然后选择 Create replication rule (创建复制规则)

  4. Rule name (规则名称) 下,输入规则的名称以帮助稍后标识规则。该名称是必填项,并且它在存储桶内必须是唯一的。

  5. 设置 Amazon S3 可以代入以代表您复制对象的 AWS Identity and Access Management (IAM) 角色。

    要设置 IAM 角色,请在 Replication rule configuration (复制规则配置) 部分的 IAM role (IAM 角色) 下,执行以下操作之一:

    • 我们强烈建议您选择 Create new role (创建新角色),让 Amazon S3 为您创建一个新的 IAM 角色。当您保存该规则后,将为 IAM 角色生成一个与您选择的源和目标存储桶匹配的新策略。生成的角色的名称基于存储桶名称并使用以下命名约定:replication_role_for_source-bucket_to_destination-bucket

    • 您可以选择使用现有的 IAM 角色。在这种情况下,您必须选择一个角色,该角色会授予 Amazon S3 必要的权限以进行复制。如果该角色未按照您的复制规则授予 Amazon S3 足够的权限,复制会失败。

    重要

    将复制规则添加到存储桶时,您必须具有 iam:PassRole 权限才能传递授予 Amazon S3 复制权限的 IAM 角色。有关更多信息,请参阅《IAM 用户指南》中的向用户授予将角色传递到 AWS 服务的权限

  6. Status (状态) 下,会看到 Enabled (已启用) 默认处于选中状态。已启用的规则将在您保存它后立即开始工作。如果您想之后启用该规则,请选择 Disabled

  7. 如果存储桶具有现有的复制规则,系统会指示您为规则设置优先级。必须为规则设置优先级,以避免因在多个规则的范围内包含对象而引起冲突。如果规则重叠,Amazon S3 会使用规则优先级确定要应用哪个规则。数字越大,优先级越高。有关规则优先级的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的复制配置概述

  8. Replication rule configuration (复制规则配置) 中的 Source bucket (源存储桶) 下,您可以通过以下选项设置复制源:

    • 要复制整个存储桶,请选择 This rule applies to all objects in the bucket (此规则将应用于存储桶中的所有对象)

    • 要复制具有相同前缀的所有对象,请选择 Limit the scope of this rule using one or more filters (使用一个或多个筛选条件限制此规则的范围)。这会将复制限制为名称以字符串(例如 pictures)开头的所有对象。在框中输入前缀。

      注意

      如果您输入属于文件夹名称的前缀,您必须使用 / (正斜杠) 作为最后一个字符 (例如,pictures/)。

    • 要复制具有一个或多个对象标签的所有对象,请选择 Add tag (添加标签),然后在框中输入键值对。重复上述过程以添加其他标签。您可以组合前缀和标签。有关对象标签的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的对象标签

    新架构支持前缀和标签筛选以及规则的优先级。有关新架构的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的复制配置向后兼容性。开发人员指南介绍了在用户界面后台工作的 Amazon S3 API 所使用的 XML。在开发人员指南中,将新架构描述为复制配置 XML V2

  9. Destination (目标) 下,您可以使用以下选项来设置复制目标:

    • 要复制到您的账户中的存储桶,请选择 Choose a bucket in this account (选择此账户中的存储桶),然后键入或浏览目标存储桶。

    • 要复制到其他 AWS 账户中的存储桶,请选择 Choose a bucket in another account (选择另一个账户中的存储桶),然后输入目标存储桶账户 ID 并键入目标存储桶名称。

      如果目标存储桶与源存储桶位于不同的账户中,您必须向目标存储桶添加存储桶策略以便为源存储桶账户的所有者授予复制目标存储桶中的对象的权利。有关更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的当源存储桶和目标存储桶由不同的 AWS 账户拥有时授予权限

    注意

    如果未对目标存储桶启用版本控制,您将收到包含 Enable versioning (启用版本控制) 按钮的警告。选择此按钮可对存储桶启用版本控制。

  10. 如果要启用 Object Ownership (对象所有权) 以帮助标准化目标存储桶中的新对象的所有权,请选择 Change object ownership to the destination bucket owner (将对象所有权更改为目标存储桶拥有者)。有关此选项的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的使用 S3 RTC 满足合规性要求

    如果要将数据复制到目标存储桶中的特定存储类,请选择 Change the storage class for the replicated objects (更改已复制对象的存储类)。然后选择要用于目标存储桶中的已复制对象的存储类。如果您不选择此选项,已复制对象的存储类将与原始对象的类相同。

    如果要在复制配置中启用 S3 复制时间控制 (S3 RTC),请选择 S3 Replication Time Control (S3 复制时间控制)。有关此选项的更多信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的使用 S3 RTC 满足合规性要求

    注意

    使用 S3 RTC 时,将收取额外的每 GB 数据传输费用和 CloudWatch 指标费用。

  11. 要复制源存储桶中使用 AWS Key Management Service (AWS KMS) 加密的对象,请在 Replication criteria (复制标准) 下方,选择 Replicate objects encrypted with AWS KMS (复制使用 AWS KMS 加密的对象)AWS KMS key for encrypting destination objects (用于加密目标对象的 AWS KMS 密钥) 下是您允许复制使用的源密钥。默认情况下,所有源 CMK 都包含在内。您可以选择缩小 CMK 选择的范围。

    使用您未选择的 AWS KMS CMK 加密的对象不会进行复制。系统为您选择一个 CMK 或一组 CMK,您可以自行选择 CMK。有关将 AWS KMS 用于复制的信息,请参阅《Amazon Simple Storage Service 开发人员指南》中的复制使用具有 AWS KMS 中存储的加密密钥的服务器端加密 (SSE) 创建的对象

    重要

    在复制使用 AWS KMS 加密的对象时,AWS KMS 请求速率会在源区域中加倍并在目标区域中增加相同的量。之所以对 AWS KMS 的调用率会增加,是因为数据是使用您为复制目标区域定义的客户主密钥 (CMK) 进行重新加密的。对于每个区域的每个调用账户,AWS KMS 设定了一个请求速率限制。有关限制默认值的信息,请参阅《AWS Key Management Service 开发人员指南》中的 AWS KMS 限制 – 每秒请求数:因情况而异

    如果您在复制期间的当前 Amazon S3 PUT 对象请求速率超过您账户的默认 AWS KMS 速率限制的一半,则建议您请求提高您的 AWS KMS 请求速率限制。要请求提高,请在联系我们处的 AWS Support 中心中创建一个案例。例如,假设您当前的 PUT 对象请求速率为每秒 1000 个请求并且您使用 AWS KMS 加密对象。在此情况下,建议您让 AWS Support 将您在源区域和目标区域(如果不同)中的 AWS KMS 速率限制提高到每秒 2500 个请求,以确保不受 AWS KMS 的限制。

    要查看源存储桶中的 PUT 对象请求速率,请查看 Amazon S3 的 Amazon CloudWatch 请求指标中的 PutRequests。有关查看 CloudWatch 指标的信息,请参阅如何为 S3 存储桶中的所有对象创建请求指标筛选条件?

    如果您选择复制通过 AWS KMS 加密的对象,请输入 AWS KMS CMK 的 Amazon 资源名称 (ARN),以便用于加密目标存储桶中的副本。您可以在 IAM 控制台中的 Encryption keys (加密密钥) 下方找到您的 AWS KMS CMK 的 ARN。或者,您可以从下拉列表中选择一个 CMK 名称。

    有关创建 AWS KMS CMK 的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的创建密钥

    重要

    Amazon S3 控制台只为每个 AWS 区域列出 100 个 AWS KMS CMK。如果您在同一区域中有超过 100 个 CMK,您只会在 S3 控制台中看到前 100 个 CMK。若要使用控制台中未列出的 KMS CMK,请选择自定义 KMS ARN,然后输入相应的 KMS CMK ARN。

  12. 要完成,请选择 Save (保存)

  13. 在您保存规则之后,可以通过选择您的规则并选择 Edit rule (编辑规则) 来编辑、启用、禁用或删除您的规则。

授予源存储桶拥有者使用 AWS KMS CMK 加密的权限

您必须向源存储桶拥有者的账户授予权限,以便通过密钥策略使用您的 AWS KMS CMK 进行加密。以下过程介绍如何使用 AWS Identity and Access Management (IAM) 控制台修改 AWS KMS CMK 的密钥策略,该 CMK 用于加密目标存储桶中的副本对象。

授予使用您的 AWS KMS CMK 进行加密的权限

  1. 使用拥有该 AWS KMS CMK 的 AWS 账户登录 AWS 管理控制台。从 https://console.aws.amazon.com/kms 打开 AWS KMS 控制台。

  2. 选择您在加密时要使用的 CMK 的别名。

  3. 在页面的 Key Policy 部分中,选择 Switch to policy view

  4. 选择编辑以编辑密钥策略

  5. 使用 Key Policy (密钥策略) 编辑器,将 Amazon S3 提供的密钥策略插入到现有密钥策略中,然后选择 Save Changes (保存更改)。您可能希望将策略添加到现有策略的末尾。

有关创建和编辑 AWS KMS CMK 的更多信息,请参阅《AWS Key Management Service 开发人员指南》中的入门

更多信息