S3 对象锁定的工作原理 - Amazon Simple Storage Service

S3 对象锁定的工作原理

您可以使用 S3 对象锁定通过一次写入、多次读取 (WORM) 模式存储对象。对象锁定可帮助防止在固定的时间段内或无限期地删除或覆盖对象。您可以​使用 S3 对象锁定满足需要 WORM 存储的法规要求,或添加一个额外的保护层来防止对象被更改和删除。

有关管理 Amazon S3 对象的锁定状态的信息,请参阅管理对象锁定

注意

具有 S3 对象锁定的 S3 存储桶不能用作服务器访问日志的目标存储桶。有关更多信息,请参阅 使用服务器访问日志记录来记录请求

以下各部分介绍 S3 对象锁定的主要功能。

保留模式

S3 对象锁定提供两种保留模式

  • 监管模式

  • 合规性模式

这些保留模式对对象应用不同级别的保护。可将任意一种保留模式应用于受对象锁定保护的任意对象版本。

监管 模式中,除非用户具有特殊权限,否则用户不能覆盖或删除对象版本,或更改其锁定设置。使用监管模式,您可以保护对象以免被大多数用户删除,但您仍可向部分用户授予在必要时更改保留设置或删除对象的权限。您还可以在创建合规性模式保留期限之前使用监管模式测试保留期限设置。

要覆盖或删除监管模式保留设置,用户必须具有 s3:BypassGovernanceRetention 权限,并且必须在需要覆盖监管模式的任何请求中显式包含 x-amz-bypass-governance-retention:true 作为请求标题。

注意

默认情况下,Amazon S3 控制台包括 x-amz-bypass-governance-retention:true 标头。如果您尝试删除受管理模式保护的对象并且拥有 s3:BypassGovernanceRetention 权限,此操作将会成功。

合规性模式中,任何用户都不能覆盖或删除受保护的对象版本,包括 AWS 账户中的根用户。在合规性模式下锁定对象后,其保留模式便无法更改,其保留期限也不能缩短。合规性模式可帮助确保在保留期限内无法覆盖或删除对象版本。

注意

您在施加或更改对象锁定时更新对象版本的元数据不会覆盖对象版本或重置其 Last-Modified 时间戳。

保留期限

保留期限可在固定时间内保护对象版本。当您对对象版本施加保留期限时,Amazon S3 会在该对象版本的元数据中存储时间戳,以指示保留期限的到期时间。在保留期限到期后,便可覆盖或删除对象版本,除非您还对该对象版本施加了依法保留。

可通过显式方式或通过存储桶默认设置对对象版本施加保留期限。将保留期显式应用于对象版本时,即为对象版本指定保留到期日期。Amazon S3 存储在对象版本的元数据中设置的 Retain Until Date,并保护对象版本,直到保留期限到期。

在使用存储桶默认设置时,不需指定 Retain Until Date。而应指定放入存储桶的每个对象版本应被保护的持续时间,以天或年为单位。当您将对象放入存储桶时,Amazon S3 通过将该对象版本的创建时间戳加上指定的持续时间来计算其 Retain Until Date。它将 Retain Until Date 存储在对象版本的元数据中。然后,该对象版本将得到保护,与您对该对象版本施加带保留期限的锁定完全相同。

注意

如果您将对象版本放入存储桶的请求包含显式保留模式和周期,则这些设置将覆盖该对象版本的任何存储桶默认设置。

与所有其他对象锁定设置一样,保留期限适用于各个对象版本。单个对象的不同版本可以具有不同的保留模式和周期。

例如,如果您将 15 天的对象放入 30 天保留期限,并将一个保留期限为 60 天的同名对象 PUT 到 Amazon S3 中。在这种情况下,您的 PUT 操作将成功,Amazon S3 将创建一个保留期限为 60 天的新对象版本。较旧版本将保持其原来的保留期限,并且可在 15 天内删除。

可在对对象版本应用保留设置后延长保留期限。要执行此操作,您需对该对象版本提交新锁定请求,其 Retain Until Date 比当前为该对象版本配置的保留到期日期晚。Amazon S3 将用更长的新期限替换现有的保留期限。有权实施对象保留期限的任何用户都可为在任一模式下锁定的对象版本延长保留期限。

对象锁定还可以对对象版本进行合法保留。与保留期限相似,依法保留可防止对象版本被覆盖或删除。但是,依法保留没有关联的保留期限,在删除之前将一直有效。拥有 s3:PutObjectLegalHold 权限的任何用户均可自由实施和删除依法保留。有关 Amazon S3 权限的完整列表,请参阅Amazon S3 的操作、资源和条件键

