配置 Silo 使用 OpenID 进行认证
概览
MinIO 支持使用兼容 OpenID Connect (OIDC) 的 Identity Provider (IDP) 来管理外部用户身份,例如 Okta、KeyCloak、Dex、Google 或 Facebook。
本页提供了在 Kubernetes 和裸金属基础设施上的 MinIO 部署中配置 OIDC 的流程。
本流程包括:
- 为 MinIO 集群配置外部 OIDC 提供方
- 使用 MinIO
AssumeRoleWithWebIdentitySecurity Token Service (STS) API 生成供应用程序使用的临时凭证
本流程是面向兼容 OIDC 提供方的通用配置流程。 有关认证与 JWT 获取的具体说明,请以你所选 OIDC 提供方的文档为准。
前提条件
兼容 OpenID-Connect (OIDC) 的 Identity Provider
SILO 20261109 OIDC 与 JWT 兼容性: SILO 20261109(RELEASE.2026-11-09T00-00-00Z)通过 silo-pkg v3.16.0 采用 github.com/go-jose/go-jose/v4 v4.1.9,进一步加固 OIDC/JWT 令牌验证上限(包括 RSA 证书校验边界及 JWS 签名与 JWE 接收方数量限制)以及 JWS/JWE 头部校验。自 SILO 20261018 起,go-jose 还会拒绝超过 4096 位的 RSA JWK,防止特制密钥引发过量 CPU 消耗。升级前请检查身份提供方的签名密钥、discovery 端点、JWKS 刷新与完整登录流程;不兼容的密钥需在身份提供方轮换。参见依赖安全说明。
本流程假定你已经拥有一个现成的 OIDC 提供方,例如 Okta、KeyCloak、Dex、Google 或 Facebook。 这些服务本身的配置不在本流程范围内。
MinIO 集群必须与 OIDC 提供方保持双向连通。
检查访问管理行为
请确保每个打算与 MinIO 配合使用的用户身份,都配置了合适的 claim,以便 MinIO 能将认证用户关联到某个 策略。 未分配任何策略的 OpenID 用户,无权访问 MinIO 集群中的任何操作或资源。
对于基于 JWT claim 的认证,MinIO 仅支持使用 OpenID Authorization Code Flow 的 OIDC 流程。
访问 MinIO 集群
本流程使用 mc 对 MinIO 集群执行操作。 请在一台能够访问该集群网络的机器上安装 mc。 关于如何下载和安装 mc,请参见 mc 安装快速开始。 本流程假定已为 MinIO 集群配置 alias。
为 MinIO 配置 OpenID 外部身份管理
-
创建新的 OpenID 配置
使用
mc idp openid add命令为 MinIO 集群创建新的 OIDC 配置。 以下示例命令假定你使用 OIDC 提供方返回的 JWT claims,来实现 基于策略分配的授权。你也可以配置基于
RoleArn的功能,让所有认证用户都使用由role_policy设置指定的单一策略。 例如,将role_policy="readOnly"设置为所有认证用户分配内置只读策略。 -
检查 MinIO Server 日志
MinIO 进程会在应用新配置时重启。 请检查日志,确认 OIDC 配置已成功持久化。
如果你为一个或多个配置设置了
role_policy,输出中会包含一个可供 STS API 使用的 ARN。 -
使用 OIDC 凭证生成兼容 S3 的临时凭证
MinIO 要求客户端使用 AWS Signature Version 4 protocol 进行认证,同时保留对已弃用 Signature Version 2 协议的支持。 具体来说,客户端必须提供有效的 access key 和 secret key,才能访问任何 S3 或 MinIO 管理 API,例如
PUT、GET和DELETE操作。应用程序可以按需使用 AssumeRoleWithWebIdentity Security Token Service (STS) API 端点,以及 OIDC 提供方返回的 JSON Web Token (JWT),生成临时访问凭证。
应用程序必须提供一个工作流,用于登录 OIDC 提供方,并获取与该认证会话关联的 JSON Web Token (JWT)。关于认证成功后如何获取和解析 JWT token,请以提供方文档为准。SILO 提供了一个示例 Go 应用 web-identity.go,展示了如何管理这一工作流。
应用程序获取到 JWT token 后,使用
AssumeRoleWithWebIdentity端点生成临时凭证:-
将
TOKEN替换为上一步返回的 JWT token。 -
将
DurationSeconds替换为临时凭证过期前的秒数。上例指定了86400秒,即 24 小时。 -
将
Policy替换为内联、经过 URL 编码的 JSON 策略,用于进一步收紧临时凭证对应权限。如果省略,则使用该 OpenID 用户 policy claim 中关联的策略。
你也可以加入
RoleArn参数(可选),并填写目标单策略 OIDC 配置对应的 ARN 字符串。API 响应是一个 XML 文档,其中包含 access key、secret key、session token 和过期时间。 应用程序可以使用 access key 和 secret key 来访问并操作 MinIO。
参考文档请参见 AssumeRoleWithWebIdentity。
-