对象锁定需提供以下两种方式来管理对象保留:保留期限和依法保留。
- 保留期限指定对象可以保持锁定状态的固定时间段。在该时间段内,对象将受WORM保护,不能被覆盖或删除。
- 依法保留提供的保护与保留期限相同,但没有到期日期。依法保留将一直有效,直至明确将其删除。依法保留与保留期限无关。
关于对象版本,可以同时具有保留期限和依法保留、具有其中一个或不具有任何一个。
对象锁定需适用于受版本控制的存储桶,保留期限和依法保留则适用于单个对象版本。在锁定某一对象版本后,ZOS对象存储需将锁定信息存储在该对象版本的元数据中。对对象实施保留期限或依法保留仅保护在请求中指定的版本,它不阻止创建该对象的新版本。如果将一个与现有的受保护对象键名相同的对象放在存储桶中,ZOS将创建该对象的新版本、将其存储在请求的存储桶中,现有受保护版本的对象将根据其保留配置保持锁定状态。
对象锁定保留期限方式需提供两种保留模式:
- 监管模式(GOVERNANCE)
- 合规性模式(COMPLIANCE)
这两种保留模式对对象应用不同级别的保护,可将任意一种保留模式应用于受对象锁定保护的任意对象版本。在监管模式中,除非用户具有特殊权限,否则用户不能覆盖或删除对象版本,或更改其锁定设置。在合规性模式下锁定对象后,若其保留模式不进行更改,则其保留期限也不能缩短。合规性模式确保在保留期限内无法覆盖或删除对象版本。
在存储桶配置上,1) 只能为新存储桶启用对象锁定;2) 若在创建存储桶时启用了对象锁定,将自动为该存储桶启用版本控制;3) 若在创建存储桶时启用了对象锁定,则无法为该存储桶禁用对象锁定或暂停版本控制;4) 存储桶可以开启默认的对象锁定配置,对新放入的对象版本实施存储桶默认保留模式和保留期限,也可为存储桶设置默认设置并拒绝用户配置对象保留设置的权限。
即使无法删除受保护的对象版本,但可为该对象创建删除标记。对对象实施删除标记不会删除任何对象版本。无论基础对象中实施任何保留期限或依法保留,删除标记均不受WORM保护。对象生命周期管理配置将继续正常应用于受保护的对象,包括实施删除标记,但受保护的对象版本将一直保持安全状态,不会被生命周期配置删除或覆盖。
若实现对象锁定功能,可在存储桶级别上增加默认配置,同时亦可在对象放入存储桶后,对新对象版本增加锁定设置,结合对象保留期限和依法保留这两种方式,总共需新增6种配置接口。
1.1 PutBucketObjectLock
在存储桶级别上设置默认的保留期限设置,执行该操作,必须具有s3:PutBucketObjectLockConfiguration权限,bucket拥有者默认具有此权限,并可以授权其他用户,权限授予可通过PutBucketPolicy接口设置。
在指定存储桶的同时,若是配置了默认保留规则,则该存储桶将具备默认保留设置,新放入的对象版本将受到保护,可以天或年为单位配置保留期限,则放入的对象会以创建时间为起点加上保留期限来计算保留到期日期,最终放入对象元数据中。存储桶保留模式配置监管模式时,要缩短对象版本保留期限或删除对象版本,用户必须具有s3:BypassGovernanceRetention权限。在配置为合规性模式时,在对象版本到期之前无法进行删除和修改操作。无论是监管模式还是合规性模式,延长保留到期日期均无需特殊权限。
1.2 GetBucketObjectLock
根据指定的bucket,获取对应的默认保留设置。执行该操作,用户必须具有s3:GetBucketObjectLockConfiguration权限,bucket拥有者默认具有此权限,并可以授权其他用户,权限授予可通过PutBucketPolicy接口设置。
1.3 PutObjRetention
在对象版本级别上进行保留期限设置。执行该操作,用户必须具有s3:PutObjectRetention权限,bucket拥有者默认具有此权限,并可以授权其他用户,权限授予可通过PutBucketPolicy接口设置。设置时需要指定保留配置,在保留模式为监管模式时,用户必须具有s3:BypassGovernanceRetention权限才能删除对象版本或缩短保留时间。在为合规性模式时,任何用户均不可删除和缩短保留期限。最终在配置之后会将保留期限设置写入到对象版本的元数据当中,一直保护对象版本直至保留到期日期。
1.4 GetObjRetention
根据指定的对象版本,获取对应的保留期限设置。执行该操作,用户必须具有s3:GetObjectRetention权限,bucket拥有者默认具有此权限,并可以授权其他用户,权限授予可通过PutBucketPolicy接口设置。
1.5 PutObjLegalHold
在对象版本级别上进行依法保留设置。执行该操作,用户必须具有s3:PutObjectLegalHold权限,bucket拥有者默认具有此权限,并可以授权其他用户,权限授予可通过PutBucketPolicy接口设置。设置时需要指定依法保留的开关,若为打开,则将一直保护对象版本,直至授权用户明确将其删除,若依法保留状态为关闭,则将不会对对象版本进行保护。
1.6 GetObjLegalHold
根据指定的对象版本,获取对应的依法保留设置。执行该操作,用户必须具有s3:GetObjectLegalHold权限,bucket拥有者默认具有此权限,并可以授权其他用户,权限授予可通过PutBucketPolicy接口设置。
2 逻辑设计
- 新建存储桶同时启用对象锁定,使能够获取存储桶的默认保留信息。在客户端创建存储桶的请求信息中包含请求头x-amz-bucket-object-lock-enable,且其值为true时,启用对象锁定。为了能够对多版本对象进行保护,在启用对象锁定的同时开启版本控制。
- 新建的存储桶启用了对象锁定,但还未包含默认保留期限,此时放入存储桶中的对象版本不能受到保护。可对存储桶设置默认保留期限设置,指定保留模式以及保留天数或年数,从而使放入此存储桶中的新对象版本均能够获取存储桶默认设置的保护。
- 在存储桶启用对象锁定的前提下,可对指定的单个对象版本实施保护。使用保留期限方式,需指定对象版本的保留模式和保留到期日期。在达到保留到期日期之前,对象版本将受到保护,若是要缩短保留到期日期,则对象版本的保留模式需为GOVERNANCE且需校验用户是否被赋予s3BypassGovernanceRetention权限。使用保留期限方式,可使对象版本拥有object-retention属性,若是存储桶已经设置了默认的保留期限设置,则对单个对象版本使用此方式将会覆盖获取的存储桶的默认保留期限设置。使用依法保留方式,则该对象版本将具备object-legal-hold属性,会一直受到保护,直至授权用户明确将其删除。单个对象版本的保留期限和依法保留属性可共存,共同提供有效保护。
- 在删除对象版本时,前提需要存储桶启用了对象锁定功能且提供版本ID,若无版本ID,则将会出现DeleteMarker记录。删除对象版本过程会校验对象版本的保留到期日期属性或依法保留属性,若其中之一仍有效,则将无法删除。在用户被赋予了s3BypassGovernanceRetention权限且对象版本的保留模式为GOVERNANCE时,可以绕过保留期限属性进行删除操作。若存储桶开启了生命周期功能,则在对象版本生命周期到期之时,若对象版本仍处在对象锁定保护中,则同样无法删除此对象版本。
- 在存储桶启用对象锁定的前提下,在上传对象操作时,也可同时配置对象保留模式和保留到期日期或依法保留状态,实现对对象版本的保护。
- 在获取存储桶默认保留到期设置、对象版本保留到期设置和对象版本依法保留设置时,需要用户具备相应的操作权限,从而获取到响应信息。
- 若存储桶已经开启对象锁定功能,则不能关闭多版本功能,否则将直接返回桶状态错误。