文档

MinIO 对象锁定

概述

MinIO 对象锁定(“对象保留”)通过强制执行一次写入、多次读取(WORM)不可变性,防止 已启用版本控制的对象 被删除。MinIO 同时支持 基于时长的对象保留无限期 legal hold 保留

根据 Cohasset Associates 的说明,MinIO Object Locking 提供关键的数据保留合规能力,并满足 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求。

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.csvv1 版本已解锁,因而可被删除。

教程

创建启用对象锁定的存储桶

按照 S3 的行为,必须在创建存储桶时启用对象锁定。 你可以使用 MinIO mc CLI 或 S3 兼容 SDK 创建启用了对象锁定的存储桶。

使用带有 --with-lock 选项的 mc mb 命令创建启用了对象锁定的存储桶:

mc mb --with-lock ALIAS/BUCKET
  • ALIAS 替换为已配置 MinIO 部署的 alias

  • BUCKET 替换为要创建的存储桶 名称

配置存储桶默认对象保留

你可以使用 MinIO mc CLI 或 S3 兼容 SDK 配置对象锁定规则(“对象保留”)。

MinIO 同时支持设置存储桶默认保留规则和按对象设置保留规则。 以下示例演示的是存储桶默认保留。对于按对象设置保留,请参见所选 SDK 中相应 PUT 操作的文档。

使用带有 --recursive--default 选项的 mc retention set 命令,为存储桶设置默认保留模式:

mc retention set --recursive --default MODE DURATION ALIAS/BUCKET

对象保留模式

MinIO 实现了以下 S3 对象锁定模式

模式

说明

GOVERNANCE 模式

阻止非特权用户执行任何会变更对象或其锁定设置的操作。

在存储桶或对象上拥有 s3:BypassGovernanceRetention 权限的用户,可以修改对象或其锁定设置。

在配置的保留规则持续时间结束后,MinIO 会自动解除该锁。

COMPLIANCE 模式

阻止任何会变更对象或其锁定设置的操作。

包括 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 仍会阻止其修改该对象。