worm存储机制
什么是 WORM?
WORM,全称 Write Once Read Many,是一种防篡改存储策略。其核心特征是:对象一旦写入,就不能被修改或删除,直到达到预设的保留期(Retention Period)或者永不删除。
为什么需要 WORM?
1.合规性要求
金融行业要求审计日志不可篡改
医疗影像、患者记录需保存多年且保持完整性
2.防止误删/恶意删除
即便管理员也不能轻易删除或覆盖数据
3.数据长期归档
冷数据存储,保障长期读取需求
MinIO 中的 WORM 实现方式
MinIO 的 WORM 功能基于 对象锁定机制(Object Locking),通过为对象设定不可变的保留时间,来确保其不可被覆盖或删除。
MinIO 支持两种 WORM 模式:
- Governance 治理模式:对象不可被删除或覆盖,但管理员拥有绕过权限
- Compliance 合规模式:对象不可被任何人删除,即便是管理员,直到保留期结束
在 MinIO 上启用 WORM
1.创建支持对象锁定的桶
mc mb --with-lock local/worm-bucket
--with-lock参数必须在桶创建时指定,已存在的桶不能开启 WORM
2.设置默认的 WORM 保留策略
mc retention set --default GOVERNANCE 30d local/worm-bucket
#检查桶状态
mc stat local/worm-bucket
新上传的对象将在默认保留期内(30 天)不可被删除或修改。
3.上传文件测试
echo "tttyyy" > file1
#上传对象
mc cp file1 local/worm-bucket/
#删除对象
mc rm local/worm-bucket/file1
Created delete marker `local/worm-bucket/file1` (versionId=c5c45b73-624b-4812-b80f-4f154dd8b717).
尝试使用 MinIO 客户端(mc)删除 local/worm-bucket 存储桶中的文件 file1,但命令并没有直接删除文件,而是创建了一个删除标记(Delete Marker),并且返回了版本 ID(versionId=c5c45b73-624b-4812-b80f-4f154dd8b717)。
删除标记是一个特殊的对象版本,隐藏了文件的最新版本,但文件的实际数据仍然保留。
#再次上传文件
mc cp file1 local/worm-bucket/
#列出对象版本信息
mc ls --versions local/worm-bucket/file1
[2025-06-10 06:14:00 UTC] 7B STANDARD b45836ef-c702-46be-abe3-f4f42f302b54 v3 PUT file1
[2025-06-10 06:05:40 UTC] 0B STANDARD c5c45b73-624b-4812-b80f-4f154dd8b717 v2 DEL file1
[2025-06-10 06:05:01 UTC] 7B STANDARD 547fba0d-dfb6-4df1-9684-f38d12356795 v1 PUT file1
#查看文件的保留状态
mc retention info local/worm-bucket/file1
Name : local/worm-bucket/file1
Mode : GOVERNANCE, expiring in 29 days
Legal Hold 独立于 Governance 或 Compliance 模式的保留策略。一个对象可以同时有 Legal Hold 和保留期。在 Legal Hold 生效期间,即使 Governance 模式的保留期结束或有 s3:BypassGovernanceRetention 权限,也无法删除对象。
Legal Hold 无时间限制,需手动解除,适合法律或合规场景。
#检查legalhold持有状态
bash-5.1# mc legalhold info local/worm-bucket/file1
[ Not set ] file1
#设置legalhold
mc legalhold set local/worm-bucket/file1
#解除legalhold
mc legalhold clear local/worm-bucket/file1
4.管理员强制删除(仅适用于 Governance 模式)
#直接删除特定版本的文件
bash-5.1# mc rm --version-id c5c45b73-624b-4812-b80f-4f154dd8b717 --bypass local/worm-bucket/file1
Removed `local/worm-bucket/file1` (versionId=c5c45b73-624b-4812-b80f-4f154dd8b717).
#删除文件的所有版本
mc rm --versions --bypass --force local/worm-bucket/file1
如果无法删除,需要确认当前是否有相关权限(可能会出现一些问题)
mc admin policy info local <policy-name>
cat > policy.json <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:BypassGovernanceRetention",
"s3:PutObjectLegalHold",
"s3:DeleteObject",
"s3:GetObjectRetention",
"s3:GetObjectLegalHold"
],
"Resource": "arn:aws:s3:::worm-bucket/*"
}
]
}
EOF
mc admin policy create local bypass-policy policy.json
mc admin policy attach local bypass-policy --user user001
5.Compliance 模式(不可绕过)
在 Compliance 模式下,文件在保留期内无法删除,即使是管理员也无权绕过。你必须等待保留期结束
#查看文件的保留状态
mc retention info local/worm-bucket/file1
Name : local/worm-bucket/file1
Mode : GOVERNANCE, expiring in 29 days

浙公网安备 33010602011771号