依法保留与保留期限无关。只要包含对象的存储桶已启用对象锁定,您便可实施和删除依法保留,无论指定的对象版本是否已设置保留期限。对对象版本实施依法保留不会影响该对象版本的保留模式或保留期限。

例如,如果您对某一对象版本实施依法保留,同时该对象版本也受保留期限保护。如果保留期限过期,该对象不会失去其 WORM 保护。依法保留将继续保护该对象,直至授权用户明确将其删除。与之相似,如果您在对象版本的保留期限生效时删除依法保留,该对象版本将一直受保护,直至保留期限过期。

要使用对象锁定,您必须为存储桶启用它。您还可以选择配置将应用于存储桶中放置的新对象的默认保留模式和保留期限。有关更多信息,请参阅 使用控制台配置 S3 对象锁定

存储桶配置

要使用对象锁定,您必须为存储桶启用它。您还可以选择配置将应用于存储桶中放置的新对象的默认保留模式和保留期限。

注意

使用 S3 Object Lock 时,请确保考虑您的加密技术。例如,如果您通过来使用服务器端加密 AWS KMS 密钥,请考虑可能删除的密钥如何与 S3 Object Lock 交互。考虑对密钥的保护也可能很重要。

启用 S3 对象锁定

在锁定任何对象之前,您必须配置要使用 S3 对象锁定的存储桶。为此,您应指定要启用对象锁定的存储桶的创建时间。为锁定对象配置存储桶后,便可使用保留期限和/或依法保留锁定该存储桶中的对象。

注意
  • 您只能为新存储桶启用对象锁定。如果您要为现有存储桶开启对象锁定,请联系 AWS Support。

  • 如果您创建存储桶时启用了对象锁定,Amazon S3 会自动为该存储桶启用版本控制。

  • 如果您创建存储桶时启用了对象锁定,您将无法为该存储桶禁用对象锁定或暂停版本控制。

有关在控制台上启用对象锁定的信息,请参阅使用控制台配置 S3 对象锁定

默认保留设置

为存储桶启用对象锁定时,该存储桶可以存储受保护的对象。但此设置不会自动保护您放入存储桶的对象。如果您要自动保护放入存储桶的对象版本,则可配置默认保留期限。除非您在创建对象时为其明确指定了不同的保留模式和保留期限,否则默认设置将应用于放入存储桶的所有新对象。

提示

如果要为放入存储桶的所有新对象版本强制执行存储桶默认保留模式和期限,请设置存储桶默认值并拒绝用户配置对象保留设置的权限。然后,Amazon S3 将默认保留模式和期限应用于放入存储桶中的新对象版本,并拒绝任何放置包含保留模式和设置的对象的请求。

存储桶默认设置需要提供模式和周期。存储桶默认模式为监管合规性。有关更多信息,请参阅 保留模式

不将默认保留期限描述为时间戳,而将其描述为以天或年为单位的时间段。当您将对象版本放入具有默认保留期限的存储桶时,对象锁定会计算保留到期日期。它通过将该对象版本的创建时间戳加上默认保留期限来计算此日期。Amazon S3 会将得到的时间戳存储为该对象版本的 Retain Until Date,就像您手动计算时间戳并将其施加于对象版本一样。

默认设置仅应用于放入存储桶的新对象。对存储桶实施默认保留设置不会对该存储桶中已存在的对象实施任何保留设置。

重要

对象锁定仅应用于单个对象版本。如果您将对象放入具有默认保留期限的存储桶,并且您没有为该对象明确指定保留期限,Amazon S3 创建的对象将具有与存储桶默认设置匹配的保留期限。创建对象后,其保留期限将与存储桶的默认保留期限无关。更改存储桶的默认保留期限不会改变该存储桶中任何对象的现有保留期限。

注意

如果在存储桶上配置默认保留期限,则在此类存储桶中上传对象的请求必须包含 Content-MD5 标头。有关详细信息,请参阅《Amazon Simple Storage Service API 参考》中的 Put Object

所需权限

对象锁定操作需要特定的权限。根据您正在尝试的确切操作,您可能需要以下任意权限:

  • s3:BypassGovernanceRetention

  • s3:GetBucketObjectLockConfiguration

  • s3:GetObjectLegalHold

  • s3:GetObjectRetention

  • s3:PutBucketObjectLockConfiguration

  • s3:PutObjectLegalHold

  • s3:PutObjectRetention

有关将条件与权限结合使用的信息,请参阅 Amazon S3 条件键示例