

一次生产事故让我记住了权限模型的重要性:有个团队把 rustfsadmin 这个根账号的 key 直接下发给了三个业务组,结果其中一个组的脚本误删了另一个组的桶。根账号在 RustFS 里绕过所有策略检查,出事根本拦不住。RustFS 内置了一套以 AWS IAM 策略语言为模型的身份与访问管理系统,能让你像管 AWS 一样把权限拆到用户、组、服务账户,甚至接外部 IdP 做单点登录。这篇文章把身份类型和策略评估讲透,并给一条可落地的拆分路线。
1. 问题背景:根账号不是给你天天用的
RustFS 启动时通过 RUSTFS_ACCESS_KEY / RUSTFS_SECRET_KEY 创建的是根凭证,它拥有所有者语义,绕过所有策略检查。文档原话是「根账户绕过策略检查」。这把钥匙只该用来引导部署------创建第一批 IAM 用户和服务账户,然后日常操作全走这些受控身份。
我习惯的做法是:部署完第一件事就用根账号建一个 consoleAdmin 的管理员用户,把根 key 收进密钥库不再日常使用。剩下的按业务线拆用户、按团队拆组。
2. RustFS 的五类身份
RustFS 区分的身份类型,来源是官方 IAM 文档:
- 根凭证:启动时环境变量创建,仅用于初始设置和紧急管理。
- IAM 用户 :控制台或管理 API(
add-user)创建,面向人或应用的长期命名账户。 - 组 :控制台或管理 API(
update-group-members)创建,一次把一组策略挂到多个用户,成员继承所属每个组的策略。 - 服务账户(访问密钥) :
add-service-account创建,属于某个父用户的派生凭证,继承父用户权限,可加嵌入式会话策略进一步收窄,还能设过期时间------适合 CI、脚本这类非人操作。 - STS 临时凭证 :通过
AssumeRole/AssumeRoleWithWebIdentity获取,有效期 15 分钟到 12 小时,带访问密钥、秘密密钥和会话令牌。 - 外部 OIDC 身份 :Keycloak、Authing 等标准 OIDC IdP 做控制台 SSO,ID 令牌里的
groups/roles声明映射到 RustFS 策略名,再签发 STS 凭证。

3. 内置策略与自定义策略
RustFS 自带五个内置(canned)策略,覆盖大多数场景:readwrite、readonly、writeonly、diagnostics、consoleAdmin。日常八成需求靠这几个就够了。
需要更细的粒度时,写一条 AWS IAM 兼容的 JSON 策略文档挂上去。比如只允许某个应用读写 app-a 桶:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:ListBucket"],
"Resource": ["arn:aws:s3:::app-a", "arn:aws:s3:::app-a/*"]
}
]
}
策略是具名 JSON 文档存进 RustFS,通过控制台或管理 API(set-user-or-group-policy)绑定到用户或组。一个用户可挂多条策略,组里的成员还会叠加组的策略。
4. 策略评估语义:显式拒绝优先
理解评估顺序,才能不写出「以为允许其实被拒」的策略。RustFS 合并一个身份的所有策略语句后按这个次序判:
- 显式拒绝优先 :只要有匹配的
Deny语句,不管有没有Allow,一律拒绝。 - 所有者快捷:没有匹配显式拒绝时,根(所有者)账户直接放行。
- 必须显式允许 :其他身份至少要有匹配的
Allow语句。 - 默认拒绝:没有任何语句匹配,请求被拒。
服务账户和带会话策略的 STS 会话,有效权限取交集------父身份策略和会话策略都必须允许。这条对「临时给外包人员开一个只读、且只能访问某个前缀的凭证」特别好用:父用户本来有全量权限,但会话策略把它收窄到只读 + 单前缀。

5. 一条可落地的拆分路线
我建议按这四步把权限体系建起来:
- 用根账号创建一个
consoleAdmin管理员用户,收起根 key。 - 按团队建组(如
team-data、team-ml),挂readwrite或自定义策略。 - 每个业务线建 IAM 用户,加入对应组;CI/脚本走服务账户并设过期时间。
- 如果已经有 Keycloak / Authing 这类 IdP,直接接 OIDC SSO,让研发用公司账号登录控制台,权限由 IdP 的
groups声明驱动。
一个中性提醒:根凭证无法被策略限制,所以千万不要把它当日常账号下发。另外服务账户没有自己的策略绑定,它继承父用户------给服务账户收窄权限要靠创建时嵌入的会话策略,而不是单独挂策略。
6. 总结与下一步
RustFS 的 IAM 是 AWS IAM 兼容模型,意味着你现有的策略知识和工具链基本能直接搬。先把根账号收好,再用「用户 + 组 + 内置策略」三件套把日常权限管起来,需要跨系统统一身份就上 OIDC。
下一步可以打开控制台试建一个 readonly 用户、用 mc 配它的 key 验证只能读不能写;多集群场景再去看站点复制和跨桶复制的权限怎么配。
以下是深入学习 RustFS 的推荐资源:RustFS
官方文档: RustFS 官方文档- 提供架构、安装指南和 API 参考。
GitHub 仓库: GitHub 仓库 - 获取源代码、提交问题或贡献代码。
社区支持: GitHub Discussions- 与开发者交流经验和解决方案。
意见反馈:GitHub Issues