暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

对象存储WORM功能的实现方案

分布式存储技术进阶 2021-01-24
4562

WORM (write once, read many),即一次写入多次读取技术,即文件被写入完成后通过设置使其进入只读状态。在该状态下保护期内文件只能被读取,无法删除、修改或重命名。通过采用WORM技术对存储数据进行保护后,可以防止其因意外而修改,这就保证了企业或组织对一些重要的业务数据安全存储的需求。下面基于ceph对象存储,总结出了worm功能实现的两种方案。


01


基于对象锁实现worm


基于对象锁的机制实现,该方案和对象的多版本功能强相关,在多版本的基础上,实现了对对象的保护机制。

Boto 3接口

1、创建支持对象锁的存储桶

建桶的时候,需要打开worm开关,否则后续对象锁保护周期设置不生效。

Boto 3创建桶的接口client.create_bucket中设置参数ObjectLockEnabledForBucket=True。该参数会修改桶的元数据BucketInfo,自动打开多版本功能,并设置对象锁开关的标记。

2、设置或修改对象锁的策略配置

该接口的关键在于设置对象的保护策略Rule,Rule中包括对象的保留模式和对象的保护期限。保留模式 governance监管模式 compliance 合规模式;保留期限,daysyears二选一,不能同时传入;{}代表清空默认保留期限。


保留模式一般设置是合规模式,在合规性模式中,任何用户都不能覆盖或删除受保护的对象版本,包括 AWS 账户中的根用户。在合规性模式下锁定对象后,其保留模式便无法更改,其保留期限也不能缩短。监管模式,如果有特殊权限可以在有效期内删除。使用监管模式,可以保护对象以免被大多数用户删除,但仍可向部分用户授予在必要时更改保留设置或删除对象的权限。还可以在创建合规性模式保留期限之前使用监管模式测试保留期限设置。要覆盖或删除监管模式保留设置,用户必须具有 s3:BypassGovernanceRetention 权限,并且必须在需要覆盖监管模式的任何请求中显式包含 x-amz-bypass-governance-retention:true 作为请求标题。 

设置成功后,该配置会持久化保存到桶的元数据bucket instance中。表示对保护策略设置以后上传至该桶的对象,都会生效。后续操作中,用户执行上传对象后,写对象元数据到扩展属性时,若检查到该对象之前没有设置过保护周期,则将桶的保护策略设置到该对象的扩展属性(user.rgw.object-retention)中。


3、设置单个对象的保护期限,接口调用:

同样需要设置保护期限Retention,包含保护模式和截止日期。对象网关RGW将配置设置到对象的扩展属性user.rgw.object-retention中保存。

 

因为开启了对象锁配置即默认打开了多版本开关,因为对象更改后上传到RGW,都会当成一个新的版本保存。所以对象上传过程是没有保护周期的时间检查的。都是基于多版本对历史对象进行保存。

只有在删除对象时,会有保护周期的检查逻辑,如果在对象的保护期内是不允许删除的,报权限错误。如果超出最大保护期,则对象可以被删除。注意,删除该对象时必须要带版本id,才能进行保护期检查。因为对象锁是基于对象版本的,如果不带版本ID进行对象删除,则按照多版本的处理策略,当前版本会变成一个历史版本。此时查询桶中无当前版本了。

 

另外如果设置了对象的生命周期,对象锁的优先级更高,也就是说如果生命周期到了,但对象还是处于保护期内,RGW生命周期在清理对象时会将该对象保留。



02


基于桶的元数据实现worm


方案一中基于对象锁,其实是基于对象多版本功能的,设置了桶的对象锁开关,即默认打开了多版本的功能,对象的读取需要带版本ID才能获取到想要的对象数据。


另外一种较为简单的方案,基于对象桶,设置一个对象worm开关,将开关配置持久化保留到桶的元数据bucket instance信息中。可以做到和多版本互斥,即多版本和对象worm只能设置一个。在上传对象和删除对象的处理流程中,增加判断,若当前对象已经存在,则不允许更新或者删除,达到对对象的保护作用。如果做的复杂一些,也可以设置保护周期。该方案较为简洁,不依赖于对象锁机制,和多版本功能也是解耦的。



文章转载自分布式存储技术进阶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论