这是本节的多页打印视图。 .
身份与访问管理
-
1: Silo 身份管理
- 2: 用户管理
- 3: OpenID Connect 访问管理
- 4: 组管理
- 5: Active Directory / LDAP 访问管理
- 6: Silo 外部身份管理插件
- 7: 访问管理
- 8: Silo 外部访问管理插件
MinIO 要求客户端在每次发起新操作时同时完成认证与授权。
Authentication
用于验证连接客户端身份的过程。 MinIO 要求客户端使用 AWS Signature Version 4 protocol 进行认证,同时支持已弃用的 Signature Version 2 协议。 具体来说,客户端必须提供有效的 access key 和 secret key,才能访问任何 S3 或 MinIO 管理 API,例如
PUT、GET和DELETE操作。
Authorization
用于限制已认证客户端在部署上可执行操作及可访问资源的过程。 MinIO 使用 基于策略的访问控制 (PBAC),其中每个策略描述一条或多条规则,用于定义某个用户或某组用户的权限。 MinIO 在创建策略时支持 S3 特定的 actions 和 conditions。 默认情况下,MinIO 会 拒绝 访问用户已分配或继承策略中未显式引用的操作或资源。
Identity Management
MinIO 同时支持内部和外部身份管理:
| IDentity Provider (IDP) | 说明 |
|---|---|
| MinIO Internal IDP | 提供内置身份管理功能。 |
| OpenID | 支持通过兼容 OpenID Connect (OIDC) 的服务管理身份。 |
| MinIO Authentication Plugin | 支持使用 MinIO Authentication Plugin 扩展对接自定义外部身份管理器。 |
| Active Directory / LDAP | 支持通过 Active Directory 或 LDAP 服务管理身份。 |
| Access Management Plugin | 支持使用 MinIO Access Management Plugin 扩展对接自定义外部访问管理器。 |
完成认证后,MinIO 会根据该已认证身份是否 有权 对指定资源执行该操作,决定允许还是拒绝客户端请求。
Access Management
MinIO 使用 基于策略的访问控制 (PBAC) 来定义已认证用户可访问的授权操作和资源。每个策略描述一条或多条 actions 与 conditions,用于说明某个 user 或 group 的权限。
MinIO 负责策略的创建与存储。将策略分配给用户或组的具体流程取决于所配置的 IDentity Provider (IDP)。
使用 MinIO Internal IDP 的 MinIO 部署,要求使用 mc admin policy attach 命令将一个或多个策略显式关联到用户。用户也可以继承其所属 groups 上附加的策略。
默认情况下,MinIO 会 拒绝 访问附加或继承策略未显式允许的操作或资源。未被显式分配策略且未继承任何策略的用户,无法执行任何 S3 或 MinIO 管理 API 操作。
对于使用外部 IDP 的 MinIO 部署,策略分配方式取决于所选 IDP:
MinIO 会检查 JSON Web Token (JWT) claim(默认是 MinIO 不支持将 OIDC 用户身份分配到 groups。因此,IDP 管理员必须将所有必需策略分配到用户的 policy claim 中。 更多信息请参见 外部托管身份的访问控制。 |
|
MinIO 会检查是否存在某个策略,其名称与已认证 AD/LDAP 用户的 Distinguished Name (DN) 匹配。 MinIO 还支持查询已认证 AD/LDAP 用户的组成员关系。对于每个返回的组,MinIO 都会分配名称与该组 DN 匹配的策略。 如果没有任何策略与用户 DN 或 用户任一组 DN 匹配,则该用户无法在 MinIO 部署上执行任何操作。 更多信息请参见 外部托管身份的访问控制。 |
MinIO PBAC 在设计上兼容 AWS IAM 策略语法、结构和行为。MinIO 文档会尽力覆盖 IAM 特定行为和功能。若需要更完整的 IAM、IAM 策略或 IAM JSON 语法文档,请参考 IAM documentation。
Deny overrides Allow
MinIO 遵循 AWS IAM 策略求值规则,即在同一操作/资源上,Deny 规则会覆盖 Allow 规则。例如,如果某个用户被显式分配的策略对某个操作/资源包含 Allow 规则,而其所属某个组被分配的策略对同一操作/资源包含 Deny 规则,则 MinIO 只会应用 Deny 规则。
有关 IAM 策略求值逻辑的更多信息,请参见 IAM 文档中的 Determining Whether a Request is Allowed or Denied Within an Account。
1 - Silo 身份管理
MinIO 内置一个 IDentity Provider (IDP),提供核心身份管理功能。 MinIO IDP 支持在部署中创建任意数量的长期有效用户,以支持客户端认证。
每个用户都由唯一的访问密钥(用户名)及其对应的密钥(密码)组成。 客户端必须同时提供现有 MinIO 用户的有效访问密钥(用户名)及其对应的密钥(密码),才能完成身份认证。
管理员使用 mc admin user 命令创建和管理 MinIO 用户。
MinIO 还支持创建 访问密钥。访问密钥是已认证父用户的子身份,并继承父用户的权限。
默认情况下,MinIO 会拒绝访问任何未被用户已分配或继承 策略 显式允许的操作或资源。 你必须显式为用户分配一个描述其授权操作和资源的 策略,或者 将用户加入已关联策略的 组。更多信息请参见 Access Management。
外部身份管理
MinIO 支持使用 OpenID Connect (OIDC) 或 Active Directory/LDAP IDentity Provider (IDP) 对身份进行外部管理。 更多信息请参见:
AD/LDAP 与 OIDC 配置互斥。 此外,启用 AD/LDAP 外部身份管理后,会禁用 MinIO 内部 IDP,但仍可创建 访问密钥。 你可以在保留 MinIO 管理用户的同时,配置多个 OIDC provider。
2 - 用户管理
概述
MinIO 用户由唯一的访问密钥(用户名)及其对应的密钥(密码)组成。 客户端必须同时指定现有 MinIO 用户的有效访问密钥(用户名)及其对应的密钥(密码),才能完成身份认证。
每个用户都可以分配一个或多个 策略, 这些策略会显式列出该用户有权访问的操作和资源。 用户还可以从其所属的 组 继承策略。
默认情况下,MinIO 会拒绝访问任何未被用户已分配或继承的 策略 显式允许的操作或资源。 你必须显式为用户分配一个描述其授权操作和资源的 策略,或者 将用户加入已关联策略的 组。更多信息请参见 Access Management。
本页介绍 MinIO 内部 IDentity Provider (IDP) 的用户管理。 MinIO 还支持使用 OpenID Connect (OIDC) 或 Active Directory/LDAP IDentity Provider (IDP) 对身份进行外部管理。 更多信息请参见:
启用外部身份管理后,会禁用 MinIO 内部 IDP,但仍可创建 访问密钥。
访问密钥
MinIO Access Keys(原称 “Service Accounts”)是已认证 MinIO 用户的子身份,其中也包括 外部管理的身份。 每个访问密钥都会基于其父用户附加的 策略,或者 父用户所属组的策略来继承权限。 访问密钥还支持可选的内联策略,用于进一步将访问限制为父用户可用操作和资源的子集。
MinIO 用户可以生成任意数量的访问密钥。 这使应用所有者可以为其应用生成访问密钥,而无需 MinIO 管理员介入。 由于生成的访问密钥拥有与父用户相同或更少的权限,管理员可以专注于管理顶层父用户,而无需细致管理这些生成的访问密钥。
你可以使用 mc admin user svcacct add 命令创建访问密钥。 通过这些方式创建的身份在你移除访问密钥或父账户之前不会过期。
你还可以通过 AssumeRole STS API 端点,以编程方式创建 security token service 账户。 STS token 默认在 1 小时后过期,但你可以将过期时间设置为自创建起最长 7 天。
访问密钥支持应用程序进行编程访问。 你不能使用访问密钥登录 MinIO Console。
MinIO root 用户
每个 MinIO 部署都具有一个 root 用户,可访问该部署上的所有操作和资源, 无论配置的是哪种 身份管理器。当 minio 服务器首次启动时, 会通过检查以下环境变量的值来设置 root 用户凭证:
轮换 root 用户凭证时,需要为部署中的所有 MinIO 服务器更新其中一个或两个变量。 root 凭证应指定为 长、唯一且随机 的字符串。 存储访问密钥和密钥时应采取一切可能的防护措施,确保只有已知且受信任、并且 确实需要 该部署超级用户访问权限的人员才能获取 root 凭证。
- MinIO 强烈不建议 在任何环境中(开发、预发或生产)使用
root用户进行常规客户端访问。 - MinIO 强烈建议 创建用户时,使每个客户端仅拥有执行其分配工作负载所需的最小操作和资源集合。
如果这些变量未设置,minio 默认分别使用 minioadmin 和 minioadmin 作为访问密钥和密钥。无论部署环境如何,MinIO 都 强烈不建议 使用默认凭证。
MinIO RELEASE.2021-04-22T15-44-28Z 及后续版本已弃用以下用于设置或更新 root 用户凭证的变量:
MINIO_ACCESS_KEY表示新的访问密钥。MINIO_SECRET_KEY表示新的密钥。MINIO_ACCESS_KEY_OLD表示旧的访问密钥。MINIO_SECRET_KEY_OLD表示旧的密钥。
用户管理
创建用户
使用 mc admin user add 命令在 MinIO 部署上创建新用户:
- 将
ALIAS替换为 MinIO 部署的alias。 - 将
ACCESSKEY替换为用户的访问密钥。 MinIO 允许在用户创建后,通过mc admin user info命令检索访问密钥。 - 将
SECRETKEY替换为用户的密钥。 MinIO 不提供 在密钥设置后再进行检索的任何方法。
ACCESSKEY 和 SECRETKEY 都应指定为唯一、随机且足够长的字符串。 你的组织可能对生成用于访问密钥或密钥的值有特定的内部或监管要求。
创建用户后,使用 mc admin policy attach 为新用户关联 MinIO 基于策略的访问控制。 以下命令分配内置的 readwrite 策略:
将 USERNAME 替换为上一步创建的 ACCESSKEY。
删除用户
使用 mc admin user rm 命令从 MinIO 部署中移除用户:
3 - OpenID Connect 访问管理
MinIO 支持使用兼容 OpenID Connect (OIDC) 的 Identity Provider (IDP),例如 Okta、KeyCloak、Dex、Google 或 Facebook,来进行外部用户身份管理。
对于由外部 OpenID Connect (OIDC) 兼容提供方管理的身份,MinIO 可以通过以下两种方式之一,将策略分配给已认证用户。
- 使用 OIDC 认证流程返回的 JSON Web Token claim,识别需要分配给已认证用户的 策略。
- 使用授权请求中指定的
RoleArn,分配附加到该提供方 RolePolicy 的策略。
默认情况下,MinIO 会拒绝访问用户已分配或继承的 策略 中未显式允许的任何操作或资源。 由 OIDC 提供方管理的用户必须在 JWT claim 中指定所需策略。如果用户的 JWT claim 没有与之匹配的 MinIO 策略,则该用户无权访问 MinIO 部署中的任何操作或资源。
MinIO 要检查的具体 claim 需要在 使用 OIDC 身份管理部署集群 时进行配置。本页重点介绍如何创建与已配置 OIDC claims 匹配的 MinIO 策略。
认证与授权流程
MinIO 支持两种 OIDC 认证与授权流程:
-
RolePolicy 流在 MinIO 配置中设置已认证用户的分配策略。
MinIO 建议在与 OpenID 提供方集成认证时使用 RolePolicy 方法。
-
JWT 流将已认证用户的分配策略作为 OIDC 配置的一部分进行设置。
MinIO 支持多个 OIDC 提供方配置。 但是,每个部署只能配置 一个 基于 JWT claim 的 OIDC 提供方。 所有其他提供方都必须使用 RolePolicy。
RolePolicy 与 RoleArn
使用 RolePolicy 时,所有通过给定 RoleArn 生成 STS 凭证的客户端,都会获得与该 RoleArn 的 RolePolicy 配置关联的 一个或多个策略。
你可以使用 OpenID 策略变量 创建策略,以编程方式控制每个用户可访问的内容。
应用程序使用 OIDC 凭证并采用 RolePolicy claim 流时,其登录流程如下:
-
创建 OIDC 配置。
-
记录分配给该配置的 RoleArn,可在创建时或 MinIO 启动时获取。 将此 RoleArn 与 AssumeRoleWithWebIdentity STS API 一起使用。
-
创建与该 RoleArn 配套使用的 RolePolicy。 使用
MINIO_IDENTITY_OPENID_ROLE_POLICY环境变量或identity_openid role_policy配置项,定义该提供方要使用的策略列表 -
用户在登录 MinIO 时选择已配置的 OIDC 提供方。
-
用户完成对已配置 OIDC 提供方的认证,并重定向回 MinIO。
MinIO 仅支持 OpenID Authorization Code Flow。 不支持使用 Implicit Flow 进行认证。
-
MinIO 验证 API 调用中的
RoleArn,并检查要使用的 RolePolicy。 任何携带该 RoleArn 的认证请求都会获得相同的策略访问权限。 -
MinIO 在 STS API 响应中返回临时凭证,形式为 access key、secret key 和 session token。 这些凭证的权限与 RolePolicy 中指定的策略一致。
-
应用程序使用 STS 端点返回的临时凭证,在 MinIO 上执行已认证的 S3 操作。
JSON Web Token Claim
使用 JSON Web Token 可以为不同用户单独分配策略。 但使用 Web Token 也意味着需要为不同 claim 管理多份策略,管理成本会更高。
应用程序使用 OIDC 凭证并采用 JSON Web Token Claim 流时,其登录流程如下:
-
对已配置的 OIDC 提供方进行认证,并获取 JSON Web Token (JWT)。
MinIO 仅支持 OpenID Authorization Code Flow。 不支持使用 Implicit Flow 进行认证。
-
将 JWT 提交到 MinIO Security Token Service (STS) AssumeRoleWithWebIdentity API 端点。
MinIO 会根据已配置的 OIDC 提供方验证 JWT。
如果 JWT 有效,MinIO 会检查其中的 claim,该 claim 指定了要分配给已认证用户的一个或多个 策略 列表。MinIO 默认检查
policyclaim。 -
MinIO 在 STS API 响应中返回临时凭证,形式为 access key、secret key 和 session token。这些凭证的权限与 JWT claim 中指定的策略一致。
-
应用程序使用 STS 端点返回的临时凭证,在 MinIO 上执行已认证的 S3 操作。
MinIO 提供了一个示例 Go 应用 web-identity.go,用于处理完整登录流程。
识别 JWT Claim 值
MinIO 使用 OIDC 认证流程返回的 JWT token,识别要分配给已认证用户的具体策略。
你可以使用 JWT Debugging tool 对返回的 JWT token 进行解码,并验证用户属性中是否包含所需 claims。
有关 JWT claim 的更多信息,请参见 RFC 7519: JWT Claim。
关于如何配置用户 claims,请参见你所选 OIDC 提供方的文档。
创建与 Claims 匹配的策略
使用 mc admin policy 命令创建与一个或多个 claim 值匹配的策略。
OIDC 策略变量
下表列出了用于授权 OIDC 管理用户 的受支持策略变量。
每个变量都对应认证用户 JWT token 中返回的一项 claim:
| 变量 | 说明 |
|---|---|
jwt:sub |
返回用户的 sub claim。 |
jwt:iss |
返回 ID token 中的 Issuer Identifier claim。 |
jwt:aud |
返回 ID token 中的 Audience claim。 |
jwt:jti |
返回客户端认证信息中的 JWT ID claim。 |
jwt:upn |
返回客户端认证信息中的 User Principal Name claim。 |
jwt:name |
返回用户的 name claim。 |
jwt:groups |
返回用户的 groups claim。 |
jwt:given_name |
返回用户的 given_name claim。 |
jwt:family_name |
返回用户的 family_name claim。 |
jwt:middle_name |
返回用户的 middle_name claim。 |
jwt:nickname |
返回用户的 nickname claim。 |
jwt:preferred_username |
返回用户的 preferred_username claim。 |
jwt:profile |
返回用户的 profile claim。 |
jwt:picture |
返回用户的 picture claim。 |
jwt:website |
返回用户的 website claim。 |
jwt:email |
返回用户的 email claim。 |
jwt:gender |
返回用户的 gender claim。 |
jwt:birthdate |
返回用户的 birthdate claim。 |
jwt:phone_number |
返回用户的 phone_number claim。 |
jwt:address |
返回用户的 address claim。 |
jwt:scope |
返回用户的 scope claim。 |
jwt:client_id |
返回用户的 client_id claim。 |
关于这些 scope 的更多信息,请参阅 OpenID Connect Core 1.0 文档。 你所选的 OIDC 提供方也可能有更具体的补充文档。
例如,以下策略使用变量将认证用户的 preferred_username 替换到 Resource 字段中, 使该用户只能访问与其用户名匹配的前缀:
MinIO 会将 Resource 字段中的 ${jwt:preferred_username} 变量, 替换为 JWT token 中 preferred_username 的值。 随后,MinIO 会评估该策略,并对请求的 API 和资源授予或撤销访问权限。
4 - 组管理
概述
组 是 用户 的集合。每个组 都可以分配一个或多个 策略, 这些策略会显式列出允许或拒绝组成员访问的操作和资源。
例如,考虑以下几个组。每个组都分配了一个 内置策略 或受支持的 策略操作。每个组还分配了一个或 多个用户。每个用户的完整权限集合由其 显式分配的权限 以及 从其所属各组继承的权限共同组成。 对于用户被分配或继承的策略中未显式允许的任何资源或操作,MinIO 默认都会 拒绝 访问。
组 |
策略 |
成员 |
|---|---|---|
|
finance 存储桶上的 readwriteaudit 存储桶上的 readonly |
|
|
audit 存储桶上的 readonly |
|
|
|
组为具有相同访问模式和工作负载的用户之间管理共享权限提供了一种更简便的方法。 客户端 不能 使用组作为身份向 MinIO 部署进行认证。
mc admin group 命令支持在 MinIO 部署上创建和管理组。 有关用法示例,请参阅该命令的参考文档。
5 - Active Directory / LDAP 访问管理
MinIO 支持配置单个 Active Directory 或 LDAP (AD/LDAP) 服务,用于对用户身份进行外部管理。 启用 AD/LDAP 外部身份管理会禁用 MinIO 内部 IDP。
对于由外部 AD/LDAP 提供方管理的身份,MinIO 会使用用户的 Distinguished Name,并尝试将其映射到现有的 策略。
如果 AD/LDAP 配置中包含查询用户 AD/LDAP 组成员关系所需的设置,MinIO 还会 使用这些组的 Distinguished Name,并尝试将每一个映射到现有的 策略。
默认情况下,MinIO 会拒绝访问所有未被用户已分配或继承的 策略 明确允许的操作或资源。 由 AD/LDAP 提供方管理的用户,必须在用户配置文件数据中指定所需策略。 如果没有任何策略与用户 DN 或组 DN 匹配,MinIO 会阻止该部署上对所有操作和资源的访问。
MinIO 用于认证用户并获取其组成员关系的具体 AD/LDAP 查询,是在 使用 Active Directory / LDAP 身份管理部署集群 时配置的。 本页介绍如何创建与可能返回的 Distinguished Name 相匹配的 MinIO 策略。
认证与授权流程
使用 Active Directory / LDAP 凭证的应用程序登录流程如下:
-
将 AD/LDAP 凭证提供给 MinIO Security Token Service (STS) AssumeRoleWithLDAPIdentity API 端点。
-
MinIO 针对 AD/LDAP 服务器校验所提供的凭证。
-
MinIO 检查是否存在名称与用户 Distinguished Name (DN) 匹配的 策略,并将该策略分配给已认证用户。
如果配置为执行组查询,MinIO 还会查询该用户所属的 AD/LDAP 组列表。 MinIO 会检查是否存在名称与返回的组 DN 匹配的策略,并将该策略分配给 已认证用户。
-
MinIO 会在 STS API 响应中返回临时凭证,其形式为 access key、 secret key 和 session token。这些凭证的权限与名称匹配已认证用户 DN 或 某个组 DN 的那些策略一致。
MinIO 提供了一个示例 Go 应用程序 ldap.go,用于处理完整的 登录流程。
AD/LDAP 用户也可以创建与其 AD/LDAP 用户 Distinguished Name 关联的 访问密钥。 访问密钥是长期有效的凭证,会继承父用户的权限。 父用户在创建访问密钥时还可以进一步限制这些权限。 使用以下方法之一创建新的访问密钥:
使用 mc admin user svcacct add 命令创建访问密钥。 将用户 Distinguished Name 指定为要关联访问密钥的用户名。
将策略映射到用户 DN
以下命令使用 mc idp ldap policy attach 将现有 MinIO 策略 关联到 AD/LDAP 用户 DN。
- MinIO 会将
consoleAdmin策略分配给 DN 匹配cn=sisko,cn=users,dc=example,dc=com的已认证用户, 从而授予其对 MinIO 服务器的完全访问权限。 - MinIO 会将
readwrite和diagnostics两个策略分配给 DN 匹配cn=dax,cn=users,dc=example,dc=com的已认证用户,从而授予其对 MinIO 服务器的一般读写访问权限,以及 诊断性管理操作的访问权限。 - MinIO 不会为 DN 匹配
cn=quark,cn=users,dc=example,dc=com的 已认证用户分配任何策略,并会拒绝其对所有 API 操作的访问。
将策略映射到组 DN
以下命令使用 mc idp ldap policy attach 将现有 MinIO 策略 关联到 AD/LDAP 组 DN。
- MinIO 会将
consoleAdmin策略分配给任何属于cn=ops,cn=groups,dc=example,dc=comAD/LDAP 组的认证用户,从而授予其对 MinIO 服务器的完全访问权限。 - MinIO 会将
diagnostics策略分配给任何属于cn=engineering,cn=groups,dc=example,dc=comAD/LDAP 组的认证用户,从而授予其对 诊断性管理操作的访问权限。
6 - Silo 外部身份管理插件
概述
MinIO Identity Management Plugin 提供了一个 REST 接口,用于通过 Webhook 服务将认证委托给外部身份管理器。
启用后,客户端应用程序使用 AssumeRoleWithCustomToken STS API 扩展为 MinIO 生成访问令牌。 MinIO 通过向已配置的插件端点发起 POST 请求来验证该令牌,并根据返回的响应判断客户端的认证状态。
配置设置
你可以使用以下环境变量或配置设置来配置 MinIO Identity Management Plugin:
为部署中的每个 MinIO 服务器指定以下 environment variables:
使用 mc admin config set 命令设置以下配置项:
认证与授权流程
应用程序的登录流程如下:
-
使用 AssumeRoleWithCustomToken API 发起 POST 请求。
该请求包含一个令牌,供已配置的外部身份管理器用于认证客户端。
-
MinIO 使用为 STS API 指定的令牌,向已配置的身份插件 URL 发起 POST 调用。
-
认证成功后,身份管理器返回一个
200 OK响应,其content-type为application/json,响应体结构如下:user所请求凭证的所有者
maxValiditySeconds返回凭证允许的最大过期时长
claims与所请求凭证关联的、由
"key": "value"键值对组成的 claims JSON 字符串。 如果存在exp、parent和subclaims 对象,MinIO 会将其保留并忽略。 -
MinIO 向 STS API 请求返回响应,其中包含可用于发起已认证请求的临时凭证。
如果身份管理器拒绝该认证请求,或在处理过程中发生其他错误,则响应 必须 返回 403 FORBIDDEN HTTP 状态码,content-type 为 application/json,响应体结构如下:
"reason" 字段应包含返回 403 的原因。
创建与 Claims 匹配的策略
使用 mc admin policy 命令创建与一个或多个 claim 值匹配的策略。
7 - 访问管理
概述
MinIO 使用 基于策略的访问控制 (PBAC) 来定义已认证用户可访问的授权操作和资源。 每个策略描述一条或多条 actions 与 conditions,用于说明某个 user 或 group 中用户的权限。
MinIO PBAC 在设计上兼容 AWS IAM 策略语法、结构和行为。 MinIO 文档会尽力覆盖 IAM 特定行为和功能。 若需要更完整的 AWS IAM 特定主题文档,请参考 IAM documentation。
mc admin policy 命令支持在 MinIO 部署上创建和管理策略。 用法示例请参见命令参考。
基于标签的策略条件
变更: RELEASE.2022-10-02T19-29-29Z
策略可以使用条件,将用户访问限制为仅能访问带有 特定标签 的对象。
对于选定操作,MinIO 支持基于标签的条件。当 API 路径在授权前加载目标对象元数据时,s3:ExistingObjectTag/<key> 读取对象上已经存储的标签。s3:RequestObjectTag/<key> 与 s3:RequestObjectTagKeys 是客户端提供的请求值,不能证明对象已经具有这些标签。PutObject、CreateMultipartUpload 与 PutObjectTagging 会把它们显式绑定到处理器实际消费的标签输入;其他 action 路径为了兼容仍保留历史 X-Amz-Tagging Header 映射,因此请求标签条件只应在 API 确实消费标签时使用。
存储桶标签与对象标签不是同一类数据。PutBucketTagging 不会从 XML 正文填充 s3:RequestObjectTag* 条件键。
内置策略
MinIO 提供以下内置策略,可分配给 users 或 groups:
consoleAdmin
userpolicy
授予对 MinIO 部署上所有资源执行全部 S3 和管理 API 操作的完整访问权限。 等价于以下 action 集合:
readonly
userpolicy
授予对 MinIO 部署上任意对象的只读权限。 GET 操作 必须 作用于某个具体对象,且不要求具备任何列举权限。 等价于以下 action 集合:
例如,该策略专门支持对特定路径下对象执行 GET 操作(例如 GET play/mybucket/object.file),例如:
有意排除列举权限,因为典型使用场景并不希望“只读”角色对对象存储资源具有完整可发现性 (列出所有存储桶和对象)。
readwrite
userpolicy
授予对 MinIO 服务器上所有存储桶和对象的读写权限。 等价于 s3:*。
diagnostics
userpolicy
授予在 MinIO 部署上执行诊断操作的权限。 具体包括以下 action:
admin:ServerTraceadmin:Profilingadmin:ConsoleLogadmin:ServerInfoadmin:TopLocksInfoadmin:OBDInfoadmin:BandwidthMonitoradmin:Prometheus
writeonly
userpolicy
授予对 MinIO 部署中任意命名空间(存储桶及对象路径)的只写权限。 PUT 操作 必须 作用于某个具体对象位置,且不要求具备任何列举权限。 等价于 s3:PutObject action。
使用 mc admin policy attach 将策略关联到 MinIO 部署上的用户或组。
例如,考虑下表中的用户。每个用户都被分配了一个 内置策略 或某个受支持的 action。该表描述了客户端以对应用户身份完成认证后可执行的一部分操作:
用户 |
策略 |
操作 |
|---|---|---|
|
finance 存储桶上的 readwriteaudit 存储桶上的 readonly |
对 finance 存储桶执行 PUT 和 GET。对 audit 存储桶执行 GET |
|
audit 存储桶上的 readonly |
对 |
|
所有 |
每个用户只能访问内置角色 显式 授予的那些资源和操作。 默认情况下,MinIO 会拒绝访问任何其他资源或 action。
Deny overrides Allow
MinIO 遵循 IAM 策略求值规则,即在同一操作/资源上,Deny 规则会覆盖 Allow 规则。例如,如果某个用户被显式分配的策略对某个操作/资源包含 Allow 规则,而其所属某个组被分配的策略对同一操作/资源包含 Deny 规则, 则 MinIO 只会应用 Deny 规则。
有关 IAM 策略求值逻辑的更多信息,请参见 IAM 文档中的 Determining Whether a Request is Allowed or Denied Within an Account。
策略文档结构
MinIO 策略文档使用与 AWS IAM Policy 文档相同的模式。
以下示例文档为在 MinIO 部署中创建自定义策略提供了模板。 有关 IAM 策略元素的更完整文档,请参见 IAM JSON Policy Elements Reference。
任意单个策略文档的最大大小为 20KiB。 可附加到用户或组的策略文档数量没有限制。
-
对于
Statement.Action数组,指定一个或多个 受支持的 S3 API 操作。 -
对于
Statement.Resource键,指定要对策略进行限制的存储桶或存储桶前缀。 可以按照 S3 Resource Spec 使用*和?通配符。*通配符可能会基于 模式匹配,导致策略被意外应用到多个存储桶或前缀。 例如,arn:aws:s3:::data*会匹配存储桶data、data_private和data_internal。 如果资源键仅指定*,则该策略会应用到部署上的所有存储桶和前缀。对象模式与存储桶 ARN 不可互换,参见存储桶资源与对象资源。
-
对于
Statement.Condition键,可以指定一个或多个 受支持的 Conditions。
存储桶资源与对象资源
一个资源 ARN 要么指代存储桶本身,要么指代桶内的对象,两种形式授权的是不同的操作:
arn:aws:s3:::mybucket指代 存储桶本身,授权ListBucket、PutBucketPolicy这类桶级操作。arn:aws:s3:::mybucket/*指代 桶内的对象,授权GetObject、PutObject这类对象操作。
当一个主体两者都需要时,就把两者都授予——这也是"既管理存储桶、又管理其内容"的策略的惯例写法:
十二个桶级写操作需要存储桶 ARN
arn:aws:s3:::mybucket/* 这样的对象级模式 不会 授权以下动作,即使语句授予的是 s3:*:
PutBucketPolicy、DeleteBucketPolicy、PutBucketObjectLockConfiguration、PutBucketVersioning、PutReplicationConfiguration、PutLifecycleConfiguration、DeleteBucket、ForceDeleteBucket、PutBucketCors、DeleteBucketCors、PutBucketQOS、PutInventoryConfiguration
这些动作中的每一个,都能让调用者拿到对象级授权本来给不了的东西——把访问权发给别的主体、击穿专门针对写权限持有者的保护、在授权被吊销后仍持续生效,或者销毁存储桶实体本身。要授予它们,请在对象模式旁边补上裸的存储桶 ARN。
早期版本也会通过对象模式授权这些动作,因为桶级请求被拿去与字符串 mybucket/ 匹配,而 mybucket/* 同样命中它。那是一种过度授予,参见上游 minio/minio#20449。在调整策略期间,可将 MINIO_API_LEGACY_BUCKET_RESOURCE_MATCH 设为 on 恢复此前的行为。
其余行为一律不变。ListBucket、GetBucketLocation、各类存储桶配置 读取 以及 CreateBucket 仍然可以通过对象模式获得授权,因此按这种写法配置的列举与供应流程照常工作。Deny 语句与 NotResource 排除的匹配方式一如既往,所以任何写在 mybucket/* 上的限制都不会被削弱。内置的 readwrite、readonly、writeonly、diagnostics 策略使用 arn:aws:s3:::*,不受影响。
受支持的 S3 策略 Action
MinIO 策略文档支持 IAM S3 Action keys 的一个子集。 本节还包括特定 action 在通用受支持键之外额外支持的任何 condition keys。
以下 action 用于控制常见 S3 操作的访问。 其余小节记录更高级的 S3 操作所对应的 action:
s3:*
policy-action
选择器,用于匹配 所有 MinIO S3 操作。 将该 action 应用于某个资源后,用户即可对该资源执行 任意 S3 操作。
s3:CreateBucket
policy-action
控制对 CreateBucket S3 API 操作的访问。
s3:DeleteBucket
policy-action
控制对 DeleteBucket S3 API 操作的访问。
s3:ForceDeleteBucket
policy-action
控制对带有 x-minio-force-delete 标志的 DeleteBucket S3 API 操作的访问。 删除非空存储桶时需要此权限。
s3:GetBucketLocation
policy-action
控制对 GetBucketLocation S3 API 操作的访问。
s3:ListAllMyBuckets
policy-action
控制对 ListBuckets S3 API 操作的访问。
s3:DeleteObject
policy-action
控制对 DeleteObject S3 API 操作的访问。
支持以下额外条件键:
s3:GetObject
policy-action
控制对 GetObject S3 API 操作的访问。
支持以下附加 condition keys:
s3:GetObjectAttributes
policy-action
控制对 GetObjectAttributes S3 API 操作的访问。
策略解析器允许此 action 使用以下条件键:
但当前处理器在加载对象元数据前完成授权,因此该操作求值时此条件值缺失。
s3:GetObjectVersionAttributes
policy-action
控制对带版本对象执行 GetObjectAttributes S3 API 操作的访问。
支持以下额外条件键:
版本 ID 来自请求查询参数。当前处理器在加载对象元数据前完成授权,因此策略解析器虽然允许 s3:ExistingObjectTag/<key>,该操作求值时此值仍然缺失。
s3:RestoreObject
policy-action
控制对 RestoreObject S3 API 操作的访问。
s3:ListBucket
policy-action
控制对 ListObjectsV2 S3 API 操作的访问。
支持以下附加 condition keys:
s3:PutObject
policy-action
控制对 PutObject S3 API 操作的访问。
支持以下附加 condition keys:
s3:PutObjectTagging
policy-action
控制对 PutObjectTagging S3 API 操作的访问。
支持以下附加 condition keys:
s3:GetObjectTagging
policy-action
控制对 GetObjectTagging S3 API 操作的访问。
支持以下附加 condition keys:
s3:DeleteObjectTagging
policy-action
控制对 DeleteObjectTagging S3 API 操作的访问。
支持以下附加 condition keys:
存储桶配置
s3:GetBucketPolicy
policy-action
控制对 GetBucketPolicy S3 API 操作的访问。
s3:PutBucketPolicy
policy-action
控制对 PutBucketPolicy S3 API 操作的访问。
s3:DeleteBucketPolicy
policy-action
控制对 DeleteBucketPolicy S3 API 操作的访问。
s3:GetBucketTagging
policy-action
控制对 GetBucketTagging S3 API 操作的访问。
s3:PutBucketTagging
policy-action
控制对 PutBucketTagging S3 API 操作的访问。
策略解析器出于兼容性保留以下条件键:
处理器 不会 从存储桶标签 XML 正文填充这些键;只有历史兼容的客户端 X-Amz-Tagging Header 回退可以填充它们,而这个 Header 并不能约束最终从正文写入的存储桶标签。不要用这些键强制约束 PutBucketTagging 请求的内容。
s3:GetBucketPolicyStatus
policy-action
控制对 GetBucketPolicyStatus S3 API 操作的访问。
分段上传
s3:AbortMultipartUpload
policy-action
控制对 AbortMultipartUpload S3 API 操作的访问。
s3:ListMultipartUploadParts
policy-action
控制对 ListParts S3 API 操作的访问。
s3:ListBucketMultipartUploads
policy-action
控制对 ListMultipartUploads S3 API 操作的访问。
版本控制与保留
s3:PutBucketVersioning
policy-action
控制对 PutBucketVersioning S3 API 操作的访问。
s3:GetBucketVersioning
policy-action
控制对 GetBucketVersioning S3 API 操作的访问。
s3:DeleteObjectVersion
policy-action
控制对 DeleteObjectVersion S3 API 操作的访问。
支持以下附加 condition keys:
s3:ListBucketVersions
policy-action
控制对 ListBucketVersions S3 API 操作的访问。
支持以下附加 condition keys:
s3:PutObjectVersionTagging
policy-action
控制对 PutObjectVersionTagging S3 API 操作的访问。
支持以下附加 condition keys:
s3:GetObjectVersionTagging
policy-action
控制对 GetObjectVersionTagging S3 API 操作的访问。
支持以下附加 condition keys:
s3:DeleteObjectVersionTagging
policy-action
控制对 DeleteObjectVersionTagging S3 API 操作的访问。
支持以下附加 condition keys:
s3:GetObjectVersion
policy-action
控制对 GetObjectVersion S3 API 操作的访问。
支持以下附加 condition keys:
s3:BypassGovernanceRetention
policy-action
控制对处于 GOVERNANCE 保留模式下锁定对象的以下 S3 API 操作的访问:
s3:PutObjectRetentions3:PutObjects3:DeleteObject
更多信息请参见 S3 文档中的 s3:BypassGovernanceRetention。
支持以下附加 condition keys:
s3:PutObjectRetention
policy-action
控制对 PutObjectRetention S3 API 操作的访问。
对于任何指定了 保留元数据 的 PutObject 操作,都需要此权限。
支持以下附加 condition keys:
s3:GetObjectRetention
policy-action
控制对 GetObjectRetention S3 API 操作的访问。
若要在 GetObject 或 HeadObject 操作的响应中包含 对象锁定元数据,则需要此权限。
支持以下附加 condition keys:
s3:GetObjectLegalHold
policy-action
控制对 GetObjectLegalHold S3 API 操作的访问。
若要在 GetObject 或 HeadObject 操作的响应中包含 对象锁定元数据,则需要此权限。
s3:PutObjectLegalHold
policy-action
控制对 PutObjectLegalHold S3 API 操作的访问。
对于任何指定了 legal hold 元数据 的 PutObject 操作,都需要此权限。
支持以下附加 condition keys:
s3:GetBucketObjectLockConfiguration
policy-action
控制对 GetObjectLockConfiguration S3 API 操作的访问。
s3:PutBucketObjectLockConfiguration
policy-action
控制对 PutObjectLockConfiguration S3 API 操作的访问。
存储桶通知
s3:GetBucketNotification
policy-action
控制对 GetBucketNotification S3 API 操作的访问。
s3:PutBucketNotification
policy-action
控制对 PutBucketNotification S3 API 操作的访问。
s3:ListenNotification
policy-action
用于控制与 MinIO 存储桶通知 相关 API 操作的 MinIO 扩展。
此 action 不 用于其他兼容 S3 的服务。
s3:ListenBucketNotification
policy-action
用于控制与 MinIO 存储桶通知 相关 API 操作的 MinIO 扩展。
此 action 不 用于其他兼容 S3 的服务。
对象生命周期管理
s3:PutLifecycleConfiguration
policy-action
控制对 PutLifecycleConfiguration S3 API 操作的访问。
s3:GetLifecycleConfiguration
policy-action
控制对 GetLifecycleConfiguration S3 API 操作的访问。
对象加密
s3:PutEncryptionConfiguration
policy-action
控制对 PutEncryptionConfiguration S3 API 操作的访问。
s3:GetEncryptionConfiguration
policy-action
控制对 GetEncryptionConfiguration S3 API 操作的访问。
存储桶复制
s3:GetReplicationConfiguration
policy-action
控制对 GetBucketReplication S3 API 操作的访问。
s3:PutReplicationConfiguration
policy-action
控制对 PutBucketReplication S3 API 操作的访问。
s3:ReplicateObject
policy-action
用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。
MinIO 服务器端复制需要此权限。
支持以下附加 condition keys:
s3:ReplicateDelete
policy-action
用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。
作为 MinIO 服务器端复制的一部分,在同步 删除操作 时需要此权限。
支持以下附加 condition keys:
s3:ReplicateTags
policy-action
用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。
MinIO 服务器端复制需要此权限。
支持以下附加 condition keys:
s3:GetObjectVersionForReplication
policy-action
用于控制与 服务器端存储桶复制 相关 API 操作的 MinIO 扩展。
MinIO 服务器端复制需要此权限。
支持以下附加 condition keys:
受支持的 S3 策略条件键
MinIO 策略文档支持 IAM 条件语句。
每个条件元素都由 operators 和条件键组成。MinIO 支持 IAM 条件键的一个子集。 有关任何列出条件键的完整信息,请参见 IAM Condition Element Documentation
对于所有受支持的 actions,MinIO 支持以下条件键:
aws:Refereraws:SourceIpaws:UserAgentaws:SecureTransportaws:CurrentTimeaws:EpochTimeaws:PrincipalTypeaws:useridaws:usernames3:x-amz-content-sha256s3:signatureAge
警告
aws:Referer、aws:SourceIp 和 aws:UserAgent 键可能被伪造,因此存在潜在安全风险。aws:SourceIp 的可信程度取决于负责提供或覆写转发请求头的代理边界。MinIO 建议仅将这些条件键作为辅助安全措施用于 拒绝 访问。
绝不要 仅凭这三个键授予访问权限。
条件值来源与优先级
尚未发布的服务端行为(截至 2026-08-03)
下表描述配套服务端改动 1a6d5b415 之后的行为。该改动目前仅存在于本地 pgsty/minio 分支:尚未进入公开 origin/master,最新公开服务端版本 RELEASE.2026-08-04T00-00-00Z 也不包含它。已发布构建仍保留此前行为。在依赖这些优先级保证前,请先核对服务端发布说明。
Silo 按请求字段的实际语义来源构造条件值映射,而不是把所有请求头与查询参数混为一谈。原始请求头或查询参数即使与内部条件键同名,也不能覆盖服务端计算出的值,或伪造服务端没有提供的值。
| 条件键类别 | 策略求值使用的来源 | 优先级与兼容性 |
|---|---|---|
身份、时间、传输、认证、s3:versionid、s3:LocationConstraint、LDAP 与 JWT 值 |
已认证的凭据与声明、服务端时钟与传输状态,或该操作解析出的 API 字段 | 同名原始请求头与查询参数不能增加或覆盖这些值。aws:Referer 与 aws:UserAgent 按定义仍由客户端控制;aws:SourceIp 的限制见上方警告。 |
s3:signatureAge |
SigV4 预签名请求校验器计算出的已过去时间 | 只有通过校验的 SigV4 预签名请求才有该值;其他请求类型中客户端提供的 x-amz-signature-age Header 会被忽略。 |
s3:prefix、s3:delimiter、s3:max-keys |
仅查询字符串 | 同名请求头不会参与这些列表条件的求值。 |
s3:x-amz-content-sha256、s3:x-amz-copy-source、s3:x-amz-metadata-directive 与服务端加密条件键 |
仅对应的 HTTP 请求头 | 查询字符串中的替代值不能满足这些条件。尤其是预签名请求校验所使用的 X-Amz-Content-Sha256 查询值,不会作为策略条件值暴露。 |
s3:x-amz-storage-class |
X-Amz-Storage-Class 请求头,兼容回退到查询字符串 |
只要请求头存在就优先,即使它是空值。查询形式继续保留,以兼容现有上传路径。 |
s3:RequestObjectTag/<key> 与 s3:RequestObjectTagKeys |
默认来自 X-Amz-Tagging Header;标签感知处理器可显式传入实际标签集 |
PutObject 与 CreateMultipartUpload 从 Header 或兼容查询形式取值,Header 存在时优先;PutObjectTagging 使用解析后的 XML 请求正文。无关操作会忽略 query 标签。对于策略映射允许这些键的 action,历史 Header 回退仍为兼容性保留,因此在上述三个处理器之外,请求标签条件本身不能证明该操作会消费或持久化这些标签。 |
s3:ExistingObjectTag/<key> |
从目标对象存储状态加载的标签 | 请求头与查询参数永远不能提供已有对象标签。只有在授权前加载这些标签的 API 路径上才有该值,包括对象 GET/HEAD 与对象标签处理器。 |
| 对象锁条件键 | 对象锁请求头,或处理器计算出的保留值 | 查询字符串中的同名字段会被忽略。 |
如果某条 API 路径没有加载或计算上述来源,相应条件键就是缺失的,其结果由所用策略操作符的语义决定。不要因为某个动作列出了条件键,就假定服务端一定会为它合成一个值。
对于特定 S3 action 支持的其他键,请参见该 action 的参考文档。
MinIO 扩展条件键
MinIO 在 S3 标准条件键基础上扩展了以下键:
sts:DurationSeconds
说明新增: MinIO
SERVER RELEASE.2024-02-06T21-36-22Z
指定一个以秒为单位的时间,用于限制由 AssumeRoleWithWebIdentity 生成的 所有 Security Token Service 凭证的有效期。
此值会覆盖客户端指定的
DurationSeconds字段。例如:
mc admin 策略 Action 键
MinIO 支持以下 action,用于为 mc admin 操作定义策略。 这些 action 仅 对 MinIO 部署有效,不 用于其他兼容 S3 的服务:
admin:*
policy-action
所有 admin action 键的选择器。
admin:Heal
policy-action
允许执行 heal 命令
admin:StorageInfo
policy-action
允许列出服务器信息
admin:DataUsageInfo
policy-action
允许列出数据使用信息
admin:TopLocksInfo
policy-action
允许列出 top locks
admin:Profiling
policy-action
允许 profiling
admin:ServerTrace
policy-action
允许列出 server trace
admin:ConsoleLog
policy-action
允许在终端列出 console log
admin:KMSCreateKey
policy-action
允许创建新的 KMS 主密钥
虽然此选项仍受支持,但更推荐使用 kms:CreateKey。
admin:KMSKeyStatus
policy-action
允许获取 KMS 密钥状态
虽然此选项仍受支持,但更推荐使用 kms:KeyStatus。
admin:ServerInfo
policy-action
允许列出服务器信息
admin:OBDInfo
policy-action
允许获取集群 on-board diagnostics
admin:ServerUpdate
policy-action
允许更新 MinIO 二进制文件
admin:ServiceRestart
policy-action
允许重启 MinIO 服务。
admin:ServiceStop
policy-action
允许停止 MinIO 服务。
admin:ConfigUpdate
policy-action
允许管理 MinIO 配置
admin:CreateUser
policy-action
允许创建 MinIO 用户
admin:DeleteUser
policy-action
允许删除 MinIO 用户
admin:ListUsers
policy-action
允许列出用户
admin:EnableUser
policy-action
允许启用用户
admin:DisableUser
policy-action
允许禁用用户
admin:GetUser
policy-action
允许对用户信息执行 GET
admin:AddUserToGroup
policy-action
允许将用户添加到组
admin:RemoveUserFromGroup
policy-action
允许将用户从组中移除
admin:GetGroup
policy-action
允许获取组信息
admin:ListGroups
policy-action
允许列出组
admin:EnableGroup
policy-action
允许启用组
admin:DisableGroup
policy-action
允许禁用组
admin:CreatePolicy
policy-action
允许创建策略
admin:DeletePolicy
policy-action
允许删除策略
admin:GetPolicy
policy-action
允许获取策略
admin:AttachUserOrGroupPolicy
policy-action
允许将策略附加到用户/组
admin:ListUserPolicies
policy-action
允许列出用户策略
admin:CreateServiceAccount
policy-action
允许创建 MinIO Access Key
admin:UpdateServiceAccount
policy-action
允许更新 MinIO Access Key
admin:RemoveServiceAccount
policy-action
允许删除 MinIO Access Key
admin:ListServiceAccounts
policy-action
允许列出 MinIO Access Key
admin:SetBucketQuota
policy-action
允许设置存储桶配额
admin:GetBucketQuota
policy-action
允许获取存储桶配额
admin:SetBucketTarget
policy-action
允许设置存储桶目标
admin:GetBucketTarget
policy-action
允许获取存储桶目标
admin:SetTier
policy-action
允许使用 mc ilm tier 命令创建和修改远程存储层。
admin:ListTier
policy-action
允许使用 mc ilm tier 命令列出已配置的远程存储层。
admin:BandwidthMonitor
policy-action
允许获取与当前带宽消耗相关的指标。
admin:Prometheus
policy-action
允许访问 MinIO metrics。 仅当 MinIO 要求采集指标时进行认证才需要此权限。
admin:ListBatchJobs
policy-action
允许访问并列出活动中的批处理作业。
admin:DescribeBatchJob
policy-action
允许访问并查看正在运行的批处理作业的定义详情。
admin:StartBatchJob
policy-action
允许用户启动批处理作业运行。
admin:CancelBatchJob
policy-action
允许用户停止当前正在执行的批处理作业。
admin:Rebalance
policy-action
允许访问并启动、查询或停止跨不同可用存储空间池的对象重平衡。
KMS 策略 action 键
MinIO 支持通过策略限制密钥管理服务 (KMS) action。
可以在策略中使用以下任一 KMS action 来限制 KMS 活动:
kms:Status
policy-action
检查 KMS 状态。
kms:Metrics
policy-action
获取 Prometheus 格式指标。
kms:API
policy-action
列出受支持的 API 端点。
kms:Version
policy-action
获取 KMS 版本。
kms:CreateKey
policy-action
创建新的 KMS 密钥。
kms:ListKeys
policy-action
获取现有 KMS 密钥列表。
kms:KeyStatus
policy-action
获取指定 KMS 密钥的状态。
若要选择所有可用的 kms 策略 action,可使用 kms:*。
变更: RELEASE.2024-07-16T23-46-41Z
KMS action 可以按资源或资源前缀进行限制。 可以使用通配符 * 将 KMS action 策略应用到所有匹配该前缀的资源。
例如,以下策略文档允许用户列出密钥、创建新密钥,并检查任何以 keys-abc- 或 myuser- 开头资源上的密钥状态。
mc admin 策略条件键
MinIO 支持以下条件,用于为 mc admin actions 定义策略。
aws:Refereraws:SourceIpaws:UserAgentaws:SecureTransportaws:CurrentTimeaws:EpochTime
有关任何列出条件键的完整信息,请参见 IAM Condition Element Documentation。
策略变量
MinIO 支持使用策略变量,将来自已认证用户和/或操作的上下文自动替换到分配给该用户的一个或多个策略中。 使用 ${POLICYVARIABLE} 格式在策略的 Condition 或 Resource 定义中指定变量。 MinIO 策略变量的工作方式类似于 AWS IAM policy elements: Variables and tags。
每种 MinIO identity provider 都支持其各自的一组策略变量:
MinIO 策略变量
下表列出了用于授权 MinIO-managed users 的推荐策略变量:
| 变量 | 说明 |
|---|---|
| aws:referrer | 已认证 API 调用的 HTTP 头中的 referrer。 |
| aws:SourceIp | 已认证 API 调用的 HTTP 头中的源 IP。 |
| aws:username | 与已认证 API 调用关联的用户名。 |
例如,以下策略使用变量将已认证用户的用户名替换到 Resource 字段中,使该用户只能访问与其用户名匹配的那些前缀:
MinIO 会将 Resource 字段中的 ${aws:username} 变量替换为用户名。 随后 MinIO 对策略进行求值,并授予或撤销对所请求 API 和资源的访问。
OpenID 策略变量
下表列出了用于授权 OIDC 管理用户 的受支持策略变量。
每个变量都对应认证用户 JWT token 中返回的一项 claim:
| 变量 | 说明 |
|---|---|
jwt:sub |
返回用户的 sub claim。 |
jwt:iss |
返回 ID token 中的 Issuer Identifier claim。 |
jwt:aud |
返回 ID token 中的 Audience claim。 |
jwt:jti |
返回客户端认证信息中的 JWT ID claim。 |
jwt:upn |
返回客户端认证信息中的 User Principal Name claim。 |
jwt:name |
返回用户的 name claim。 |
jwt:groups |
返回用户的 groups claim。 |
jwt:given_name |
返回用户的 given_name claim。 |
jwt:family_name |
返回用户的 family_name claim。 |
jwt:middle_name |
返回用户的 middle_name claim。 |
jwt:nickname |
返回用户的 nickname claim。 |
jwt:preferred_username |
返回用户的 preferred_username claim。 |
jwt:profile |
返回用户的 profile claim。 |
jwt:picture |
返回用户的 picture claim。 |
jwt:website |
返回用户的 website claim。 |
jwt:email |
返回用户的 email claim。 |
jwt:gender |
返回用户的 gender claim。 |
jwt:birthdate |
返回用户的 birthdate claim。 |
jwt:phone_number |
返回用户的 phone_number claim。 |
jwt:address |
返回用户的 address claim。 |
jwt:scope |
返回用户的 scope claim。 |
jwt:client_id |
返回用户的 client_id claim。 |
关于这些 scope 的更多信息,请参阅 OpenID Connect Core 1.0 文档。 你所选的 OIDC 提供方也可能有更具体的补充文档。
例如,以下策略使用变量将认证用户的 preferred_username 替换到 Resource 字段中, 使该用户只能访问与其用户名匹配的前缀:
MinIO 会将 Resource 字段中的 ${jwt:preferred_username} 变量, 替换为 JWT token 中 preferred_username 的值。 随后,MinIO 会评估该策略,并对请求的 API 和资源授予或撤销访问权限。
Active Directory / LDAP 策略变量
下表列出了用于授权 AD/LDAP users 的受支持策略变量:
变量 |
说明 |
|---|---|
|
已认证用户的简单用户名(name)。这不同于用户的 DistinguishedName 或 CommonName。 |
|
已认证用户使用的 Distinguished Name。 |
|
已认证用户的组 Distinguished Name。 |
例如,以下策略使用变量将已认证用户的 name 替换到 Resource 字段中,使该用户只能访问与其名称匹配的那些前缀:
MinIO 会将 Resource 字段中的 ${ldap:username} 变量替换为已认证用户的 name 值。 随后 MinIO 对策略进行求值,并授予或撤销对所请求 API 和资源的访问。
8 - Silo 外部访问管理插件
概述
MinIO Access Management Plugin 提供了一个 REST 接口,可通过 Webhook 服务将授权流程卸载到外部系统。
启用后,MinIO 会将每次 API 调用的请求及凭证详情发送到已配置的外部 HTTP(S) 端点,并查找 ALLOW 或 DENY 响应。 因此,MinIO 可以将访问管理委托给外部系统,而不是依赖 S3 基于策略的访问控制。
配置设置
你可以使用以下环境变量或配置设置来配置 MinIO 外部访问管理插件。
为部署中的每个 MinIO 服务器指定以下 环境变量:
使用 mc admin config set 命令设置以下配置项:
认证与授权流程
应用程序的登录流程如下:
- 客户端在执行 API 调用时携带认证信息
- 已配置的身份管理器对客户端进行认证
- MinIO 向已配置的访问管理插件 URL 发起
POST调用,其中包含该 API 调用的上下文和认证数据 - 授权成功时,访问管理器会返回
200 OK响应,其 JSON 响应体格式为result true或"result" : { "allow" : true }:
如果访问管理器拒绝该授权请求,MinIO 会自动拦截并拒绝该 API 调用。
请求体示例
以下 JSON 展示了发送到已配置访问管理器 Webhook 的 POST 请求体示例。
响应体示例
MinIO 要求 Access Management 服务返回的响应体满足以下两种格式之一: