MinIO 对象锁定
概述
MinIO 对象锁定(“对象保留”)通过强制执行一次写入、多次读取(WORM)不可变性,防止 已启用版本控制的对象 被删除。MinIO 同时支持 基于时长的对象保留 和 无限期 legal hold 保留。
根据 Cohasset Associates 的说明,MinIO Object Locking 提供关键的数据保留合规能力,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求。
删除操作 在
已启用版本控制的存储桶 中遵循常规行为,即 MinIO 会为对象创建 DeleteMarker。不过,对象中非 Delete Marker 的版本仍受保留规则约束,可防止任何针对特定版本的删除或覆盖尝试。
MinIO 对象锁定在功能和 API 层面与 AWS S3 兼容。 本页概述了 MinIO 中对象锁定/保留的实现概念。更多信息请参见 AWS S3 文档 How S3 Object Lock works。
按照 S3 的行为, 只能在创建存储桶时启用对象锁定。对于创建时未启用锁定的存储桶,之后无法再启用对象锁定。启用后,你可以在任意时刻配置对象保留规则。对象锁定依赖 版本控制,并会隐式启用该特性。
与版本控制的交互
受 WORM 锁定保护的对象在锁过期或被显式解除之前均不可变更。锁定以对象版本为粒度,每个版本都独立保持不可变。
如果应用对受锁定对象执行未指定版本的删除操作,该操作会生成一个 Delete Marker。 任何显式删除受 WORM 锁定对象的尝试都会报错失败。Delete Marker 不 受 WORM 锁定保护。 更多信息请参见 S3 文档 Managing delete markers and object lifecycles。
例如,考虑以下默认启用了 GOVERNANCE 模式 锁定的存储桶:
$ mc ls --versions play/locking-guide
[DATETIME] 29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
[DATETIME] 32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
[DATETIME] 23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv
由于对象锁定设置,对 data.csv 的*特定版本*执行删除会失败:
$ mc rm --version-id 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 play/data.csv
Removing `play/locking-guide/data.csv` (versionId=62429eb1-9cb7-4dc5-b507-9cc23d0cc691).
mc: <ERROR> Failed to remove `play/locking-guide/data.csv`.
Object, 'data.csv (Version ID=62429eb1-9cb7-4dc5-b507-9cc23d0cc691)' is
WORM protected and cannot be overwritten
对 data.csv 执行未指定版本的删除会成功,并为对象创建一个新的 DeleteMarker:
$ mc rm play/locking-guide/data.csv
[DATETIME] 0B acce329f-ad32-46d9-8649-5fe8bf4ec6e0 v4 DEL data.csv
[DATETIME] 29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
[DATETIME] 32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
[DATETIME] 23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv
与生命周期管理的交互
对于受过期规则覆盖的对象,MinIO 对象过期 会遵循所有生效中的对象锁定和保留设置。
对于仅作用于*当前*对象版本的过期规则, MinIO 会为受锁定对象创建一个 Delete Marker。
对于作用于*非当前对象版本*的过期规则, MinIO 只能在保留期结束*之后*,或保留已被显式解除时(例如 legal hold)对非当前版本执行过期。
例如,考虑以下默认启用了 GOVERNANCE 模式 且保留期为 45 天的存储桶:
$ mc ls --versions play/locking-guide
[7D] 29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
[30D] 32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
[60D] 23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv
为超过 7 天的*当前*对象创建过期规则时,会为该对象生成一个 Delete Marker:
$ mc ls --versions play/locking-guide
[0D] 0B acce329f-ad32-46d9-8649-5fe8bf4ec6e0 v4 DEL data.csv
[7D] 29B 62429eb1-9cb7-4dc5-b507-9cc23d0cc691 v3 PUT data.csv
[30D] 32B 78b3105a-02a1-4763-8054-e66add087710 v2 PUT data.csv
[60D] 23B c6b581ca-2883-41e2-9905-0a1867b535b8 v1 PUT data.csv
不过,对于超过 7 天的*非当前*对象,过期规则只有在已配置的 WORM 锁过期*之后*才会生效。由于该存储桶设置了 45 天的 GOVERNANCE 保留,因此只有 data.csv 的 v1 版本已解锁,因而可被删除。
教程
创建启用对象锁定的存储桶
按照 S3 的行为,必须在创建存储桶时启用对象锁定。
你可以使用 MinIO mc CLI 或 S3 兼容 SDK 创建启用了对象锁定的存储桶。
使用带有 --with-lock
选项的 mc mb 命令创建启用了对象锁定的存储桶:
mc mb --with-lock ALIAS/BUCKET
配置存储桶默认对象保留
你可以使用 MinIO mc CLI 或 S3 兼容 SDK 配置对象锁定规则(“对象保留”)。
MinIO 同时支持设置存储桶默认保留规则和按对象设置保留规则。
以下示例演示的是存储桶默认保留。对于按对象设置保留,请参见所选 SDK 中相应 PUT 操作的文档。
使用带有
--recursive 和
--default 选项的
mc retention set 命令,为存储桶设置默认保留模式:
mc retention set --recursive --default MODE DURATION ALIAS/BUCKET
将
MODE替换为 COMPLIANCE 或 GOVERNANCE。将
DURATION替换为对象锁保持生效的时长。将
BUCKET替换为要设置默认保留规则的存储桶名称。
启用 Legal Hold 保留
你可以使用 MinIO mc CLI 或 S3 兼容 SDK,为对象启用或禁用无限期 legal hold 保留。
你可以对已经处于 COMPLIANCE 或 GOVERNANCE 锁定下的对象设置 legal hold。 即使保留锁过期,对象在 legal hold 生效期间仍会保持 WORM 锁定。 你或其他拥有必要权限的用户必须显式解除 legal hold,才能移除 WORM 锁。
使用 mc legalhold set 命令切换对象的 legal hold 状态。
mc legalhold set ALIAS/PATH
对象保留模式
MinIO 实现了以下 S3 对象锁定模式:
模式 |
说明 |
|---|---|
阻止非特权用户执行任何会变更对象或其锁定设置的操作。 在存储桶或对象上拥有 在配置的保留规则持续时间结束后,MinIO 会自动解除该锁。 |
|
阻止任何会变更对象或其锁定设置的操作。 包括 MinIO root 用户在内的任何 MinIO 用户都无法修改对象或其设置。 在配置的保留规则持续时间结束后,MinIO 会自动解除该锁。 |
GOVERNANCE 模式
处于 GOVERNANCE 锁定下的对象可防止非特权用户执行写操作。
GOVERNANCE 锁定对象提供受管控的不可变性。拥有 s3:BypassGovernanceRetention 操作权限的用户可以修改被锁定对象、调整保留时长,或完全解除该锁。绕过 GOVERNANCE 保留还要求在请求中设置 x-amz-bypass-governance-retention:true header。
MinIO 的 GOVERNANCE 锁在功能上与
S3 GOVERNANCE 模式 完全一致。
COMPLIANCE 模式
处于 COMPLIANCE 锁定下的对象可防止*所有*用户执行写操作,包括 MinIO root 用户。
COMPLIANCE 锁定对象提供完全不可变性。
在配置的保留时长结束之前,无法更改或移除该锁。
MinIO 的 COMPLIANCE 锁在功能上与
S3 COMPLIANCE 模式 完全一致。
Legal Hold
处于 legal hold 状态下的对象可防止*所有*用户执行写操作,包括 MinIO root 用户。
legal hold 为无限期,并对锁定对象强制执行完全不可变性。
只有拥有 s3:PutObjectLegalHold 权限的特权用户才能设置或解除 legal hold。
legal hold 在对象级别生效。 如果你为一组对象启用 legal hold,例如某个存储桶中的现有内容,则该存储桶后续新创建的对象不会受到影响。
legal hold 与 GOVERNANCE 模式 和 COMPLIANCE 模式 保留设置是互补关系。
同时受 legal hold 和 GOVERNANCE/COMPLIANCE 保留规则保护的对象,会持续保持 WORM 锁定,直到 legal hold 被解除*且*规则到期。
对于 GOVERNANCE 锁定对象,即使用户拥有绕过保留的必要权限,legal hold 仍会阻止其修改该对象。