RustFS IAM 管理

概述 RustFS 身份与访问管理(IAM)的身份类型、策略附加方式和策略评估语义。

RustFS 内置一套以 AWS IAM 策略语言为模型的身份与访问管理(Identity and Access Management,IAM)系统。每个请求,无论是 S3 数据访问、控制台操作还是管理 API 调用,都先根据凭证进行身份验证,再根据附加到该身份的策略进行授权。

身份类型

RustFS 区分以下身份类型:

身份创建方式典型用途
根凭证服务器启动时通过 RUSTFS_ACCESS_KEY / RUSTFS_SECRET_KEY 环境变量创建初始设置和紧急管理。根账户绕过 IAM 身份策略评估(所有者语义)。
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 身份策略,但存储桶策略仍可拒绝根账户的 S3 请求。只有 GetBucketPolicyPutBucketPolicyDeleteBucketPolicy 可以绕过存储桶策略的拒绝,以便所有者恢复访问。请仅使用根凭证引导部署,然后创建 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. 所有者快捷规则。 根账户绕过 IAM 身份策略评估;上述存储桶策略检查及其例外仍然适用。
  3. 必须显式允许。 对其他身份,必须至少有一条 Allow 语句与请求的操作和资源匹配。
  4. 默认拒绝。 如果没有语句匹配,则拒绝请求。

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

本节内容

本页目录