RustFS IAM 管理
概述 RustFS 身份与访问管理(IAM)的身份类型、策略附加方式和策略评估语义。
RustFS 内置一套以 AWS IAM 策略语言为模型的身份与访问管理(Identity and Access Management,IAM)系统。每个请求,无论是 S3 数据访问、控制台操作还是管理 API 调用,都先根据凭证进行身份验证,再根据附加到该身份的策略进行授权。
身份类型
RustFS 区分以下身份类型:
| 身份 | 创建方式 | 典型用途 |
|---|---|---|
| 根凭证 | 服务器启动时通过 RUSTFS_ACCESS_KEY / RUSTFS_SECRET_KEY 环境变量创建 | 初始设置和紧急管理。根账户绕过策略检查(所有者语义)。 |
| IAM 用户 | 控制台或管理 API(add-user) | 面向人员或应用程序的长期命名账户。 |
| 组 | 控制台或管理 API(update-group-members) | 一次将一组策略附加到多个用户。用户会继承其所属每个组的策略。 |
| 服务账户(访问密钥) | 控制台或管理 API(add-service-account) | 属于父用户的派生凭证。它们继承父用户的权限,可选择通过嵌入式会话策略进一步限制权限,还可以设置过期时间。 |
| STS 临时凭证 | AssumeRole / AssumeRoleWithWebIdentity STS 调用 | 有效期较短(15 分钟至 12 小时)的凭证,包含访问密钥、秘密密钥和会话令牌。 |
| 外部 OIDC 身份 | OpenID Connect 提供商(Keycloak、Authing 和其他标准 OIDC IdP) | 控制台 SSO。ID 令牌声明映射到 RustFS 策略名称,RustFS 随后签发 STS 凭证。 |
策略无法限制根凭证。请仅使用根凭证引导部署,然后创建 IAM 用户和服务账户来处理日常工作。
策略如何附加到身份
策略是存储在 RustFS 中的具名 JSON 文档。附加方式如下:
- 用户绑定:将一个或多个策略名称附加到 IAM 用户(通过
set-user-or-group-policy,或接受策略列表的idp/builtin/policy/attach端点)。 - 组绑定:使用相同机制并设置
isGroup=true;组内每个成员除了获得自己的策略,还会获得组策略。 - 服务账户:没有自己的策略绑定。服务账户使用父用户的组合策略进行评估。如果创建服务账户时提供了显式策略文档,该会话策略会作为额外限制应用(两者都必须允许请求)。
- STS 会话:继承父身份的策略。
Policy请求参数可在AssumeRole中嵌入额外的会话策略,进一步限制临时凭证。 - OIDC 身份:将 ID 令牌的
groups/roles声明值与 RustFS 策略名称进行匹配;匹配到的策略控制所签发的 STS 凭证。
RustFS 附带以下内置(预定义)策略:readwrite、readonly、writeonly、diagnostics 和 consoleAdmin。有关这些策略的内容以及如何编写自定义策略,请参阅用户、组和策略。
策略评估语义
当一个身份附加了多个策略时,RustFS 会合并这些策略的语句(删除重复项),并评估合并后的文档:
- 显式拒绝优先。 首先检查所有
Deny语句;如果任何匹配的Deny语句适用于请求,无论是否存在Allow,都会拒绝该请求。 - 所有者快捷规则。 如果没有匹配到显式拒绝,则允许根(所有者)账户的请求。
- 必须显式允许。 对其他身份,必须至少有一条
Allow语句与请求的操作和资源匹配。 - 默认拒绝。 如果没有语句匹配,则拒绝请求。
对于带有会话策略的服务账户和 STS 会话,有效权限取交集:父身份的策略和会话策略都必须允许该请求。