返回顶部

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
posted @ 2025-06-10 11:15  十方央丶  阅读(196)  评论(0)    收藏  举报