概述

对象版本锁是基于对象元数据实现的 WORM,针对对象的每个版本,系统都会维护一份对象版本锁信息。对象版本锁信息包括如下内容:

{
  mode: i8,
  time: u32,
  hold: bool,
}

我们将这些信息分为两个部分:保留信息(Retention)与合法持有信息(Legal-Hold)。详细说明如下:

字段 类型 说明

mode

String

保留信息(Retention)。用以说明对象版本锁的模式,分为以下两种:

  • GOVERNANCE:治理模式,在这个模式下,保护期内只有 Bucket 的所有者可以删除受保护的对象和缩短对象受保护的时间。

  • COMPLIANCE:合规模式,在这个模式下,保护期内任何人都不可以删除受保护的对象,只能延长对象受保护的时间。

time

String

保留信息(Retention),对象保留截止时间对应的时间戳,在这个时间之前,对象受到保护。

hold

Bool

合法持有信息,表明是否持有该对象。

  • 取值为 truefalse,分别表示持有与未持有。

  • 在持有状态下,任何用户都不能删除该对象。

删除对象

保留信息 Retention 和合法持有信息 Legal-Hold 均对对象的保护有影响,当删除对象时,需要同时考虑这两部分信息。

  • 示例一:当 modeGOVERNANCEtime2023-05-01T00:00:00Zholdtrue 时。

    假设1:现在的时间为 2023-04-27T00:00:00Z,则对象受 GOVERNANCE 模式的保护,不能被删除;同时 holdtrue,也要求对象不能被删除。因此,该情形下,对象不能被删除。

    假设2:现在的时间为 2023-05-27T00:00:00Z,则对象不受 GOVERNANCE 模式的保护,但同时,因为 holdtrue,要求对象不能被删除。因此,在该情形下,对象不能被删除。

  • 示例二:当 modeGOVERNANCEtime2023-05-01T00:00:00Zholdfalse 时。

    假设1:现在的时间为 2023-04-27T00:00:00Z,则对象受 GOVERNANCE 模式的保护,不能被删除;同时 holdfalse,对象可以删除。因为没共同满足删除条件,因此,对象仍然不能被删除。

    假设2:现在的时间为 2023-05-27T00:00:00Z,则对象不受 GOVERNANCE 模式的保护,能被删除;同时 holdfalse,对象可以被删除。同时满足两个删除条件,因此,对象能被删除。

说明

通过上面的示例,我们知道,当保留信息 Retention 和合法持有信息 Legal-Hold 均允许对象被删除时,对象才能被删除。

修改对象版本锁

说明

如需修改已存在的对象的对象版本锁信息,需要使用 S3 的接口来实现。具体可参考 S3 兼容接口相关内容。

针对一个具体的对象,其对象版本锁信息中的 hold 字段,可以随时修改为 truefalse。但是 Retention 信息不能随意修改,如需修改,需满足如下条件。

  • modeGOVERNANCE 时。

    1. 当前时间 <= time 时,默认只能延长保留时间 time。若需修改 mode 或者延长保留时间 time,则可使用 S3 的 bypass 相关请求头实现。

    2. 当前时间 > time 时,modetime 均可以随意修改。

  • modeCOMPLIANCE 时。

    1. 当前时间 <= time 时,mode 不可以修改,且保留时间 time 只能延长。

    2. 当前时间 > time 时,modetime 均可以随意修改。

  • modetime 需同时设置,不能仅设置其一。