MinIO 对象锁定

概述

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

根据 Cohasset Associates 的说明,MinIO 对象锁定 提供关键的数据保留合规能力,并满足 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 mc CLI 或 S3 兼容 SDK,为对象启用或禁用无限期 legal hold 保留。

你可以对已经处于 COMPLIANCEGOVERNANCE 锁定下的对象设置 legal hold。 即使保留锁过期,对象在 legal hold 生效期间仍会保持 WORM 锁定。 你或其他拥有必要权限的用户必须显式解除 legal hold,才能移除 WORM 锁。

使用 mc legalhold set 命令切换对象的 legal hold 状态。

mc legalhold set ALIAS/PATH
  • ALIAS 替换为已配置 MinIO 部署的 alias
  • PATH 替换为要启用 legal hold 的对象路径。

对象保留模式

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

最后修改 August 2, 2026: init commit (8338d5b)

本页部分内容改编自 MinIO 对象存储文档,© 2020–至今 MinIO, Inc.,依据 CC BY 4.0 授权,由 Silo 项目转换与维护。归属与署名

本页为非官方中文翻译。如与英文原文有出入,以英文原文为准。