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 附带以下内置(预定义)策略:readwritereadonlywriteonlydiagnosticsconsoleAdmin。有关这些策略的内容以及如何编写自定义策略,请参阅用户、组和策略

策略评估语义

当一个身份附加了多个策略时,RustFS 会合并这些策略的语句(删除重复项),并评估合并后的文档:

  1. 显式拒绝优先。 首先检查所有 Deny 语句;如果任何匹配的 Deny 语句适用于请求,无论是否存在 Allow,都会拒绝该请求。
  2. 所有者快捷规则。 如果没有匹配到显式拒绝,则允许根(所有者)账户的请求。
  3. 必须显式允许。 对其他身份,必须至少有一条 Allow 语句与请求的操作和资源匹配。
  4. 默认拒绝。 如果没有语句匹配,则拒绝请求。

对于带有会话策略的服务账户和 STS 会话,有效权限取交集:父身份的策略和会话策略都必须允许该请求。

本节内容

本页目录