对象版本控制 - Amazon Simple Storage Service

对象版本控制

使用 Amazon S3 版本控制可在一个存储桶中保留对象的多个版本。例如,您可以将 my-image.jpg(版本 111111)和 my-image.jpg(版本 222222)存储在单个存储桶中。S3 版本控制保护您免受意外覆盖和删除的后果。您还可以使用版本控制为对象存档,以便访问早期版本。

注意

SOAP API 不支持S3 版本控制。HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。SOAP 不支持新增的 Amazon S3 功能。

要自定义您的数据保留方法和控制存储成本,请将对象版本控制与对象生命周期管理结合使用。有关使用 AWS 管理控制台创建S3 生命周期策略的信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的如何创建 S3 存储桶的生命周期策略?

如果您在不受版本控制的存储桶中具有对象到期生命周期策略,并且希望在启用版本控制时保持相同的永久删除行为,则必须添加非当前版本到期策略。非当前版本到期生命周期策略将管理在受版本控制的存储桶中删除非当前对象版本的行为。(启用版本控制的存储桶会维护一个当前对象版本,以及零个或零个以上非当前对象版本。)

您必须在存储桶上显式启用S3 版本控制。S3 版本控制 默认已禁用。无论您是否已启用版本控制,您的存储桶中的每个对象都具有版本 ID。如果未启用版本控制,Amazon S3 将版本 ID 值设置为空。如果启用S3 版本控制,Amazon S3 会为对象分配版本 ID 值。此值将此版本与同一个键的其他版本区分开来。

已在存储桶级别上完成启用和暂停版本控制。在现有存储桶上启用版本控制时,已存储在存储桶中的对象将保持不变。版本 ID (空)、内容和权限保持不变。为存储桶启用S3 版本控制后,添加到存储桶的每个对象都会获得一个版本 ID,该 ID 将此版本与同一个键的其他版本区分开来。

只有 Amazon S3 生成版本 ID,不能编辑它们。版本 ID 是 Unicode、UTF-8 编码、URL 就绪、不透明的字符串,长度不超过 1,024 字节。以下是示例:3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo

注意

为简单起见,所有示例都使用短得多的 ID。

当您在启用版本控制的存储桶中通过 PUT 放入对象时,不会覆盖非当前版本。下图显示在将新版本 photo.gif 通过 PUT 放到已有同名对象的存储桶中时,原始对象 (ID = 111111) 保留在存储桶中,Amazon S3 生成新版本 ID (121212),并将较新版本添加到存储桶。

此功能将防止您意外覆盖或删除对象,并向您提供检索早期版本的对象的机会。

DELETE 对象时,所有版本都将保留在存储桶中,且 Amazon S3 将插入删除标记,如下图所示。

删除标记将成为对象的当前版本。默认情况下,GET 请求将检索最新存储的版本。在当前版本为删除标记时,执行简单 GET Object 请求将返回 404 Not Found 错误,如下图所示。

但是,您可以通过指定对象版本 ID,通过 GET 获取非当前版本的对象。在下图中,您 GET 一个特定的对象版本 111111。Amazon S3 返回该对象版本,即使它不是当前版本。

您可以通过指定要删除的版本来永久删除对象。只有 Amazon S3 存储桶的所有者才能永久删除某个版本。下图显示了 DELETE versionId 如何永久删除存储桶中的对象以及 Amazon S3 不会插入删除标记。

您可以通过配置存储桶来启用 MFA (多因素认证) 删除,从而增加额外的安全性。执行此操作时,存储桶拥有者必须在任何请求中包含两种形式的身份验证,以删除版本或更改存储桶的版本控制状态。有关详细信息,请参阅 MFA 删除

重要

如果您注意到启用S3 版本控制后,Amazon S3 对存储桶的 PUT 或 DELETE 对象请求所收到的 HTTP 503 慢速响应数量显著增加,那么存储桶中可能有一个或多个对象有数以百万计的版本。有关更多信息,请参阅Amazon S3 疑难解答

有关详细信息,请参阅使用版本控制