S3 版本控制的工作原理 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

S3 版本控制的工作原理

您可以使用 S3 版本控制将对象的多个版本保存在一个存储桶中,使您能够还原意外删除或覆盖的对象。例如,如果删除对象(而不是永久移除它),则 Amazon S3 会插入删除标记,该标记将成为当前对象版本。然后,您可以恢复以前的版本。有关更多信息,请参阅 从启用了版本控制的存储桶中删除对象版本。如果覆盖对象,则会导致存储桶中出现新的对象版本。您始终可以恢复以前的版本。

您创建的每个 S3 存储桶都具有关联的 versioning 子资源。(有关更多信息,请参阅 存储桶配置选项。) 默认情况下,您的存储桶不受版本控制,且 versioning 子资源会存储空的版本控制配置,如下所示。

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> </VersioningConfiguration>

要启用版本控制,您可以向 Amazon S3 发送一个请求,在请求中指定包含状态的版本控制配置。

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Status>Enabled</Status> </VersioningConfiguration>

要暂停版本控制,请将状态值设置为 Suspended

注意

如果您首次对存储桶启用版本控制,则可能需要很短的时间即可完全传播更改。我们建议您在启用版本控制后等待 15 分钟,然后再对存储桶中的对象发出写入操作(PUT 或 DELETE)。

存储桶拥有者和所有授权 IAM 用户都可以启用版本控制。存储桶拥有者是创建存储桶的 Amazon Web Services 账户 (根账户)。有关许可的更多信息,请参阅Amazon S3 中的 Identity and Access Management

有关使用 Amazon Web Services Management Console、Amazon Command Line Interface (Amazon CLI) 或 REST API 启用和禁用 S3 版本控制的更多信息,请参阅 在存储桶上启用版本控制

版本 ID

如果您为存储桶启用版本控制,Amazon S3 会自动为要存储的对象生成唯一版本 ID。例如,在一个存储桶中,您可以拥有两个具有相同键的对象,但版本 ID 却不同,例如 photo.gif(版本 111111)和 photo.gif(版本 121212)。

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

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

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

3sL4kqtJlcpXroDTDmJ+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 删除

仅当您 PUT 新对象时,才会创建新版本。请注意某些操作,例如通过实施 COPYPUT 工作。执行修改当前对象的操作不会创建新版本,因为它们没有 PUT 新对象。这包括更改对象上的标签等操作。

重要

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