使用对象锁定以锁定对象
S3 对象锁定可以协助在固定的时间长度内或无限期地阻止删除或覆盖 Amazon S3 对象。对象锁定使用一次写入多次读取(WORM)模式存储对象。您可以使用对象锁定来协助满足需要 WORM 存储的法规要求,或用于添加额外的保护层来防止对象被更改和删除。
注意
S3 对象锁定已由 Cohasset Associates 评估,可在受 SEC 17a-4、CFTC 和 FINRA 法规约束的环境中使用。有关对象锁定与这些法规关系的更多信息,请参阅 Cohasset Associates 合规性评估
对象锁定提供了以下两种方式来管理对象保留:保留期限和依法保留。对象版本可以同时具有保留期限和/或依法保留。
-
保留期限 – 保留期限指定对象可以保持锁定状态的固定时间长度。您可以为各个对象设置唯一的保留期。此外,您可以在 S3 存储桶上设置默认保留期。您还可以在桶策略中使用
s3:object-lock-remaining-retention-days
条件键限制允许的最小和最大保留期。这有助于您确定保留期的范围,并限制可能短于或长于该范围的保留期。 -
依法保留 – 依法保留提供的保护与保留期限相同,但没有到期日期。依法保留将一直有效,直至您明确将其删除。法定保留与保留期无关,且应该对单独的对象目标应用。
对象锁定仅在启用 S3 版本控制的存储桶中生效。当您锁定某一对象版本时,Amazon S3 会将锁定信息存储在该对象版本的元数据中。在对象上实施保留期限或依法保留仅保护在请求中指定的版本。保留期和法定保留不会阻止创建对象的新版本,也不会阻止在对象顶部添加删除标记。有关 S3 版本控制的信息,请参阅使用 S3 版本控制保留对象的多个版本。
如果您将一个对象放入存储桶中,而存储桶中包含的现有受保护对象与其具有相同的对象键名,Amazon S3 将创建对象的新版本。现有受保护版本的对象将根据其保留配置保持锁定状态。
S3 对象锁定的工作原理
保留期限
保留期限可在固定时间内保护对象版本。当您对对象版本施加保留期限时,Amazon S3 会在该对象版本的元数据中存储时间戳,以指示保留期限的到期时间。在保留期限到期后,便可覆盖或删除对象版本。
您可以对单独对象版本或在存储桶属性上明确设置保留期限,以便它自动应用于存储桶中的所有对象。将保留期显式应用于对象版本时,即为对象版本指定保留到期日期。Amazon S3 将此日期存储在对象版本的元数据中。
您还可以在存储桶的属性中设置保留期限。在存储存储桶上设置保留期限时,您可以指定放入存储桶中的每个对象版本受保护的持续时间,以天或年为单位。当您将对象放入存储桶时,Amazon S3 将该对象版本的创建时间戳加上指定的持续时间,以此来计算保留到期日。然后,在您对该对象版本明确应用的单独锁定保留期限内,对象版本将受到保护。
注意
当您在存储桶中 PUT
具有明确的单独保留模式和期限的对象版本时,该对象版本的单独对象锁定设置会覆盖所有存储桶属性保留设置。
与所有其他对象锁定设置一样,保留期限适用于各个对象版本。单个对象的不同版本可以具有不同的保留模式和周期。
例如,如果您将 15 天的对象放入 30 天保留期限,并将一个保留期限为 60 天的同名对象 PUT
到 Amazon S3 中。在这种情况下,您的 PUT
请求将成功,Amazon S3 将创建一个保留期限为 60 天的新对象版本。较旧版本将保持其原来的保留期限,并且可在 15 天内删除。
在某个对象版本上应用了保留设置后,您可以延长保留期限。要执行此操作,您需对该对象版本提交新对象锁定请求,其保留到期日晚于当前为该对象版本配置的保留到期日期。Amazon S3 将用更长的新期限替换现有的保留期限。任何用户只要具有实施对象保留期限的权限,即可对象版本的保留期限。要设置保留期限,您必须具有 s3:PutObjectRetention
权限。
在对象或 S3 存储桶上设置保留权期限时,您必须选择两种保留模式之一:合规性或监管。
保留模式
S3 对象锁定提供了两种保留模式,可为对象应用不同级别的保护:
-
合规性模式
-
监管模式
在合规性模式中,任何用户都不能覆盖或删除受保护的对象版本,包括 AWS 账户中的根用户。在合规性模式下锁定对象后,其保留模式便无法更改,其保留期限也不能缩短。合规性模式可帮助确保在保留期限内无法覆盖或删除对象版本。
注意
在合规模式下,要想在保留日期到期前删除对象,唯一的方法就是删除相关的 AWS 账户。
在监管 模式中,除非用户具有特殊权限,否则用户不能覆盖或删除对象版本,或更改其锁定设置。使用监管模式,您可以保护对象以免被大多数用户删除,但您仍可向部分用户授予权限,以在必要时更改保留设置或删除对象。您还可以在创建合规性模式保留期限之前使用监管模式测试保留期限设置。
要覆盖或删除监管模式保留设置,您必须具有 s3:BypassGovernanceRetention
权限,并且在需要覆盖监管模式的任何请求中,必须明确包含 x-amz-bypass-governance-retention:true
作为请求标头。
注意
默认情况下,Amazon S3 控制台包括 x-amz-bypass-governance-retention:true
标头。如果您尝试删除受监管模式保护的对象并且拥有 s3:BypassGovernanceRetention
权限,则操作将会成功。
依法保留
使用对象锁定,您还可以在对象版本上实施依法保留。与保留期限相似,依法保留可防止对象版本被覆盖或删除。但是,依法保留没有关联的固定时间长度,会一直有效,直至删除。拥有 s3:PutObjectLegalHold
权限的任何用户均可自由实施和删除依法保留。
依法保留与保留期限无关。对对象版本实施依法保留不会影响该对象版本的保留模式或保留期限。
例如,假设您对某一对象版本实施依法保留,同时该对象版本也受保留期限保护。如果保留期限过期,该对象不会失去其 WORM 保护。那么依法保留将继续保护该对象,直至授权用户明确删除依法保留对象。与之相似,如果您在对象版本的保留期限生效时删除依法保留,该对象版本将一直受保护,直至保留期限过期。
使用 S3 对象锁定的最佳实践
如果您想保护对象在预定义的保留期内不被大多数用户删除,但同时又希望一些具有特殊权限的用户能够灵活地更改保留设置或删除对象,请考虑使用监管模式。
如果您从不希望任何用户(包括您的 AWS 账户中的根用户)能够在预定义的保留期内删除对象,请考虑使用合规模式。如果您需要存储合规数据,则可以使用此模式。
当您不确定要让对象保持不可变的时长时,可以使用依法保留。这可能是因为您即将对数据进行外部审计,并希望在审计完成之前保持对象不可变。或者,您可能有一个正在进行的项目,而您希望在项目完成之前,让该项目使用的数据集保持不变。
所需的权限
对象锁定操作需要特定的权限。根据您正在尝试的确切操作,您可能需要以下任意权限:
-
s3:BypassGovernanceRetention
-
s3:GetBucketObjectLockConfiguration
-
s3:GetObjectLegalHold
-
s3:GetObjectRetention
-
s3:PutBucketObjectLockConfiguration
-
s3:PutObjectLegalHold
-
s3:PutObjectRetention
有关 Amazon S3 权限的完整列表及其描述,请参阅《Service Authorization Reference》中的 Actions, resources, and condition keys for Amazon S3。
有关按 S3 资源类型对 S3 API 操作的权限的更多信息,请参阅 Amazon S3 API 操作所需的权限。
有关将条件与权限结合使用的信息,请参阅 使用条件键的存储桶策略示例。