

我接手过一个数据平台,桶里几千万对象,某天合规要一份"谁在什么时候删了关键文件"的证明,运维翻了半天发现存储根本没开任何审计能力,只能从应用日志里反推。后来换成带对象锁和事件通知的存储,这类事才真正可控。
RustFS 常被当成"能 PUT/GET 的 S3 桶",但它背后那批 S3 管理能力其实已经可用。下面 5 个,是选型时最容易被忽略、出事时最值钱的。
1. 对象版本控制:误删可回退
开了版本控制,同名对象的每次覆盖都留旧版本,误删能取回。已纳入官方兼容性测试门禁:
aws --endpoint-url http://localhost:9000 s3api put-bucket-versioning \
--bucket my-bucket --versioning-configuration Status=Enabled
# 列出所有版本
aws --endpoint-url http://localhost:9000 s3api list-object-versions --bucket my-bucket
适合数据集、配置、模型权重这类"改了还想留底"的对象。
2. 对象锁定(WORM):合规不可删
对象锁把对象钉成"写一次读多次",在保留期内禁止修改或删除,满足 FINRA 4511、CFTC 这类合规要求。RustFS 官网把 WORM Compliance 列为正式能力:
# 建一个带合规保留的对象锁配置(保留 365 天)
aws --endpoint-url http://localhost:9000 s3api put-object-lock-configuration \
--bucket my-bucket \
--object-lock-configuration '{"ObjectLockEnabled":"Enabled","Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":365}}}'
法律存证、审计原始数据这类"绝对不能删"的场景,直接上对象锁,比靠流程约束可靠。
3. 事件通知:对象变了就触发你的系统
对象创建、删除、访问都能推到外部系统。RustFS 支持 webhook、Kafka、MQTT、MySQL、PostgreSQL、NATS、Redis、AMQP、Pulsar 九类目标。默认关闭,用环境变量开:
export RUSTFS_NOTIFY_ENABLE="true"
export RUSTFS_NOTIFY_WEBHOOK_ENABLE_PRIMARY="on"
export RUSTFS_NOTIFY_WEBHOOK_ENDPOINT_PRIMARY="https://events.example.com/rustfs"
然后给桶挂规则,只推 uploads/ 下 .dat 的创建和删除事件:
{
"QueueConfigurations": [
{
"Id": "primary-uploads",
"QueueArn": "arn:rustfs:sqs:us-east-1:primary:webhook",
"Events": ["s3:ObjectCreated:*", "s3:ObjectRemoved:*"],
"Filter": { "Key": { "FilterRules": [
{"Name": "prefix", "Value": "uploads/"},
{"Name": "suffix", "Value": ".dat"}
] } }
}
]
}
新文件落桶就自动触发下游处理,不用轮询 LIST。注意:当前只接受队列(queue)配置,SNS 主题和 Lambda 函数配置暂不支持。

4. 桶 / 对象标签:给存储做成本核算
标签看着不起眼,却是成本分摊和生命周期过滤的抓手。RustFS 桶标签、对象标签都已在兼容性门禁内:
aws --endpoint-url http://localhost:9000 s3api put-bucket-tagging \
--bucket my-bucket --tagging '{"TagSet":[{"Key":"team","Value":"ml"},{"Key":"env","Value":"prod"}]}'
按 team=ml 统计桶用量、按 env=prod 决定生命周期策略,财务和运维终于能对上账。
5. 生命周期:让冷数据自己归档
对象过期、分层转换交给生命周期规则自动跑。官方兼容性矩阵里"版本控制、对象锁、CORS、lifecycle 的部分行为"已测,可以按前缀/标签做过期与转换。配合标签用最顺:
aws --endpoint-url http://localhost:9000 s3api put-bucket-lifecycle-configuration \
--bucket my-bucket --lifecycle-configuration file://lifecycle.json
热数据留标准层,30 天没访问的自动转归档层,省下的钱是真金白银。
6. 边界:哪些还没做,别想当然
按官方兼容性矩阵(commit 1e6f5f1e,2026-08-09 验证),当前覆盖 455 条可执行 s3-tests、17 条未实现、270 条主动排除,所以选型时心里要有数:

- 桶访问日志(Bucket Access Logging)❌ 还在路线图,要审计访问现在靠事件通知 + 自身 OTLP 日志。
- ACL 鉴权被有意排除(⊘ Excluded):RustFS 走 IAM + 桶策略(Bucket Policy)+ 公开访问块(Public Access Block)这套,不提供传统 ACL。这点和 MinIO 思路一致,迁移时别去找
x-amz-acl那套。
- 生命周期目前是"部分行为已测",复杂转换规则上线前先小桶验证。
这些都是中性事实,不是"RustFS 不行"——任何 S3 兼容存储都有覆盖取舍。官方矩阵每 commit 更新,动手前翻一眼最新结果最稳。
7. 总结与下一步
- 版本控制、对象锁、事件通知、标签、生命周期,这 5 个 S3 能力 RustFS 已可用,出事时比"能存"值钱得多。
- 事件通知默认关,靠
RUSTFS_NOTIFY_*环境变量开;当前只支持队列类目标。
- 边界:桶访问日志还没做、ACL 被有意排除走 IAM/桶策略;生命周期部分行为已测。
下一步:挑一个最痛的桶,先开版本控制 + 挂一条 webhook 事件通知,感受"对象变了系统自动知道"的差别,再按需补对象锁和生命周期。
以下是深入学习 RustFS 的推荐资源:RustFS
官方文档: RustFS 官方文档- 提供架构、安装指南和 API 参考。
GitHub 仓库: GitHub 仓库 - 获取源代码、提交问题或贡献代码。
社区支持: GitHub Discussions- 与开发者交流经验和解决方案。
意见反馈:GitHub Issues
343



被折叠的 条评论
为什么被折叠?



