复制操作将创建已存储在 Amazon S3 中的对象的副本。您可以在目录存储桶和通用存储桶之间复制对象。您还可以在一个存储桶内复制对象,也可以在同一类型的存储桶之间复制对象,例如,从目录存储桶复制到目录存储桶。
注意
当源存储桶或目标存储桶位于 AWS 本地区域时,不支持跨不同 AWS 区域复制对象。源存储桶和目标存储桶必须具有相同的父 AWS 区域。源存储桶和目标存储桶可以是不同的存储桶位置类型(可用区或本地区域)。
在单个原子操作中,您可以创建最大 5GB 的对象副本。但是,要复制大于 5GB 的对象,您必须使用分段上传 API 操作。有关更多信息,请参阅 对目录桶使用分段上传。
权限
要复制对象,您必须拥有以下权限:
-
要将对象从一个目录存储桶复制到另一个目录存储桶,您必须拥有
s3express:CreateSession
权限。 -
要将对象从目录存储桶复制到通用存储桶,您必须拥有将对象副本写入目标存储桶的
s3express:CreateSession
权限和s3:PutObject
权限。 -
要将对象从通用桶复制到目录桶,您必须拥有读取正在复制的源对象的
s3express:CreateSession
权限和s3:GetObject
权限。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 CopyObject。
加密
Amazon S3 会自动加密上传到 S3 存储桶的所有新对象。S3 存储桶的默认加密配置始终处于启用状态,并至少设置为具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)。
对于目录存储桶,支持 SSE-S3 和具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)。当目标存储桶是目录存储桶时,我们建议,目标存储桶的默认加密使用所需的加密配置,并且不要覆盖存储桶的默认加密。然后,使用所需的加密设置自动对新对象进行加密。此外,当您通过 CopyObject 将 SSE-KMS 加密的对象从通用存储桶复制到目录存储桶、从目录存储桶复制到通用存储桶,或在目录存储桶之间复制时,不支持 S3 存储桶密钥。在这种情况下,每次对 KMS 加密的对象发出复制请求时,Amazon S3 都会调用 AWS KMS。有关目录存储桶中加密覆盖行为的更多信息,请参阅 Specifying server-side encryption with AWS KMS for new object uploads。
对于通用桶,您可以使用 SSE-S3(默认)、采用 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)、采用 AWS KMS 密钥的双层服务器端加密(DSSE-KMS),或采用客户提供密钥的服务器端加密(SSE-C)。
如果您发出复制请求来指定对目录存储桶(源存储桶或目标存储桶)使用 DSSE-KMS 或 SSE-C,则响应将返回错误。
标签
目录存储桶不支持标签。如果您将带有标签的对象从通用桶复制到目录桶,您会收到 HTTP 501 (Not
Implemented)
响应。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 CopyObject。
ETag
S3 Express One Zone 的实体标签(ETag)是随机的字母数字字符串,而不是 MD5 校验和。为协助确保对象完整性,请使用额外的校验和。
其他校验和
S3 Express One Zone 可让您选择用于在上传或下载过程中验证数据的校验和算法。您可以选择以下安全哈希算法(SHA)或循环冗余校验(CRC)数据完整性检查算法之一:CRC32、CRC32C、SHA-1 和 SHA-256。S3 Express One Zone 存储类不支持基于 MD5 的校验和。
有关更多信息,请参阅 其他 S3 校验和最佳实践。
支持的特征
有关 S3 Express One Zone 支持哪些 Amazon S3 特征的更多信息,请参阅目录存储桶的差异。
注意
使用控制台将对象复制到目录存储桶时的限制和局限性如下所示:
-
Copy
操作适用于指定文件夹(前缀)中的所有对象。当正在执行操作时添加到这些文件夹的对象可能受到影响。 -
无法使用 S3 控制台复制使用客户提供的加密密钥(SSE-C)加密的对象。要复制使用 SSE-C 加密的对象,请使用 AWS CLI、AWS SDK 或 Amazon S3 REST API。
-
复制的对象将不会保留原始对象的对象锁定设置。
-
如果要从中复制对象的存储桶对于 S3 对象所有权使用“强制存储桶拥有者”设置,则对象 ACL 将不会复制到指定的目标。
-
如果要将对象复制到对于 S3 对象所有权使用“强制存储桶拥有者”设置的存储桶,请确保源存储桶也使用“强制存储桶拥有者”设置,或移除对其它 AWS 账户和组的任何对象 ACL 授权。
-
从通用存储桶复制到目录存储桶的对象将不会保留对象标签、ACL 或 Etag 值。可以复制校验和值,但它们并不等同于 Etag。与添加时相比,校验和值可能会发生变化。
-
复制到目录存储桶的所有对象都将对 S3 对象所有权使用“强制存储桶拥有者”设置。
将对象从通用桶或目录桶复制到目录桶
登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择您要从中复制对象的存储桶:
-
要从通用桶进行复制,请选择通用桶选项卡。
-
要从目录桶进行复制,请选择目录桶选项卡。
-
-
选择包含要复制的对象的通用桶或目录桶。
-
请选择对象选项卡。在对象页面上,选中要复制的对象名称左侧的复选框。
-
在 Actions (操作) 菜单中,选择 Copy (复制)。
将出现复制页面。
-
在目标下,为您的目标类型选择目录桶。要指定目标路径,请选择浏览 S3,导航到目标,然后选中目标左侧的选项按钮。选择右下角的选择目标。
或者,输入目标路径。
-
在其它复制设置下,选择是要复制源设置、请勿指定设置还是指定设置。复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置来指定服务器端加密、校验和以及元数据的设置。
-
选择右下角的复制。Amazon S3 会将对象复制到目标。
注意
使用控制台将对象复制到通用存储桶时的限制和局限性如下所示:
-
Copy
操作适用于指定文件夹(前缀)中的所有对象。当正在执行操作时添加到这些文件夹的对象可能受到影响。 -
无法使用 S3 控制台复制使用客户提供的加密密钥(SSE-C)加密的对象。要复制使用 SSE-C 加密的对象,请使用 AWS CLI、AWS SDK 或 Amazon S3 REST API。
-
复制的对象将不会保留原始对象的对象锁定设置。
-
如果要从中复制对象的存储桶对于 S3 对象所有权使用“强制存储桶拥有者”设置,则对象 ACL 将不会复制到指定的目标。
-
如果要将对象复制到对于 S3 对象所有权使用“强制存储桶拥有者”设置的存储桶,请确保源存储桶也使用“强制存储桶拥有者”设置,或移除对其它 AWS 账户和组的任何对象 ACL 授权。
将对象从目录存储桶复制到通用存储桶
登录到AWS Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在左侧导航窗格中,选择存储桶。
选择目录桶选项卡。
-
选择包含您要复制的对象的目录桶。
-
请选择对象选项卡。在对象页面上,选中要复制的对象名称左侧的复选框。
-
在 Actions (操作) 菜单中,选择 Copy (复制)。
-
在目标下,为您的目标类型选择通用桶。要指定目标路径,请选择浏览 S3,导航到目标,然后选中目标左侧的选项按钮。选择右下角的选择目标。
或者,输入目标路径。
-
在其它复制设置下,选择是要复制源设置、请勿指定设置还是指定设置。复制源设置是默认选项。如果您只想复制不带源设置属性的对象,请选择请勿指定设置。选择指定设置,来指定存储类、ACL、对象标签、元数据、服务器端加密和其它校验和的设置。
-
选择右下角的复制。Amazon S3 会将对象复制到目标。
以下 copy-object
示例命令显示了如何使用 AWS CLI 将对象从一个存储桶复制到另一个存储库。您可以在存储桶类型之间复制对象。要运行此命令,请将用户输入占位符替换为您自己的信息。
aws s3api copy-object --copy-source
SOURCE_BUCKET/SOURCE_KEY_NAME
--keyTARGET_KEY_NAME
--bucketTARGET_BUCKET_NAME
有关更多信息,请参阅 AWS CLI 命令参考 中的 copy-object